
ggplot2 を使ったパイチャートの作成
ggplot2 を使ってパイチャートを作成する方法について紹介します。データは、以前使用したスプラトゥーン3の対戦結果のデータです。今シーズン (Sizzle) もそろそろ終わりですが、用いるデータは、前シーズン (Fresh) のものです。stat.ink のデータを使用しています。
パイチャートに用いるデータの形式
パイチャートを書くためのデータは、ボックスプロットなどと同様に、2列のデータです。サンプルが横に並んでいる場合は、gather() でまとめる必要があります。例では、80種類のブキ (weapon) と、その使用数 (total) なので、80行 x 2列のデータとなります。
> weapon_data
# A tibble: 80 × 2
weapon total
<chr> <dbl>
1 52gal 83784
2 96gal 4370
3 96gal_deco 62390
4 bamboo14mk1 8774
5 barrelspinner 63400
6 bold 59404
7 bold_neo 24109
8 bottlegeyser 19627
9 bucketslosher 21360
10 bucketslosher_deco 6232
# … with 70 more rows
# ℹ Use `print(n = ...)` to see more rows
*使用数のところは、事前にパーセンテージを算出しておく必要はありません。
プロット用データの準備
このままのデータでも、パイチャートの作成は可能ですが、ブキの名前を日本語化したいので、それぞれのブキの日本語名を inner_join() で結合させます。さらに、パイチャートにしたときに、使用数の多いもの (total の順) から並べたいので、 fct_reorder() 関数を利用して、順序のあるファクターに変換しておきます。
pie_data <- weapon_data %>% arrange(desc(total)) %>%
inner_join(weapon_list) %>%
mutate(buki = fct_reorder(buki, total, .desc = TRUE))
下記のようなデータになります。3列になってますが、実際に使用するのは、「buki」と「total」の2列です。
> pie_data
# A tibble: 80 × 3
weapon total buki
<chr> <dbl> <fct>
1 sshooter_collabo 180012 スプラシューターコラボ
2 sharp_neo 150543 シャープマーカーネオ
3 liter4k 109944 リッター4K
4 wakaba 98446 わかばシューター
5 momiji 98345 もみじシューター
6 screwslosher 94591 スクリュースロッシャー
7 sharp 94411 シャープマーカー
8 promodeler_rg 88487 プロモデラーRG
9 52gal 83784 .52ガロン
10 sshooter 77603 スプラシューター
# … with 70 more rows
# ℹ Use `print(n = ...)` to see more rows
geom_bar() + coord_polar() でパイチャートと作成
ボックスプロットは geom_boxplot()、ドットプロットであれば、geom_dotplot() のように専用の関数が用意されていましたが、パイチャートにはありません。
パイチャートには、棒グラフ用の関数である 「geom_bar()」 を用います。そして、これを 「coord_poloar() 」関数で円形にレイアウトすることでパイチャートを作成できます。
まず、 ggplot(pie_data, aes()) で使用するデータセットと、その中の列を指定します。(ここでは、 total 列と buki 列を指定。)さらに、「+」で続けて、geom_bar() と coord_polor() を使います。
pie <- ggplot(pie_data, aes(x = "", y = total, fill = buki)) +
geom_bar(stat = "identity", size = 0.2, width = 1, color = "white") +
coord_polar("y", start = 0, direction = -1)
geom_bar() の引数には、度数のタイプと、枠の幅や色を指定しています。coord_polor() の引数には、真上から始めるので start = 0 を指定、時計回りにしたいので direction = -1 としています。
pie + labs(title = "Fresh Season 2023") +
theme_void() + theme(text = element_text(family = "HiraKakuProN-W3"))
最後に、タイトルとテーマを修正(日本語フォント)して表示させます。

*実際には、今回のデータは分類が多すぎて、パイチャート向きではありません。こんな使い方もできるという例だと考えてください。本来は、使用数の低いものは、その他としてまとめるなどします。
ブキがアップデートでどんどん追加されて80種類にもなっています。相変わらず、シャープマーカー系、スプラシューター系が人気のようでした。今シーズンは、だいぶ性能の修正があったので、使用率が変わってきているはずです。シーズン終了後に比較してみたいと思います。