与ggplot 2并排的地块

与ggplot 2并排的地块

我想将两个情节并排放置在ggplot 2软件包,即相当于par(mfrow=c(1,2)).

例如,我希望下面的两个情节以相同的规模并排展示。

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

我需要把它们放在同一个数据帧中吗?

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


POPMUISE
浏览 715回答 2
2回答

喵喵时光机

并排(或网格上的n块)功能grid.arrange()在gridExtra包将合并多个情节;这是如何将两个并排放置。require(gridExtra)plot1 <- qplot(1)plot2 <- qplot(1)grid.arrange(plot1, plot2, ncol=2)当这两幅图不是基于相同的数据时,这是非常有用的,例如,如果您想要绘制不同的变量而不使用RESTPE()。这将把输出绘制成一个副作用。若要将副作用打印到文件,请指定设备驱动程序(如pdf, png等),例如。pdf("foo.pdf")grid.arrange(plot1, plot2)dev.off()或者,使用arrangeGrob()结合在一起ggsave(),ggsave("foo.pdf", arrangeGrob(plot1, plot2))这相当于使用par(mfrow = c(1,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)

呼如林

您可以使用以下方法multiplot功能来自温斯顿·张的R食谱multiplot(plot1,&nbsp;plot2,&nbsp;cols=2)multiplot&nbsp;<-&nbsp;function(...,&nbsp;plotlist=NULL,&nbsp;cols)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;require(grid) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Make&nbsp;a&nbsp;list&nbsp;from&nbsp;the&nbsp;...&nbsp;arguments&nbsp;and&nbsp;plotlist &nbsp;&nbsp;&nbsp;&nbsp;plots&nbsp;<-&nbsp;c(list(...),&nbsp;plotlist) &nbsp;&nbsp;&nbsp;&nbsp;numPlots&nbsp;=&nbsp;length(plots) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Make&nbsp;the&nbsp;panel &nbsp;&nbsp;&nbsp;&nbsp;plotCols&nbsp;=&nbsp;cols&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Number&nbsp;of&nbsp;columns&nbsp;of&nbsp;plots &nbsp;&nbsp;&nbsp;&nbsp;plotRows&nbsp;=&nbsp;ceiling(numPlots/plotCols)&nbsp;#&nbsp;Number&nbsp;of&nbsp;rows&nbsp;needed,&nbsp;calculated&nbsp;from&nbsp;#&nbsp;of&nbsp;cols &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Set&nbsp;up&nbsp;the&nbsp;page &nbsp;&nbsp;&nbsp;&nbsp;grid.newpage() &nbsp;&nbsp;&nbsp;&nbsp;pushViewport(viewport(layout&nbsp;=&nbsp;grid.layout(plotRows,&nbsp;plotCols))) &nbsp;&nbsp;&nbsp;&nbsp;vplayout&nbsp;<-&nbsp;function(x,&nbsp;y) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;viewport(layout.pos.row&nbsp;=&nbsp;x,&nbsp;layout.pos.col&nbsp;=&nbsp;y) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Make&nbsp;each&nbsp;plot,&nbsp;in&nbsp;the&nbsp;correct&nbsp;location &nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(i&nbsp;in&nbsp;1:numPlots)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curRow&nbsp;=&nbsp;ceiling(i/plotCols) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;curCol&nbsp;=&nbsp;(i-1)&nbsp;%%&nbsp;plotCols&nbsp;+&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(plots[[i]],&nbsp;vp&nbsp;=&nbsp;vplayout(curRow,&nbsp;curCol&nbsp;)) &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP