R 用行名和列名绘制矩阵

发布于 2024-10-29 11:16:12 字数 810 浏览 3 评论 0原文

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

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 个月等)。我尝试了不同的方法,但它变得混乱,并且在绘图时似乎没有好的方法来管理行名称向量。

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

谢谢!

I read a data in a matrix from a file with row and column names. How do I use R plotting functions to automatically plot all the column series on the Y-axis against row-names on the X-axis and create legends for column-names.

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..

Note that it should be able to treat the row-names 19971006,19971007 as integers and create appropriate gap between ticks (such as 1 year, 6 months, etc). I tried different things but it gets messy and there seems to be no good way to manage the row-names vector when plotting.

Should I use a different data structure to represent my data?

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

两人的回忆 2024-11-05 11:16:12

这是使用 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. 将行名称转换为 Date 对象并将它们绑定到原始数​​据框
  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])

here is a solution using reshape and 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. convert rownames to Date object and bind them to the original data frame
  2. reshape the wide format data frame to long format by melt
  3. plot it using ggplot2, but you can use other graphic package.

And for multi-panel version, facet_wrap or facet_grid is available:

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

And here is a base graphics version:

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])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文