R и диаграммы областей с накоплением? - PullRequest
2 голосов
/ 03 августа 2010

Привет,

У меня есть три переменные 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 еще не накоплены, так что это не просто вывод их трех в правильном порядке (если только вы не можете придумать способ их суммировать на летать).

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

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

Ответы [ 2 ]

3 голосов
/ 12 августа 2010

Как насчет этого?

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))
1 голос
/ 03 августа 2010

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

Предполагая, что у вас есть фрейм данных со следующими столбцами:

Date    Data    Value

Где Date содержит дату, Data содержит ваши метки от A до C, а Value содержит значение.С этого момента код ggplot2 будет выглядеть следующим образом:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...