ggplot2: 棒グラフを値の高い順に並べる
前回の続きです。作成した棒グラフを値の高い順に並べる方法を紹介します。
棒グラフに使用したデータは、下記のようなテーブルです。テーブル上では、割合(percentage)の多い順に並んでいるのに、棒グラフがこの通りに並んでくれないのは、x 軸として使用している weapon の順(アルファベット順)に並ぶからです。
> top10
# A tibble: 10 × 4
weapon total percentage buki
<chr> <dbl> <dbl> <chr>
1 sharp 35209 7.68 シャープマーカー
2 wakaba 30992 6.76 わかばシューター
3 lact450 25510 5.56 LACT-450
4 sshooter 21767 4.75 スプラシューター
5 promodeler_mg 20882 4.55 プロモデラーMG
6 52gal 20309 4.43 .52ガロン
7 bold 17598 3.84 ボールドマーカー
8 furo 16551 3.61 オーバーフロッシャー
9 nzap85 16230 3.54 N-ZAP85
10 variableroller 15452 3.37 ヴァリアブルローラー
fct_reorder を利用して並び替え
テーブル中の weapon の下に表記された <chr> は、weapon の型が character = 文字であることを意味しています。そのため、その順序がアルファベットになるのです。型をファクター = factor に変換するとで、この weapon に順序を持たせることができるようになります。fct_reorder() を使うと、この変換が可能です。
plot_data <- top10 %>%
mutate("weapon" = fct_reorder(weapon, desc(percentage)))
top10 テーブルの weapon 列を fct_reoder で変換し、その順位に percentage を指定しています。高い順に並べたいので、 desc() で逆順にしています。テーブルは、下記のようになります。
> plot_data
# A tibble: 10 × 4
weapon total percentage buki
<fct> <dbl> <dbl> <chr>
1 sharp 35209 7.68 シャープマーカー
2 wakaba 30992 6.76 わかばシューター
3 lact450 25510 5.56 LACT-450
4 sshooter 21767 4.75 スプラシューター
5 promodeler_mg 20882 4.55 プロモデラーMG
6 52gal 20309 4.43 .52ガロン
7 bold 17598 3.84 ボールドマーカー
8 furo 16551 3.61 オーバーフロッシャー
9 nzap85 16230 3.54 N-ZAP85
10 variableroller 15452 3.37 ヴァリアブルローラー
一見すると変わらないように見えますが、 weapon の下に表示された型が <chr> から <fct> と、ファクターを意味するものに変わっています。これで、棒グラフを割合の順序に並べる準備ができました。あとは、ggplot() + geom_col() を実行するだけです。
ggplot(plot_data, aes(weapon, percentage)) + geom_col()
これで意図したように並び替えられた棒グラフが表示されます。
この記事が気に入ったらサポートをしてみませんか?