web-dev-qa-db-ja.com

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)

これはエラーを返します:

警告メッセージ:ymin!= 0の場合、スタックが適切に定義されていません

そして、期待される結果の代わりに-負の値がX軸の下に表示されます-それらは単に積み上げ棒グラフに存在しません。正と負の両方のすべての値を考慮してチャートを作成する方法はありますか?

24
sogrady

pdateggplot2 2.2.0以降、負の値のスタックは自動的に処理されるため、正の値と負の値に別々のレイヤーを作成する必要はありません。

あなたが探しているものを理解している場合、秘訣は2つのポジティブデータとネガティブデータを別々のレイヤーに配置し、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

46
joran