R中不同组的时间序列多图

Time series multiple plot for different group in R

我有一个包含多个变量(大约 50 个)的大型数据框,第一列为 date,第二列为 id

我的数据大致是这样的:

df <- data.frame(date = c("01-04-2001 00:00","01-04-2001 00:00","01-04-2001 00:00",
                      "01-05-2001 00:00","01-05-2001 00:00","01-05-2001 00:00",
                      "01-06-2001 00:00","01-06-2001 00:00","01-06-2001 00:00",
                      "01-07-2001 00:00","01-07-2001 00:00","01-07-2001 00:00"), 
             id = c(1,2,3,1,2,3,1,2,3,1,2,3), a = c(1,2,3,4,5,6,7,8,9,10,11,12), 
             b = c(2,2.5,3,3.2,4,4.6,5,5.6,8,8.9,10,10.6))

我想在同一个变量图中分别为所有三个 id 绘制时间序列图,ab 在不同的图中。

我试过 ggplot 但没用。请帮助我

你的意思是这样的吗?

library(reshape)
library(lattice)

df2 <- melt(df, id.vars = c("date", "id"), measure.vars = c("a", "b"))

xyplot(value ~ date | variable, group = id, df2, t='l')

附录

# The following is from a comment by jbaums. 
# It will create a single plot/file for each variable of df2
png('plots%02d.png')
xyplot(value ~ date | variable, group = id, df2, t='l', layout=c(1, 1), 
       scales=list(alternating=FALSE, tck=1:0))
dev.off()

您还可以将 relation='free' 添加到 scales,以便为每个绘图单独计算 y 轴限制。

以下是如何在 ggplot 中执行此操作,使用 tidyr 包以正确的格式获取它:

library(ggplot2)
library(tidyr)
library(dplyr)

df <- data.frame(date = c("01-04-2001 00:00","01-04-2001 00:00","01-04-2001 00:00",
                      "01-05-2001 00:00","01-05-2001 00:00","01-05-2001 00:00",
                      "01-06-2001 00:00","01-06-2001 00:00","01-06-2001 00:00",
                      "01-07-2001 00:00","01-07-2001 00:00","01-07-2001 00:00"), 
             id = c(1,2,3,1,2,3,1,2,3,1,2,3), a = c(1,2,3,4,5,6,7,8,9,10,11,12), 
             b = c(2,2.5,3,3.2,4,4.6,5,5.6,8,8.9,10,10.6))

然后使用dplyr的group_by和do函数,我们可以保存多个图

df %>%
  gather(variable, value, -date, -id) %>%
  mutate(id = factor(id)) %>%
  group_by(variable) %>%
  do(
    qplot(data = ., x = date, y = value, geom = "line", group = id, color = id, main = paste("variable =", .$variable)) +
          ggsave(filename = paste0(.$variable, ".png")
             )
    ) 

编辑: 阅读评论后,也许您应该尝试这样的操作:

library(tidyr)
df2 <- gather(df, variable, value, -date, -id)
vars <- unique(df2$variable)

library(ggplot2)
for (i in 1:length(vars)) {
  ggplot() + 
    geom_line(data = subset(df2, variable == vars[[i]]), 
              aes(date, value, group = id, color = factor(id))) +
    ylab(as.character(vars[[i]])) +
    ggsave(file = paste0(vars[[i]], ".png"))
}

这应该为数据框中的每个变量保存一个 PNG(并将 根据您的要求将每个图的 y 标签更改为变量名称