2012-12-05 21 views
23

Angesichts das folgende Daten-Set:ggplot2 und ein gestapeltes Balkendiagramm mit negativen Werten

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 

Wie fülle ich ein gestapeltes Balkendiagramm in ggplot2, die die negativen Werte enthalten? Hier ist die grundlegende Grafik-Sequenz Ich verwende:

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

Dies gibt einen Fehler zurück:

Warning message: Stacking not well defined when ymin != 0

Und statt des erwarteten Ergebnisses - negative Werte unterhalb der X-Achse angezeigt werden - sie sind einfach nicht vorhanden im gestapelten Balkendiagramm. Gibt es eine Möglichkeit, das Diagramm mit allen positiven und negativen Werten zu erstellen?

+0

Sie sind auf der Suche nach etwas wie das http://stackoverflow.com/questions/12312189/r-floating-barchart/12312457#12312457 – mnel

+0

mehr wie folgt: http://www.infragistics.com/uploadedImages/Content/Products/ASPNET/Whats_new/PositiveNegativeStackChartWeb .png – sogrady

Antwort

45

aktualisieren: Ab ggplot2 2.2.0, für negative Werte Stapelung erfolgt automatisch, ohne separate Schichten für die positiven und negative Werte erstellen zu müssen.

Wenn ich verstehe, was Sie suchen, ist der Trick, die beiden positiven und negativen Daten in getrennten Schichten zu setzen, und auch stat = "identity" zu verwenden:

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

+0

Sieht aus wie genau ich will, danke! – sogrady

Verwandte Themen