ggplot2 et un graphique à barres empilées avec des valeurs négatives

étant donné l'ensemble de données suivant:

   Division Year OperatingIncome
1  A  2012           11460
2  B  2012            7431
3  C  2012           -8121
4  D  2012           15719
5  E  2012             364
6  A  2011           12211
7  B  2011            6290
8  C  2011           -2657
9  D  2011           14657
10 E  2011            1257
11 A  2010           12895
12 B  2010            5381
13 C  2010           -2408
14 D  2010           11849
15 E  2010             517

Comment remplir un diagramme à barres empilées dans ggplot2 qui inclut les valeurs négatives? Voici la séquence de base que j'utilise:

ggplot(income_m, aes(x=Year, y=OperatingIncome, fill=Division)) + geom_bar() +
+ scale_fill_brewer(type = "seq", palette = 1)

cela renvoie une erreur:

message D'avertissement: empilage mal défini lorsque ymin != 0

et au lieu du résultat attendu - les valeurs négatives sont affichées ci-dessous l'axe des X - ils ne sont tout simplement pas présents dans le diagramme à barres empilées. Y a-t-il un moyen de produire le graphique avec toutes les valeurs, positives et négatives, prises en compte?

23
demandé sur smci 2012-12-06 03:24:31

1 réponses

Update : à partir de ggplot2 2.2.0, le gerbage pour les valeurs négatives est traité automatiquement, sans avoir à créer des couches séparées pour les valeurs positives et négatives.

si je comprends ce que vous cherchez, le truc est de mettre les deux données positives et négatives dans des couches séparées, et aussi d'utiliser stat = "identity" :

dat <- read.table(text = "   Division Year OperatingIncome
1  A  2012           11460
2  B  2012            7431
3  C  2012           -8121
4  D  2012           15719
5  E  2012             364
6  A  2011           12211
7  B  2011            6290
8  C  2011           -2657
9  D  2011           14657
10 E  2011            1257
11 A  2010           12895
12 B  2010            5381
13 C  2010           -2408
14 D  2010           11849
15 E  2010             517",header = TRUE,sep = "",row.names = 1)

dat1 <- subset(dat,OperatingIncome >= 0)
dat2 <- subset(dat,OperatingIncome < 0)
ggplot() + 
    geom_bar(data = dat1, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") +
    geom_bar(data = dat2, aes(x=Year, y=OperatingIncome, fill=Division),stat = "identity") +
    scale_fill_brewer(type = "seq", palette = 1)

enter image description here

45
répondu joran 2016-11-17 17:00:56