ggplot2で複数グラフ表示
ggplot2で作った複数のグラフを並べたいというケースは多々あると思います。
同一データでグループごとにグラフを分けて並べる場合
facetを使って並べます。以下使い分け。
- 単純に並べていく時はfacet_wrap
- 格子表示する時はfacet_grid
facet_wrapは並べ方を色々と調整できる。
library(ggplot2) a <- ggplot(data=diamonds, aes(x=price)) + geom_histogram() a + facet_wrap(~cut)
a + facet_wrap(~cut, ncol=5) #5列に並べる
a + facet_wrap(~cut, nrow=5) #5行に並べる
a + facet_wrap(clarity~cut) #複数変数の場合は各グラフの頭に組合せが表示される
facet_gridは格子状に表示。2変数以上でfacet_wrapとの違いが出てくる。
a + facet_grid(~cut) #1変数→facet_wrapと変わらない
a + facet_grid(clarity~cut) #2変数
異なるデータのグラフを重ねる場合
異なるデータのグラフを重ねる場合はviewportを使い、printのvpパラメータで指定します。
b <- ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width)) + geom_point() c <- ggplot(data=movies, aes(x=year)) + geom_bar() + coord_polar() + xlim(2,8) print(a)#メインのグラフ print(b, vp = viewport(width=0.2, height=0.2, x=0.3, y=0.7))#サブグラフの幅、高さ、位置を設定 print(c, vp = viewport(width=0.4, height=0.4, x=0.75, y=0.35))
異なるデータのグラフを並べる場合
layoutで画面を区切ってそのマス目で位置を指定します。
grid.newpage() #空の画面を作る pushViewport(viewport(layout=grid.layout(2, 2))) #画面を区切る(今回は2行2列の4分割) print(a, vp=viewport(layout.pos.row=1, layout.pos.col=1:2)) #1行目の1・2列 print(b, vp=viewport(layout.pos.row=2, layout.pos.col=1) ) #2行目の1列 print(c, vp=viewport(layout.pos.row=2, layout.pos.col=2) ) #2行目の2列