在for循环中绘制的多个ggplot2图的网格 作为一个新的GGPLOT2用户,我有点失去了大量的可能性,并努力在网上找到一个简单的答案,我认为一个简单的问题。

在for循环中绘制的多个ggplot2图的网格 作为一个新的GGPLOT2用户,我有点失去了大量的可能性,并努力在网上找到一个简单的答案,我认为一个简单的问题。,r,ggplot2,r-grid,R,Ggplot2,R Grid,我想在同一张图纸上显示ggplot2中的多个绘图,但知道这些绘图来自for循环 以下示例未编译,仅用于说明: for(i in c(1:n)){ for(j in c(1:m)){ .......... # some data production p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j]

我想在同一张图纸上显示ggplot2中的多个绘图,但知道这些绘图来自for循环

以下示例未编译,仅用于说明:

for(i in c(1:n)){                                   
  for(j in c(1:m)){
    ..........  # some data production
    p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}}
但就我所做的来说,我无法列出绘图的矩阵,也无法找到只接受一个参数作为输入的函数

关于我看过的东西:

程序包gridExtra中的“arrangeGrob”不起作用,因为它要求每个绘图(例如:p1、p2、p3等)有一个明确的名称,如

ggplot2的“方面”方法不适用于我的数据集的组织(或相反:p)

你有一个简单的方法来管理这个吗

谢谢,


弗朗索瓦

我倾向于同意里奇的观点,但如果你想自己安排的话:

library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
  p[[i]] <- qplot(1:10,10:1,main=i)
}
do.call(grid.arrange,p)

这是我的解决方案。
ggplot
函数中的微小变化,将
参数映射到
aes\u字符串

library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- ggplot(data=df,aes_string(x=df$x,y=df$y) +geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}
do.call(grid.arrange,p)
库(gridExtra)
图书馆(GG2)

p你在正确的轨道上。如果您正在绘制许多不同情况的条形图,则标准方法是使用多个面绘制一个图。为了实现这一点,最好是将你的图片转换成一个合适的形式,而不是找到一个多个情节的黑客。谢谢。我同意这肯定是最合理的解决办法。问题是,对于每个单独的绘图,我还想进行一些数据处理(聚合小类和完全卡方检验),并将p值显示为单独的绘图标题。因此,这当然可以包含在facet方法中,但我认为在某个时候我必须使用p循环。您可以使用
geom_text
用p值注释每个facet。谢谢。我在帮助手册中读到的信息,以及我从未使用过的do.call函数的说明,都更加清晰了。如果使用面失败,我将使用此解决方案。您的第一个示例在“qplot(c(1:10),c(10:1)+I,main=I)”的情况下生成相同的绘图。我将如何使用此方法添加网格。排列参数,如ncol、nrow、高度、宽度等。
plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x)))
require(gridExtra)
do.call(grid.arrange,  plots)
library(gridExtra)
library(ggplot2)
p <- list()
for(i in 1:4){
p[[i]] <- ggplot(data=df,aes_string(x=df$x,y=df$y) +geom_bar(aes_string(x=class.names[i],fill=var.names[j])
}
do.call(grid.arrange,p)