見出し画像

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

最後に、タイトルとテーマを修正(日本語フォント)して表示させます。

pie chart
パイチャートの例

*実際には、今回のデータは分類が多すぎて、パイチャート向きではありません。こんな使い方もできるという例だと考えてください。本来は、使用数の低いものは、その他としてまとめるなどします。

ブキがアップデートでどんどん追加されて80種類にもなっています。相変わらず、シャープマーカー系、スプラシューター系が人気のようでした。今シーズンは、だいぶ性能の修正があったので、使用率が変わってきているはずです。シーズン終了後に比較してみたいと思います。



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