106
library(ggplot2)
df <- data.frame(x=1:10, y=rnorm(10))
p1 <- ggplot(df, aes(x,y)) + geom_point()
plist <- list(p1,p1,p1,p1,p1)
# In my real example,a plot function will fit a ggplot to a list of datasets 
#and return a list of ggplots like the example above.

grid.arrange()inを使用してプロットを配置したいと思いgridExtraます。

plistプロットの数が可変の場合、これを行うにはどうすればよいですか?

これは機能します: grid.arrange(plist[[1]],plist[[2]],plist[[3]],plist[[4]],plist[[5]])

しかし、もっと一般的な解決策が必要です。考え?

4

5 に答える 5

161

これはどう:

library(gridExtra)
n <- length(plist)
nCol <- floor(sqrt(n))
do.call("grid.arrange", c(plist, ncol=nCol))

ここに画像の説明を入力

于 2012-05-22T17:14:04.967 に答える
1

すべてのプロットを 1 ページに収めるには、次のように列と行の数を計算できます。

x = length(plots)

cols = round(sqrt(x),0)
rows = ceiling(x/cols)

ほとんどの複数のプロット関数は引数として ncol と nrow を持っているので、これらをそこに入れることができます。ggpubr の ggarrange が好きです。

ggarrange(plotlist = plots, ncol=cols, nrow = rows)

これは、列よりも多くの行を優先するため、逆にしたい場合は逆にします。つまり、6 つのプロットの場合、3 行と 2 列が得られますが、その逆ではありません。

于 2018-11-27T07:56:30.690 に答える