如何将不同类别的时间序列数据绘制成一个面板?

时间:2013-05-23 07:43:03

标签: r plot time-series zoo

我在一个表中有多个产品的每小时多个属性摘要。

我希望将它们绘制成一个面板,其中x轴代表时间,不同类型的产品有不同的颜色。

我的数据如下:

> require(data.table)
# Create some data 
> dt<-data.table(type=c(rep("a",168),rep("b",168),rep("c",168)),
time=1:168,A=rnorm(168,10,5),B=rnorm(168,100,20),C=rnorm(168,10,5))
> DT  #Each type has 1~168 hours summary of all three attributes

    type time         A         B         C
  1:    a    1  7.462817 119.91299  7.404987
  2:    a    2  7.733695 146.14601 -3.203601
  3:    a    3 19.034468  84.45497  9.623048
  4:    a    4  8.813990 123.21235 12.719920
  5:    a    5 16.803735  92.69359 11.393730
 ---                                        
500:    c  164 18.016771  90.29856 10.238281
501:    c  165  6.566802 131.67801 -2.085370
502:    c  166 20.031678  83.34749 12.261008
503:    c  167  4.705976 109.76303  9.327958
504:    c  168  8.648876  84.67477 19.036321

通过应用plot.zoo,我可以像这样绘制一种类型的时间:

> setkey(DT,type)
> plot(zoo(DT["a"])[,3:5])

但是如何将所有产品绘制成一个不同颜色代表不同类型的面板?

编辑: 我认为我的原始问题可以解释为2个含义:如何将“A”,“B”,“C”(不同的列)放入一个面板中以及如何将“a”“b”“c”放入(不同的类型值)在行中)到一个面板。 @Joshua Ulrich和@Paul Hiemstra都回答了第一个问题,但我真正想知道的是第二个问题。 为了更好地理解,我重命名DT的副本名称

> names(DT)<-c("type","time","Attr1" ,"Attr2" , "Attr3"  )
> DT

   type time     Attr1     Attr2     Attr3
  1:    a    1  7.462817 119.91299  7.404987
  2:    a    2  7.733695 146.14601 -3.203601
  3:    a    3 19.034468  84.45497  9.623048
  4:    a    4  8.813990 123.21235 12.719920
  5:    a    5 16.803735  92.69359 11.393730
 ---                                        
500:    c  164 18.016771  90.29856 10.238281
501:    c  165  6.566802 131.67801 -2.085370
502:    c  166 20.031678  83.34749 12.261008
503:    c  167  4.705976 109.76303  9.327958
504:    c  168  8.648876  84.67477 19.036321

我正在寻找的是一个带有3个面板的情节,每个面板代表一个属性(“Attr1”,“Attr2”,“Attr3”),在每个面板中,有几行(时间序列)用不同的颜色代表不同类型的数据(“a”,“b”,“c”)

对于以前的误导性内容感到抱歉

2 个答案:

答案 0 :(得分:2)

使用screens的{​​{1}}和col参数:

plot.zoo

enter image description here

答案 1 :(得分:0)

我是一个很大的ggplot2粉丝,所以我会用它来解决你的问题。请注意,我通常倾向于坚持正常的data.frame,而不是data.table结构。此外,ggplot2要求数据结构稍微更改,我使用melt中的reshape2来执行此操作。

library(reshape2)
library(ggplot2)
df = as.data.frame(dt)
df_melt = melt(df, id.vars = c("type", "time"))
ggplot(df_melt, aes(x = time, y = value, color = variable)) + geom_line()

enter image description here