在ggplot2中创建任意窗格

在基本图形中,我可以通过执行以下操作来创建4面板图形窗格:


par(mfrow=c(2,2))

for (i in 1:4){

  plot(density(rnorm(100)))

}

我想用ggplot2做同样的事情,但是我不知道该怎么做。我无法使用方面,因为与这个琐碎的示例不同,我的真实数据的结构完全不同,我希望两个图成为点图,两个图成为直方图。如何在ggplot2中创建面板或窗格?


跃然一笑
浏览 776回答 4
4回答

ITMISS

{Ben Bolker指出了一个更好的选择- grid.arrange从gridExtra包装中。ggplot2但是,如果您是用户,R Cookbook网站仍然值得点击。}R Cookbook的此页上有一个很好的multiplot功能代码(绝对值得一游),它对于这种事情很有用。直接从该站点报价:multiplot <- function(..., plotlist=NULL, cols) {&nbsp; &nbsp; require(grid)&nbsp; &nbsp; # Make a list from the ... arguments and plotlist&nbsp; &nbsp; plots <- c(list(...), plotlist)&nbsp; &nbsp; numPlots = length(plots)&nbsp; &nbsp; # Make the panel&nbsp; &nbsp; plotCols = cols&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# Number of columns of plots&nbsp; &nbsp; plotRows = ceiling(numPlots/plotCols) # Number of rows needed, calculated from # of cols&nbsp; &nbsp; # Set up the page&nbsp; &nbsp; grid.newpage()&nbsp; &nbsp; pushViewport(viewport(layout = grid.layout(plotRows, plotCols)))&nbsp; &nbsp; vplayout <- function(x, y)&nbsp; &nbsp; &nbsp; &nbsp; viewport(layout.pos.row = x, layout.pos.col = y)&nbsp; &nbsp; # Make each plot, in the correct location&nbsp; &nbsp; for (i in 1:numPlots) {&nbsp; &nbsp; &nbsp; &nbsp; curRow = ceiling(i/plotCols)&nbsp; &nbsp; &nbsp; &nbsp; curCol = (i-1) %% plotCols + 1&nbsp; &nbsp; &nbsp; &nbsp; print(plots[[i]], vp = vplayout(curRow, curCol ))&nbsp; &nbsp; }}在3×2布局中尝试6个地块(JD Long的四个地块,以及两个奖励地块!):set.seed(2)q1 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q2 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q3 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q4 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q5 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q6 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()multiplot(q1, q2, q3, q4, q5, q6, cols=2)给出这个数字:如果该功能不能完全满足您的需求,至少可以为您提供一个不错的起点!

收到一只叮咚

感谢Andrie的评论和Harlan对我之前的问题(!)的回答,我提出了此解决方案,该解决方案实现了我所追求的目标:set.seed(2)q1 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q2 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q3 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()q4 <- ggplot(data.frame(x=rnorm(50)), aes(x)) + geom_density()grid.newpage()pushViewport(viewport(layout=grid.layout(2,2)))vplayout <- function(x,y) viewport(layout.pos.row=x,layout.pos.col=y)print(q1,vp=vplayout(1,1))print(q2,vp=vplayout(1,2))print(q3,vp=vplayout(2,1))print(q4,vp=vplayout(2,2))
打开App,查看更多内容
随时随地看视频慕课网APP