ggplot2和带有负值的堆积条形图

sog*_*ady 23 r ggplot2 geom-bar

给定以下数据集:

   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
Run Code Online (Sandbox Code Playgroud)

如何在ggplot2中完成包含负值的堆积条形图?这是我正在使用的基本图表序列:

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

这会返回一个错误:

警告消息:当ymin!= 0时,堆栈没有很好地定义

而不是预期的结果 - 负值显示在X轴下方 - 它们根本不存在于堆积条形图中.有没有办法生成图表,所有的值,正面和负面,占?

jor*_*ran 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我想要一些类似的东西——但我希望我的堆栈是一个值的总和——因此,如果 2010 年 A 中有负值,我想从 2010 年 A 的总和中减去它们——这将如何工作? (2认同)