ggwordcloudを使って、愛と感謝のワードを嵐のロゴにビジュアル化する


はじめに

アイドルグループの嵐が2021年から活動を休止します。
嵐に、wordcloudを用いて愛と感謝を込めてみました。
マスクシェイプ画像ファイルを使用して希望する形にwordcloudを表示したい場合は、パッケージwordcloud2を使用しますが、今回はwordcloud2の代わりに、ggwordcloudを使用しています。
ggwordcloudはグラフィック関数ggplot2を使ってwordcloud2と同様のアルゴリズムで表示することができます。wordcloud2はRmarkdownでは複数の結果を表示するのは難しいのですが、ggwordcloudは複数の結果を簡単に表示することができます。

開発環境

OS: Windows10
R4.02

パッケージ"ggwordcloud"とデータセットの読み込み

package
library(ggwordcloud)
data("love_words")
data("thankyou_words")
print(str(love_words))
print(str(thankyou_words))

ggwordcloudについては下記のサイトをご覧ください。
ggwordcloud: a word cloud geom for ggplot2
Package ‘ggwordcloud’
2つのデータセット"love_words"と"thankyou_words"が付属しています。2つのデータセットのデータ構成について関数str()で表示した結果です。
"love_words" 

tibble 147 x 4
$ lang : chr [1:147] "zh" "en" "es" "ar" ...
$ word : chr [1:147] "愛" "Love" "Amor" "" ...
$ native_speakers: num [1:147] 1200 400 480 245 322 76.8 260 77 220 154 ...
$ speakers : num [1:147] 1200 800 555 515 442 ...

"thankyou_words"

tibble 133 x 5
$ iso_639_3 : chr [1:133] "zho" "eng" "spa" "ara" ...
$ word : chr [1:133] "謝謝" "Thank you" "Gracias" "" ...
$ name : chr [1:133] "Chinese" "English" "Spanish" "Arabic" ...
$ native_speakers: num [1:133] 1200 400 480 245 322 76.8 260 77 220 154 ...
$ speakers : num [1:133] 1200 800 555 515 442 ...

ggwordcloudでデータセット"love_words"をクラウド表示

ggwordcloud_love_words
set.seed(42)
ggplot(
  love_words,
  aes(
    label = word, size = speakers,
    color = speakers
  )
) +
  geom_text_wordcloud_area(aes(angle = 45 * sample(-2:2, nrow(love_words),
    replace = TRUE,
    prob = c(1, 1, 4, 1, 1)
  )),
  mask = png::readPNG(system.file("extdata/arashi2.png",
    package = "ggwordcloud", mustWork = TRUE
  )),
  rm_outside = TRUE
  ) +
  scale_size_area(max_size = 40) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")

mask = png::readPNG(system.file("extdata/arashi2.png",
とありますが、マスクに使う画像ファイルはRのlibraryフォルダの下記のパスに保存しておきます。
library\ggwordcloud\extdata

データセット"thankyou_words"についても同様のスクリプトです。

通しのスクリプト

マスクの画像はデフォルトで保存されている、hearth.pngに代えています。

ggwordcloud
library(ggwordcloud)
data("love_words")
data("thankyou_words")
print(str(love_words))
print(str(thankyou_words))

set.seed(42)
ggplot(
  love_words,
  aes(
    label = word, size = speakers,
    color = speakers
  )
) +
  geom_text_wordcloud_area(aes(angle = 45 * sample(-2:2, nrow(love_words),
    replace = TRUE,
    prob = c(1, 1, 4, 1, 1)
  )),
  mask = png::readPNG(system.file("extdata/hearth.png",
    package = "ggwordcloud", mustWork = TRUE
  )),
  rm_outside = TRUE
  ) +
  scale_size_area(max_size = 40) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")

ggplot(
  thankyou_words,
  aes(
    label = word, size = speakers,
    color = speakers
  )
) +
  geom_text_wordcloud_area(aes(angle = 45 * sample(-2:2, nrow(thankyou_words),
    replace = TRUE,
    prob = c(1, 1, 4, 1, 1)
  )),
  mask = png::readPNG(system.file("extdata/hearth.png",
    package = "ggwordcloud", mustWork = TRUE
  )),
  rm_outside = TRUE
  ) +
  scale_size_area(max_size = 40) +
  theme_minimal() +
  scale_color_gradient(low = "darkred", high = "red")

こちらにも実行結果をアップしてあります。
https://www.yanwari-data.com/entry/2021/01/02/155958

参考:
ggwordcloud: a word cloud geom for ggplot2
Package ‘ggwordcloud’