2010-08-03 2 views
2

Привет,R и сложенные диаграммы области?

У меня есть три TS переменные, напоминающих что-то вроде следующего:

data <- read.csv(...) 
dataA = zoo(data$valueA, data$date) 
dataB = zoo(data$valueB, data$date) 
dataC = zoo(data$valueC, data$date) 

days = seq(start(dataA), end(dataA), "day") 

dataAts = na.locf(merge(dataA, zoo(,days))) 
dataBts = na.locf(merge(dataB, zoo(,days))) 
dataCts = na.locf(merge(dataC, zoo(,days))) 

Мне нужно рисовать dataAts, dataBts и dataCts в виде диаграммы сложенных в области R. Я попытался использовать plotrix , но я недостаточно разбираюсь, чтобы получить матрицу в правильной форме.

Обращаем ваше внимание, что dataAts, dataBts и dataCts еще не накоплены, поэтому не только вывести их из трех в правильном порядке (если только вы не можете придумать способ их суммирования -fly).

Может кто-нибудь ПОЖАЛУЙСТА, помогите мне?

Заранее спасибо ...

ответ

3

Как насчет чего-то подобного?

library(zoo) 
library(ggplot2) 

data <- data.frame(date=Sys.Date()+1:30, 
    valueA=runif(30), valueB=runif(30), valueC=runif(30)) 

dataA = zoo(data$valueA, data$date) 
dataB = zoo(data$valueB, data$date) 
dataC = zoo(data$valueC, data$date) 

days = seq(start(dataA), end(dataA), "day") 

dataAts = na.locf(merge(dataA, zoo(,days))) 
dataBts = na.locf(merge(dataB, zoo(,days))) 
dataCts = na.locf(merge(dataC, zoo(,days))) 

dataABCts <- merge(dataAts,dataBts,dataCts) 

# EDIT: Change labels here 
colnames(dataABCts) <- c("stock1","stock2","stock3") 

stacked <- lapply(colnames(dataABCts),function(i) { 
    data.frame(date=index(dataABCts),values=dataABCts[,i],ind=i) 
}) 
stacked <- do.call(rbind,stacked) 

ggplot(stacked, aes(x=date, y=values)) + geom_area(aes(fill=ind)) 
+0

Отлично !!! Хорошо стоит щедрость. Несколько вопросов: как я могу изменить ярлыки, которые появляются справа? Есть ли способ нарисовать линию с более темной границей цвета в верхней части каждого полигона? Еще раз спасибо! –

+1

Этикетки - это просто имена столбцов объекта dataABCts. Точно так же метки меток и заголовок легенды являются именами столбцов объекта 'stacked'. Я не уверен, что вы подразумеваете под «темной границей цвета», но, возможно, вы ищете что-то вроде: 'ggplot (stacked, aes (x = date, y = values)) + geom_area (aes (fill = ind), цвет = "черный") '? –

+0

также, попробуйте: «расплавить (данные, measure = paste (« значение », c (« A »,« B »,« C »), sep =« »))' – apeescape

1

Я сожалею, что я не очень опытен с объектами временных рядов, но если вы можете получить ваши данные в кадр данных, я могу помочь.

Если у вас есть кадр данных со следующими столбцами:

Date Data Value 

Где Date содержит дату, Data содержит ваши А через этикетку C и Value содержит значение. С этого момента, ggplot2 код будет

library(ggplot2) 
ggplot(df, aes(Date, Value, fill = Data))+ 
    geom_area() 

Я думаю, проходя color = "black" в geom_area() красиво разграничивает области, но это до вашего эстетического вкуса.

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