【问题标题】:ggplot and multiplot always display the same contentggplot 和 multiplot 总是显示相同的内容
【发布时间】:2017-09-23 19:28:46
【问题描述】:

我正在尝试使用 multiplot 函数 (http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/) 在一张图中排列多个图。以下示例取自 http://rstudio-pubs-static.s3.amazonaws.com/2852_379274d7c5734f979e106dcf019ec46c.html,运行良好:

plots <- list()  # new empty list
for (i in 1:6) {
    p1 = qplot(1:10, rnorm(10), main = i)
    plots[[i]] <- p1  # add each plot into plot list
}
multiplot(plotlist = plots, cols = 3)

但是,我的代码没有:

dataset <- data.frame(x=c(1,2,3,4,5,6), y1=c(1,4,6,8,10,12), y2=rnorm(6))
plots <- list()
for (i in 1:2){
  plots[[i]] <- ggplot(dataset) + geom_point(aes(x=dataset[,1], y=dataset[,i+1]))
}

multiplot(plotlist = plots, cols=2)

不知何故,它与绘图对象如何分配给列表有关,当我这样做时

a <- ggplot(dataset) + geom_point(aes(x=dataset[1], y=dataset[2]))
b <- ggplot(dataset) + geom_point(aes(x=dataset[1], y=dataset[3]))
multiplot(a,b)

一切都按预期进行。 multiplot(plotlist=list(a,b)) 也可以正常工作。

我不知道相关的差异是什么。任何人都可以帮忙吗?

非常感谢,

恩诺

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    嗯。令人着迷。

    事实证明,ggplot 调用中的i 在实际创建绘图之前不会被评估:

    plots <- list()
    i <- 1
    plots[[i]] <- ggplot(dataset) + geom_point(aes(x=dataset[,1], y=dataset[,i+1]))
    

    用 y1 绘制你的情节:

    plots[[1]]
    

    更改i

    i <- 2
    

    现在你的列表突然用 y2 渲染你的情节:

    plots[[1]]
    

    【讨论】:

      【解决方案2】:

      我认为它必须将数据集设置为 aes。我通常直接调用似乎有效的变量:

      plots <- list()
      for (i in 1:2){
        p1 <- ggplot(dataset,aes_string(x=names(dataset)[1], y=names(dataset)[i+1])) + geom_point()
        plots[[i]] <- p1
      }
      
      multiplot(plotlist = plots, cols=2)
      

      【讨论】:

      • 谢谢,这似乎成功了!虽然我不明白问题的根本原因。
      • @Janna Maas 提供的解释似乎有道理!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      相关资源
      最近更新 更多