2015年5月3日日曜日

ggplotで積み上げ棒グラフ その1 積み上げの順序

死亡フラグが立っていたこのブログのことを思い出して、久しぶりの投稿。

今更ながら、ggplot2を使って積み上げグラフを描いてみました。


sales.ldf <- melt(sales.tbl, value.name = "売上") #長いデータフレームに変換
qplot(data = sales.ldf, x = 年, y = 売上, fill = 商品,
      geom = "bar", stat = "identity", position = "stack") +
  guides(fill = guide_legend(reverse = TRUE)) #判例の順番を逆転

商品A商品B商品X商品Y
2011101001030
201220403040
20131003040
20145002020
これは、我らリーマンがよく描くタイプのグラフです。でも、私、故あって商品をA,X,B,Yの順番に積み上げたいのです。x軸の順番を並べ替える時は、factorの水準を変えればよかったので、積み上げ順を変更するのにも、水準を変えれば良いだろう思いました。


sales.ldf$商品 <- factor(sales.ldf$商品, levels = c("商品A","商品X","商品B","商品Y"))

として、qplot(...)を実行すると、

ありゃりゃ?凡例の順番は変わっているのに、積み上げ順は元のままではないですか。商品の水準の順番と思い込んでいたので、ハマることしばし。
ということで、なんのあてもなく長いデータフレームを商品順に並べてみました。

sales.ldf <- arrange(sales.ldf, 売上) #dplyrパッケージを使って

と長いデータフレームを売り上げ順に並び替えてみて描いてみると、意図していた積み上げ順になりました。

商品 売上
1 2011商品A20
2 2012商品A20
3 2013商品A10
4 2014商品A50
5 2011商品X10
6 2012商品X30
7 2013商品X30
: :::
積み上げ順序は、水準なんかではなくて、長いデータフレームの中の並び順なのでした。より正確には、x軸の一番右の項目(この場合は2011)に関しての並び順のようでした。
というわけで、1番目の項目のところだけ並び替えれば任意の順番に積み上げられるわけですね。2番目以降順番は無視。

商品売上
42011商品Y30
32011商品X10
12011商品A20
22011商品B100
52012商品A20
62012商品B40
72012商品X30
::::
知りませんでした。私だけ?

0 件のコメント:

コメントを投稿