R中不同组的时间序列多重图
我有一个包含多个变量(大约50个)的大数据框,第一列为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
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]])