2012-12-05 108 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