2012-12-05 16 views
23

ile Yığın Çubuk Grafik:ggplot2 ve aşağıdaki veri kümesi Verilen Negatif Değerler

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 

nasıl negatif değerler içeren ggplot2 bir yığın çubuk grafiği tamamlayabilirim? negatif değerler X ekseninde altında görüntülenen - - basitçe mevcut değildir

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

Ve yerine beklenen sonucun: Bu hata verir

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

: İşte kullanıyorum temel grafik dizisi var yığılmış çubuk grafikte. Grafiği, hem olumlu hem de olumsuz, tüm değerlerle birlikte oluşturmanın bir yolu var mı?

+0

Eğer arıyorsunuz: Ben aradığınız anlıyorsa

, hile ayrı katmanlar halinde iki pozitif ve negatif veri koymak ve ayrıca stat = "identity" kullanmaktır Bunun gibi bir şey http://stackoverflow.com/questions/12312189/r-floating-barchart/12312457#12312457 – mnel

+0

daha fazlası: http://www.infragistics.com/uploadedImages/Content/Products/ASPNET/Whats_new/PositiveNegativeStackChartWeb .png – sogrady

cevap

45

Güncelleme: ggplot2 2.2.0 itibarıyla negatif değerleri için istifleme pozitif ve negatif değerleri için ayrı katmanlar oluşturmak zorunda kalmadan, otomatik olarak yapılır.

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

Tam olarak ne istediğime benziyor, teşekkürler! – sogrady