【问题标题】:How to plot different class of time series data into one panel?如何将不同类别的时间序列数据绘制到一个面板中?
【发布时间】:2013-05-18 11:30:26
【问题描述】:

我在一张表中有多个产品的多个属性的每小时汇总。

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

抱歉之前的误导

【问题讨论】:

    标签: r plot time-series zoo


    【解决方案1】:

    plot.zoo 使用screenscol 参数:

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

    【讨论】:

    • 我想我没有说清楚。我想要的不是将树列数据放入一个面板,而是将 dt["a"]、dt["b"] 和 dt["c"] 的每一列数据放入一个面板。所以图中会有三个面板,每个面板代表一个属性列,不同颜色的线条代表不同的类型。我会改变原来的问题
    【解决方案2】:

    我是ggplot2 的忠实粉丝,所以我会用它来解决你的问题。请注意,我通常倾向于坚持正常的data.frame,而不是data.table 结构。此外,ggplot2 需要对数据结构进行一些更改,我使用来自reshape2melt

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

    【讨论】:

    • 我想我的问题没有说清楚。我重新编辑了这个问题,所以请再次检查。很抱歉造成误导
    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-02-25
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多