【问题标题】:Multiple plots in R using loopR中使用循环的多个图
【发布时间】:2014-07-08 12:07:02
【问题描述】:

我有两个数据集。一个有旧的观察结果,一个有新的观察结果,我想在不同的绘图窗口中将它们相互绘制。我必须做几个情节,但我不知道如何制作循环。我尝试过这样的事情:

pltName <-paste("p", 1:25, sep="")

for (i in 1:25){
pltName[i] <- qplot(dfOld[i], dfNew[i], geom = "point")
}

但这不起作用。

数据框看起来像这样:

df旧:

            Old1  Old2  Old3  Old4  .... Old25
            21.0   6    160   110  ....
            21.0   6    160   110 .... 
            22.8   4    108   93 ....

df新:

            New1  New2  New3  New4  .... New25
            22.0   5    150   180  ....
            23.0   6    162   100 .... 
            21.8   5    103   90 ....

【问题讨论】:

  • 您需要将pltName初始化为列表pltName &lt;- vector("list", 25),然后使用pltName[[i]] &lt;- ...分配给它。
  • 我假设 dfOld 和 dfNew 是数据框,但是您要绘制其中的哪些变量?
  • 你的意思是这样的: pltName
  • 我要绘制:plot(dfOld[i],dfNew[i]) for all i
  • 是的,这就是我的意思,但不确定您为什么将 for 循环范围更改为 2:26。另外,我认为您的意思是qplot,而不是plot

标签: r loops plot


【解决方案1】:

创建一个数据框,其中包含一列值和第二列源值的来源。

library(ggplot2)

xy <- data.frame(x = runif(20), y = runif(20), source = rep(letters[1:2], each = 10))

ggplot(xy, aes(x = x, y = y, color = source)) +
  theme_bw() +
  geom_point()

或者,如果您想为每个来源提供一个方面,请尝试

ggplot(xy, aes(x = x, y = y)) +
  theme_bw() +
  geom_point() + 
  facet_wrap(~ source)

【讨论】:

  • 您好,感谢您的回答。也许我没有正确解释我的问题。
  • 我不想在同一个窗口中绘图。我想制作不同的绘图窗口,并将每个绘图窗口存储在一个“向量”中。然后使用 grid.arrange()
【解决方案2】:

您需要将绘图存储在一个列表中,然后在该列表中使用grid.arrange

plots <- vector("list", length(dfOld))
p <- qplot(dfOld[, 1], dfNew[, 1], geom = "point")
for (i in seq_along(plots))
    plots[[i]] <- p %+% aes_q(x = dfOld[, i], y = dfNew[, i])
do.call(grid.arrange, plots)

更好的方法是使用Map:

plots <- Map(qplot, x = dfOld, y = dfNew, geom = "point")
do.call(grid.arrange, plots)

【讨论】:

  • 这有帮助。现在我可以绘制一些东西了。现在的问题是,所有 25 个地块都是同一个地块。
  • 是的,我也注意到了,抱歉。我不确定为什么会发生这种情况会尝试解决它并更新答案。
  • 只保留循环的最后一个值,除非你使用aes_q。查看更新的答案。
猜你喜欢
  • 2014-01-20
  • 2019-07-01
  • 2021-05-25
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多