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

R中不同组的时间序列多重图,r,plot,ggplot2,R,Plot,Ggplot2,我有一个包含多个变量(大约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

我有一个包含多个变量(大约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))
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"))
}

df你的意思是这样的吗

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')

您还可以将
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))

编辑:阅读评论后,也许你应该尝试以下方法:

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))
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"))
}
library(tidyr)

df2 Probs应该首先
as.Date
,以防真正的数据集缺少日期。是的,有点像这样,但我想在不同的窗口中绘制它,因为我有50多个变量。还想为不同的颜色添加图例。@Rajan请澄清。@jbaums是的,应该是。因为我有50多个变量,它们有不同的最大值和最小值。我希望它们是分开的,这样我就可以将每个变量绘图保存为单独的pngfile@MichaelT谢谢你的帮助,但我有50多个变量。所以不可能像这样画。所以我想让它一个接一个地绘制,这样我就可以单独保存每个变量的图形,永远不要在这里使用
do()
+1您应该使用
paste0()
paste(sep=“”)
,这样文件名中就没有空格了。谢谢您的帮助。编辑:)@Steven谢谢你的帮助,但我有50多个变量。所以不可能像这样画。因此,我希望它一个接一个地打印,这样我就可以分别保存每个变量的图形。我希望通过ylab(colnames(df[i])将每个打印的y标签更改为变量名,但它不起作用。我得到了以下错误:“error in+ylab(colnames(data)[i]):一元运算符的参数无效”.你能帮我吗something@Rajan,访问vars变量可能更好,因为它是for循环的一部分。请尝试
ylab(as.character(vars[[i]])