29

次のデータセットがあるとします。

   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軸の下に負の値が表示される)の代わりに、それらは積み上げ棒グラフに単に存在しません。正と負の両方のすべての値を考慮してグラフを作成する方法はありますか?

4

1 に答える 1

51

更新ggplot2 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)

ここに画像の説明を入力してください

于 2012-12-05T23:32:47.367 に答える