我从包含行名和列名的文件中读取矩阵中的数据。如何使用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个月等)。我尝试了不同的东西,但它变得混乱,在绘图时似乎没有好的方法来管理行名称向量。
我应该使用不同的数据结构来表示我的数据吗?
谢谢!
答案 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()
对于多面板版本,可以使用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])