1. ホーム
  2. r

[解決済み】ggplot2によるサイド・バイ・サイド・プロット

2022-03-25 03:38:53

質問

を使用して、2つのプロットを並べて配置したいのですが。 ggplot2 パッケージ つまり par(mfrow=c(1,2)) .

例えば、次の2つのプロットを同じ縮尺で並べて表示させたい。

x <- rnorm(100)
eps <- rnorm(100,0,.2)
qplot(x,3*x+eps)
qplot(x,2*x+eps)

同じdata.frameに入れる必要があるのでしょうか?

qplot(displ, hwy, data=mpg, facets = . ~ year) + geom_smooth()

解決方法は?

任意のggplotを横に並べて表示する(またはグリッド上にn個のプロットを表示する)

機能 grid.arrange() の中にある gridExtra パッケージは、複数のプロットを結合します。これは、2つのプロットを横に並べる方法です。

require(gridExtra)
plot1 <- qplot(1)
plot2 <- qplot(1)
grid.arrange(plot1, plot2, ncol=2)

これは、2つのプロットが同じデータに基づいていない場合に便利です。例えば、reshape()を使用せずに異なる変数をプロットしたい場合などです。

これは、副作用として出力をプロットします。副作用をファイルに出力するには、デバイスドライバを指定します(例えば pdf , png など)、例えば

pdf("foo.pdf")
grid.arrange(plot1, plot2)
dev.off()

または arrangeGrob() と組み合わせて ggsave() ,

ggsave("foo.pdf", arrangeGrob(plot1, plot2))

を使用して2つの異なるプロットを作成することと同じです。 par(mfrow = c(1,2)) . これはデータの配置の時間を節約するだけでなく、2つの異なるプロットが必要な場合にも必要です。


付録 ファセットの使用

ファセットは、異なるグループに対して同様のプロットを作成するのに便利です。これは以下の多くの回答で指摘されていますが、上記のプロットに相当する例でこの方法を強調したいと思います。

mydata <- data.frame(myGroup = c('a', 'b'), myX = c(1,1))

qplot(data = mydata, 
    x = myX, 
    facets = ~myGroup)

ggplot(data = mydata) + 
    geom_bar(aes(myX)) + 
    facet_wrap(~myGroup)


更新情報

その plot_grid 関数で cowplot の代わりとして、チェックする価値があります。 grid.arrange . を参照してください。 答え 以下の@claus-wilkeによるもの、および このヴィネット に基づいて、プロットの位置や大きさをより細かく制御することができます。 このヴィネット .