Barplot与堆积的时间序列

时间:2013-09-30 21:49:05

标签: r ggplot2 time-series

我有一些月度时间序列可以求和(通常是权重但在这里不重要)来获得索引的值。

以下是我的数据摘录:

    01.2009  02.2009  03.2009  04.2009  05.2009  06.2009  07.2009
aaa 321.5743 323.7106 323.9933 326.1296 329.6482 328.3287 328.9571
bbb 322.0770 324.4646 324.8730 327.1978 331.2504 329.3969 330.0252
ccc 324.7473 326.7894 328.0146 329.2398 330.4964 331.3447 332.1929

我正在学习使用ggplot2,我想得到一个堆积的条形图,即在横轴上的每个时间点,都有一个三色条,其值为aaa+bbb+ccc因此它代表了对每个系列的索引的时间演变贡献。

我还生成了一个

类型的向量dates
"2009-01-15" "2009-02-15" "2009-03-15" 

这是我到现在为止所尝试的内容

plot.data <- melt(as.data.frame(cbind(t(data), dates)), id.vars="dates")
ggplot(plot.data, aes(x=factor(dates), y=value)) + geom_bar(stat="identity")

然而,这似乎使用时间序列名称,例如aaa,作为一个额外的因素,因此我没有任何堆叠。我确信我只是做错了什么。有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:1)

为了使用ggplot2,您应该将数据放在长格式中,但您需要在之前将rownames作为新列添加。此列将用于堆叠每个日期的条形图。

这是我的代码

## read data
dat <- read.table(text='   01.2009  02.2009  03.2009  04.2009  05.2009  06.2009  07.2009
aaa 321.5743 323.7106 323.9933 326.1296 329.6482 328.3287 328.9571
bbb 322.0770 324.4646 324.8730 327.1978 331.2504 329.3969 330.0252
ccc 324.7473 326.7894 328.0146 329.2398 330.4964 331.3447 332.1929')
## add rownames as index column and put data in long format
dat.m <- melt(cbind(index=rownames(dat),dat))
## convert variable to a valid date to get pretty axes
dat.m$variable <- as.Date(paste0('15.',gsub('X','',dat.m$variable)),format='%d.%m.%Y')

library(ggplot2)
## plot it!
ggplot(dat.m) +
  geom_bar(aes(x=variable,y=value,fill=index),
           stat='identity')

enter image description here