ggplot2 和带有负值的堆积条形图
Posted
技术标签:
【中文标题】ggplot2 和带有负值的堆积条形图【英文标题】:ggplot2 and a Stacked Bar Chart with Negative Values 【发布时间】:2012-11-23 22:28:05 【问题描述】:给定以下数据集:
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)
这会返回一个错误:
警告消息:当 ymin != 0 时堆叠定义不明确
而不是预期的结果 - X 轴下方显示负值 - 它们根本不存在于堆积条形图中。有没有办法生成包含所有值(包括正值和负值)的图表?
【问题讨论】:
您是否正在寻找类似的东西***.com/questions/12312189/r-floating-barchart/… 更多这样的:infragistics.com/uploadedImages/Content/Products/ASPNET/… 【参考方案1】:更新:从 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)
【讨论】:
我想要这些方面的东西 - 但我希望我的堆栈是值的总和 - 因此,如果 2010 年 A 中有负值,我想从 A 的总和中减去它们2010 - 那将如何运作?以上是关于ggplot2 和带有负值的堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章
带有 facet_grid 的 ggplot2 中具有多个分类变量的堆积条形图
带有facet_grid的ggplot2中带有多个分类变量的堆积条形图
R语言ggplot2可视化发散型条形图发散条形图(Diverging Bars)是一种可以同时处理负值和正值的条形图并按照大小排序区分数据(Diverging Bars)