2012-12-05 11 views
23

otrzymuje następujący zestaw danych:ggplot2 i wykres skumulowany słupkowy z ujemnymi wartościami

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 

Jak mam wypełnić skumulowany wykres słupkowy w ggplot2 który obejmuje wartości ujemne? Oto podstawowa sekwencja wykres Używam:

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

ta zwraca błąd:

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

i zamiast oczekiwanego rezultatu - wartości ujemne są wyświetlane poniżej osi X - oni po prostu nie są obecne w skumulowanym wykresie słupkowym. Czy istnieje sposób na sporządzenie wykresu z uwzględnieniem wszystkich wartości, zarówno dodatnich, jak i ujemnych?

+0

Szukasz coś podobnego do tego http://stackoverflow.com/questions/12312189/r-floating-barchart/12312457#12312457 – mnel

+0

więcej podobnych: http://www.infragistics.com/uploadedImages/Content/Products/ASPNET/Whats_new/PositiveNegativeStackChartWeb .png – sogrady

Odpowiedz

45

Aktualizacja: Od ggplot2 2.2.0, układanie pod względem ujemnych wartości odbywa się automatycznie, bez konieczności tworzenia osobnych warstw dodatnich i ujemnych wartości.

Jeśli dobrze rozumiem, co szukasz, sztuką jest umieścić dwa pozytywne i negatywne dane w oddzielnych warstwach, a także do korzystania 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

+0

Wygląda dokładnie tak, jak chcę, dzięki! – sogrady

Powiązane problemy