[英]ggplot2 and a Stacked Bar Chart with Negative Values
Given the following dataset: 给定以下数据集:
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
How do I complete a stacked bar chart in ggplot2 that includes the negative values? 如何在ggplot2中完成包含负值的堆积条形图? Here's the basic chart sequence I'm using:
这是我正在使用的基本图表序列:
ggplot(income_m, aes(x=Year, y=OperatingIncome, fill=Division)) + geom_bar() +
+ scale_fill_brewer(type = "seq", palette = 1)
This returns an error: 这会返回一个错误:
Warning message: Stacking not well defined when ymin != 0
警告消息:当ymin!= 0时堆栈没有很好地定义
And instead of the expected result - negative values being displayed below the X axis - they are simply not present in the stacked bar chart. 而不是预期的结果 - 负值显示在X轴下方 - 它们根本不存在于堆积条形图中。 Is there a way to produce the chart with all values, both positive and negative, accounted for?
有没有办法生成图表,所有的值,正面和负面,占?
Update : As of ggplot2 2.2.0, stacking for negative values is handled automatically, without having to create separate layers for the positive and negative values. 更新 :从ggplot2 2.2.0开始,自动处理负值的堆叠,而不必为正值和负值创建单独的图层。
If I understand what you're looking for, the trick is to put the two positive and negative data in separate layers, and also to use stat = "identity"
: 如果我理解你在寻找什么,诀窍是将两个正面和负面数据放在不同的层中,并使用
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.