見出し画像

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()

これで意図したように並び替えられた棒グラフが表示されます。

割合の高い順に並べた棒グラフ


この記事が気に入ったらサポートをしてみませんか?