je les données suivantes:Modifier l'ordre d'empilement dans la zone empilée ggplot graphique
df <- as.data.frame(c(rep(1,3),rep(2,3),rep(3,3)))
names(df) <- "cont_var"
df$factor_var <- as.factor(rep(c("fac1","fac2","fac3"),3))
df$prop <- c(10,20,70,20,30,50,25,40,35)
Les niveaux de « factor_var » être:
> levels(df$factor_var)
[1] "fac1" "fac2" "fac3"
Je fais une parcelle de zone empilés en utilisant les éléments suivants:
library(ggplot)
ggplot(df, aes(x=cont_var, y=prop, fill=factor_var)) +
geom_area(colour="black",size=.2, alpha=.8) +
scale_fill_manual(values=c("blue", "grey", "red"))
qui renvoie le résultat suivant:
La légende montre "factor_var" ordonné selon les niveaux vus auparavant mais les zones ne sont pas empilées dans le même ordre. Comment puis-je produire une sortie avec du rouge en bas puis du gris puis du bleu empilé en haut comme c'est le cas dans la légende?
(. NB Ceci est l'ordre que j'ai besoin (factor_var étant une variable ordonnée), il est non seulement un cas d'alignement l'empilement à l'ordre de légende pour des raisons esthétiques.)
EDIT: Résultat souhaité indiqué ci-dessous
SOLUTION !!
réordonner les dataframe est nécessaire de créer le résultat souhaité:
newdata <- df[order(df$cont_var, df$factor_var),]
Un grand merci pour votre aide.
Cela fonctionne pour l'exemple ci-dessus. Cependant mes données réelles sont un peu plus compliquées - il y a 9 niveaux qui sont dans le bon ordre dans la légende mais qui sont en fait tracés dans l'ordre (de bas en haut): niveau 5, 4, 3, 2, 1, 6 , 7, 8, 9. Je suis désolé je ne peux pas le reproduire exactement ici, mes données sont sensibles. – user2568648
@ user2568648 voir la mise à jour – Jaap
Avec la mise à jour et 'levels (dat $ factor_var)', les niveaux sont dans l'ordre que je voudrais pour l'empilement, mais le niveau 5 est toujours tracé en bas! – user2568648