1

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

我想将它们绘制成一个面板,其中 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 的 colnames

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

抱歉之前的误导

4

2 回答 2

2

使用screensandcol参数来plot.zoo

plot(zoo(dt["a"][,list(A,B,C)]), screens=1, col=c('red','blue','green'))

在此处输入图像描述

于 2013-05-23T13:08:20.250 回答
0

我是一个忠实的ggplot2粉丝,所以我会用它来解决你的问题。请注意,我通常倾向于坚持正常data.frame的,而不是data.table结构。此外,ggplot2需要对数据结构进行一些更改,我使用meltfrom 来做到这一点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()

在此处输入图像描述

于 2013-05-23T07:54:16.747 回答