2012-12-05 109 views
23

鑑於以下數據集:GGPLOT2和堆積條形圖負值

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 

如何完成堆疊條形圖中GGPLOT2包括負值?下面是我使用的基本圖表序列:

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

這會返回一個錯誤:

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

而不是預期的結果,並且 - 所顯示的X軸下方負值 - 他們根本不存在在堆積的條形圖中。有沒有一種方法可以生成包含正面和負面所有值的圖表?

+0

你正在尋找像這樣http://stackoverflow.com/questions/12312189/r-floating-barchart/12312457#12312457 – mnel

+0

更像這樣:http://www.infragistics.com/uploadedImages/Content/Products/ASPNET/Whats_new/PositiveNegativeStackChartWeb .png – sogrady

回答

45

更新:作爲GGPLOT2 2.2.0,堆疊爲負值是自動處理,而無需創建用於正和負值不同的層。

如果我明白你在找什麼,關鍵是要放在單獨的圖層兩個正面和負面的數據,並且還要用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

看起來正是我想要的,謝謝! – sogrady