2010-08-03 5 views
2

Salutations,R et graphiques empilés?

J'ai trois variables TS ressemblant à quelque chose comme ce qui suit:

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

J'ai besoin de tirer dataAts, dataBts et dataCts sous forme de diagramme de zones empilées dans R. J'ai essayé d'utiliser PLOTRIX , mais je ne suis pas assez compétent pour obtenir la matrice dans la bonne forme.

Veuillez noter que dataAts, dataBts et dataCts ne sont pas déjà accumulés, il ne suffit donc pas de les tracer dans le bon ordre (sauf si vous pouvez trouver un moyen de les résumer sur le -mouche).

Quelqu'un peut-il m'aider s'il vous plaît?

Merci à l'avance ...

Répondre

3

Que diriez-vous de quelque chose comme ceci?

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

Excellent !!! Cela vaut bien la prime. Juste quelques questions: comment puis-je changer les étiquettes qui apparaissent dans le droit? Est-il possible de tracer une ligne avec une bordure de couleur plus foncée dans le haut de chaque polygone? Encore une fois, merci !! –

+1

Les étiquettes sont simplement les noms des colonnes de l'objet 'dataABCts'. De même, les étiquettes d'axe et l'en-tête de légende sont les noms de colonnes de l'objet 'stacked'. Je ne suis pas sûr de ce que vous entendez par "une bordure de couleur plus sombre", mais peut-être que vous cherchez quelque chose comme: 'ggplot (empilé, aes (x = date, y = valeurs)) + geom_area (aes (fill = ind), couleur = "noir") '? –

+0

aussi, essayez: 'fondre (données, mesurer = coller (" valeur ", c (" A "," B "," C "), sep =" "))' – apeescape

1

Je suis désolé, je ne suis pas très compétent avec des objets de la série, mais si vous pouvez obtenir vos données dans une trame de données, je peux aider.

En supposant que vous avez une trame de données avec les colonnes suivantes:

Date Data Value 

Date contient la date, Data contient votre A travers les étiquettes C et Value contient la valeur. A partir de ce moment-là, le code ggplot2 serait

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

Je pense passer color = "black"-geom_area() bien les zones délimite, mais c'est à votre goût esthétique.

Questions connexes