【问题标题】:R plotting a matrix with row and column namesR绘制具有行名和列名的矩阵
【发布时间】:2011-04-01 23:12:50
【问题描述】:

我从具有行名和列名的文件中读取矩阵中的数据。如何使用 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 个月等)。我尝试了不同的方法,但它变得一团糟,而且在绘图时似乎没有很好的方法来管理行名向量。

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

谢谢!

【问题讨论】:

  • 最好使用“plot/curve”等原生绘图功能的解决方案。

标签: r plot


【解决方案1】:

这是一个使用 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. 将行名转换为日期对象并将它们绑定到原始数​​据框
  2. 通过融化将宽格式数据帧重塑为长格式
  3. 使用 ggplot2 绘制,但您可以使用其他图形包。

对于多面板版本,可以使用 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])

【讨论】:

  • 这行得通。但是,它运行有点慢,因为我认为它正在创建新的数据副本。如何使用 ggplot 拆分图表以包含 2 个图?我尝试在运行上述函数之前执行 par(mfrow=c(2,1)) ,但它不起作用。我需要为两个相似的图提供一个图例。 ggplot 是否可以灵活地执行此操作?
猜你喜欢
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多