ggplot2で複数グラフ表示

ggplot2で作った複数のグラフを並べたいというケースは多々あると思います。

同一データでグループごとにグラフを分けて並べる場合

facetを使って並べます。以下使い分け。

  1. 単純に並べていく時はfacet_wrap
  2. 格子表示する時は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列