R绘制具有行名和列名的矩阵

时间:2011-04-01 23:12:51

标签: r plot

我从包含行名和列名的文件中读取矩阵中的数据。如何使用R绘图功能自动绘制Y轴上的所有列系列与X轴上的行名称,并为列名创建图例。

data = read.csv(file="sample.csv",head=T,row.names=1)
data
             ES NQ   DJ YAP    FCE ESX    LFT    HS   SNI SXF   STW    CGB
19971006 981.50 NA 8171  NA 3078.0  NA 5371.0 14870 17845  NA 339.9 122.67
19971007 989.50 NA 8232  NA 3071.0  NA 5387.0 14720 17565  NA 334.0 122.65
19971008 989.50 NA 8160  NA 3028.0  NA 5299.0 14880 17630  NA 337.2 122.07
19971009 978.00 NA 8124  NA 2962.0  NA 5264.0 15055 17425  NA 346.8 121.55

# plot ES, NQ, ... series against row-names 19971006,19971007, etc
# create legends for column series ES, NQ, etc..

请注意,它应该能够将行名称19971006,19971007视为整数,并在刻度之间创建适当的间隙(例如1年,6个月等)。我尝试了不同的东西,但它变得混乱,在绘图时似乎没有好的方法来管理行名称向量。

我应该使用不同的数据结构来表示我的数据吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

这是一个使用reshape和ggplot2的解决方案:

ggplot(
  melt(data.frame(date=as.Date(rownames(data), "%Y%m%d"), data), id.vars="date"),
  aes(date, value, colour=variable)) + 
  geom_line()
  1. 将rownames转换为Date对象并将它们绑定到原始数​​据框
  2. 通过融化
  3. 将宽幅数据框重新整理为长格式
  4. 使用ggplot2绘制它,但您可以使用其他图形包。
  5. 对于多面板版本,可以使用facet_wrap或facet_grid:

    ggplot(
      melt(data.frame(date=as.Date(rownames(data), "%Y%m%d"), data), id.vars="date"),
      aes(date, value)) + 
      geom_line() + 
      facet_wrap(~variable) +
      opts(axis.text.x=theme_text(angle=90))
    

    这是一个基本图形版本:

    d <- data.frame(date=as.Date(rownames(data), "%Y%m%d"), data)
    matplot(d[,1], d[,-1], type="b", pch=1, xaxt="n")
    axis(1, d[,1], labels=d[,1])