Rを通じて統計学を学ぶ備忘録ブログ

SPSSからRに移行したい私のような人向けのR解説ブログ兼学習用備忘録。

第67回 ggplotの備忘録その4

今回はggplot2の棒グラフを中心にみていきます。棒グラフを作成する際に注意すべき点は、y軸に「個数」を配置するのか、「値」を配置するのかを区別することくらいかなー。

 

> ggplot(demo, aes(x = order, y = y))+geom_bar(stat = "identity")

#stat="identity":値を示す設定

f:id:teruaki-sugiura:20160102162524p:plain

離散変数として変数orderを扱うために、orderにfactor関数を使います。その結果、連続変数から離散変数へと変換され、x軸の「3」がなくなります。

> ggplot(demo, aes(x = factor(order), y = y))+geom_bar(stat = "identity")  

x = factor(order):ファクタに変換する

f:id:teruaki-sugiura:20160102162531p:plain

x軸に設定した変数について、違うカテゴリ変数(第3変数)を使って分類する場合は以下のように、fill=第3変数(カテゴリ分けする変数)を指定します。加えて、積み上げ棒グラフにならないように、position = "dodge"を指定します。

> demo$ordered_rank<-

factor(demo$rank, levels=c("very bad", "bad", "better", "good", "very good"))

 

> ggplot(demo, aes(class, fill = ordered_rank))

+ geom_bar(position = "dodge")

position = "dodge"はposition = position_dodgeの簡略表現

f:id:teruaki-sugiura:20160102162547p:plain

棒の間隔を調整したい時は、geom_bar()内で指定します。

> ggplot(demo, aes(class, fill = ordered_rank))

+geom_bar(width = 0.5, position = position_dodge(0.7))

 

#width=0.5:棒の幅を調整する

#position=position_dodge(0.7):棒の中心位置を調整する。間隔を空けたければ、width<dodgeと設定する。

f:id:teruaki-sugiura:20160102162557p:plain

>ggplot(demo, aes(class, fill = ordered_rank))+geom_bar() 

f:id:teruaki-sugiura:20160102162622p:plain

ラベルを重ねる場合は、geom_text()内で指定します。

> rank.very.good<-demo[demo$rank=="very good",]

# rank.very.good<-subset(demo,demo$rank=="very good")でも同じ

 

> ggplot(rank.very.good, aes(x = reorder(area, y), y = y, fill = class))

+geom_bar(stat = "identity", col = "black")

+scale_fill_manual(values = c("#003300", "#993333"))

+geom_text(aes(label = y), col = "white", vjust = 1.5, size = 7)

+xlab("area") 

 

#y=reorder(area, y)

:area列を取得し、ファクタに変換の後、ファクタレベルをyでソートする。レベルの順序変更をカテゴリ分けした平均値の大きさで順序付けを行っている。そのため、綺麗に整列するようになる。

#vjust = 1.5:文字の縦位置を調整

#size = 7 :文字の大きさを調整

f:id:teruaki-sugiura:20160102162807p:plain

負が含まれる変数をグラフ化する際には以下のように行います。

> ggplot(demo, aes(x = no, y = posinega, fill = class))

+ geom_bar(stat = "identity", position = "identity", col = "black", size = 5)

 

#position="identity":負の値の積み上げ設定

#size=5:棒グラフの枠線の太さ

#guide=FALSE:凡例を消去する場合

 

f:id:teruaki-sugiura:20160102163306p:plain

 

クリーブランドプロット

 

areaorder <- demo$area[order(demo$x1,demo$class)]

#areaを取得し、最初にx1でソートして、次にclassでソートする

 

demo$area <- factor(demo$area, levels = areaorder)

#areaをareaorderの順序のレベルを持つファクタに変換する

 

ggplot(demo, aes(x = x1, y = reorder(area, x1))) + geom_point(size = 3)

 

#y=reorder(area, x1)

:area列を取得し、ファクタに変換の後、ファクタレベルをx1でソートする。レベルの順序変更をカテゴリ分けした平均値の大きさで順序付けを行っている。そのため、綺麗に整列するようになる。

 

areaorder <- demo$area[order(demo$x1, demo$class)]

demo$area <- factor(demo$area, levels = areaorder)

 

> ggplot(demo, aes(x = x1, y = area))

+ geom_segment(aes(yend = area), xend = 0, col = "grey50")

+ geom_point(size = 3, aes(col = class))

+ scale_colour_brewer(palette = "Set1", limits = c("a","b"), guide =FALSE)

+ theme_bw()

+ theme(panel.grid.major.y = element_blank())

+ facet_grid(class ~ ., scales = "free_y", space = "free_y")

 

f:id:teruaki-sugiura:20160102163507p:plain

少し複雑なので、細かく見ていきましょう。以下のようになります。

 

ggplot(demo, aes(x = x1, y = area))

→データを与える。 

f:id:teruaki-sugiura:20160102163650p:plain

 

+ geom_segment(aes(yend = area), xend = 0, col = "grey50")

→xendで線の開始位置を調整する。xend=5にするとx1=5の位置から線が引かれる。

 

f:id:teruaki-sugiura:20160102163720p:plain

 

+ geom_point(size = 3, aes(col = class))

→classでカテゴリ分けして、色づけ。

f:id:teruaki-sugiura:20160102163732p:plain

 

+ scale_colour_brewer(palette="Set1", limits = c("a", "b"), guide = FALSE)

→色づけの変更と凡例を消去(guide = FALSE)。

f:id:teruaki-sugiura:20160102163746p:plain

 

+ theme_bw()

→theme_bw()は白背景に灰色のグリッドという外観を設定する

f:id:teruaki-sugiura:20160102163850p:plain

 

 

+ theme(panel.grid.major.y = element_blank())

→格子の調整。今回は横線を消す。

 

f:id:teruaki-sugiura:20160102163922p:plain

 

+ facet_grid(class ~ ., scales = "free_y", space = "free_y")

→ファセットを作成する。scales="free_y", space="free_y"で枠を適度に調整する。

f:id:teruaki-sugiura:20160102163507p:plain

 

 今回は以上でおしまい。