2013-09-30 4 views
0

У меня есть несколько месячных временных рядов, которые можно суммировать (с весами обычно, но не важными здесь), чтобы получить значение для индекса.Барплот со сложными временными рядами

Вот выдержка из моих данных:

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, и я хотел бы получить многослойную barplot участок, то есть в каждый момент времени на горизонтальной оси, есть три - цветной бар со значением 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

Чтобы использовать ggplot2, вы должны поместить свои данные в длинный формат, но вам нужно прежде, чтобы добавить имена ростов в качестве нового столбца. Этот столбец будет использоваться для складывания ваших баров для каждой даты.

Вот мой код

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

+1

Удивительно. Я боролся с этим уже пару часов. Спасибо! – johnny

Смежные вопросы