はじめに
アイドルグループの嵐が2021年から活動を休止します。
嵐に、wordcloudを用いて愛と感謝を込めてみました。
マスクシェイプ画像ファイルを使用して希望する形にwordcloudを表示したい場合は、パッケージwordcloud2を使用しますが、今回はwordcloud2の代わりに、ggwordcloudを使用しています。
ggwordcloudはグラフィック関数ggplot2を使ってwordcloud2と同様のアルゴリズムで表示することができます。wordcloud2はRmarkdownでは複数の結果を表示するのは難しいのですが、ggwordcloudは複数の結果を簡単に表示することができます。
開発環境
OS: Windows10
R4.02
#パッケージ"ggwordcloud"とデータセットの読み込み
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] (S3: tbl_df/tbl/data.frame)
$ 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] (S3: tbl_df/tbl/data.frame)
$ 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"をクラウド表示
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に代えています。
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’