0

可能重复:
从 R 函数中生成多个图形

我正在使用此 ggplot 函数通过列表绘制多个变量:

plotTimeSeries <- list(n25_30,n28_30,n29_30,n31_30,n32_30)


for (i in plotTimeSeries) {
  i$dt <- strptime(i$dt, "%Y-%m-%d %H:%M:%S")
  ggplot(i, aes(dt, ambtemp)) + geom_line() +
    scale_x_datetime(breaks = date_breaks("2 hour"),
                     labels=date_format("%H:%M")) + 
    labs(x="Time 00.00 ~ 24:00 (2007-09-30)",y="Ambient Temperature",
         title = (paste("Node",i)))
}

数据样本:

    ambtemp                  dt
1     -1.64 2007-09-29 00:01:09
2     -1.76 2007-09-29 00:03:09
3     -1.83 2007-09-29 00:05:09
4     -1.86 2007-09-29 00:07:09
5     -1.94 2007-09-29 00:09:09
6     -1.87 2007-09-29 00:11:09
7     -1.87 2007-09-29 00:13:09
8     -1.80 2007-09-29 00:15:09
9     -1.64 2007-09-29 00:17:09
10    -1.60 2007-09-29 00:19:09
11    -1.90 2007-09-29 00:21:09

我不知道我应该如何调用 r 中的函数。实际上,代码没有发生错误。另一方面,破坏此代码没有出现任何结果。

4

1 回答 1

2

当您使用 for 循环时,您“有点”在函数中。我说“有点”是因为分配将发生在全局环境中(假设循环是从控制台启动的),但ggplot除非lattice包裹在print或等效的plot. 所以这样做(并阅读常见问题解答):

for (i in plotTimeSeries) {
  i$dt <- strptime(i$dt, "%Y-%m-%d %H:%M:%S")
  print(
  ggplot(i, aes(dt, ambtemp)) + geom_line() +
    scale_x_datetime(breaks = date_breaks("2 hour"),
                     labels=date_format("%H:%M")) + 
    labs(x="Time 00.00 ~ 24:00 (2007-09-30)",y="Ambient Temperature",
         title = (paste("Node",i)))
        )  # append most recent plot
    }

我冒着复制早期帖子的风险,但认为扩展正在发生的事情可能仍然有用。当您在控制台输入时,会在提交kbd-return 后立即执行一个隐式的“read-eval-print”循环。当您在循环中运行代码时,该过程的“打印”部分不是自动的,并且在两个网格绘图范例的情况下,它们会默默地返回它们的值。如果没有明确打印或分配,将不会有可以恢复的结果或将其推送到图形设备。如果已经分配了一个名称,则可以打印或进一步修改这些图:

plotlist <- list()
for (i in plotTimeSeries) {
  i$dt <- strptime(i$dt, "%Y-%m-%d %H:%M:%S")
  plotlist <- c(plotlist, 
  ggplot(i, aes(dt, ambtemp)) + geom_line() +
    scale_x_datetime(breaks = date_breaks("2 hour"),
                     labels=date_format("%H:%M")) + 
    labs(x="Time 00.00 ~ 24:00 (2007-09-30)",y="Ambient Temperature",
         title = (paste("Node",i)))
        )
               )
    }

lapply(plotlist, print)
于 2013-01-09T21:14:48.020 回答