本文首发于“生信补给站”公众号 https://mp.weixin.qq.com/s/U8yzX-BYQ6wdZObkBz8ecw
全世界所有的语言都有表达爱意的方式,R语言当然也有!
特殊的日子,需要一个特殊的数据集!ggwordcloud内置数据集包含全世界147种爱你的语言,用R送给TA一份远程的爱。
一 道具 氛围
准备好R的环境,和“爱”的数据集
#install.packages("ggwordcloud") library(ggwordcloud) data("love_words") head(love_words) # A tibble: 6 x 4 lang word native_speakers speakers <chr> <chr> <dbl> <dbl> 1 zh 愛 1200 1200 2 en Love 400 800 3 es Amor 480 555 4 ar حب 245 515 5 hi प्यार 322 442 6 fr Amour 76.8 351.
嗯,我也只能看懂2种,但知道都是表达爱的就可以了!
二 初始“印象”
geom_text_wordcloud 看一下世界范围内的不同国家说“爱”的人数
#AI的大小由speakers的人数决定 ggplot(love_words, aes(label = word, size = speakers)) + geom_text_wordcloud() + scale_size_area(max_size = 40)
三 ”钻石“和”心“
1 )将爱变成钻石的形状
#钻石形状 love_words <- love_words %>% mutate(angle = 90 * sample(c(0, 1), n(), replace = TRUE, prob = c(60, 40))) ggplot(love_words, aes(label = word, size = speakers)) + geom_text_wordcloud_area(shape = "diamond") + scale_size_area(max_size = 40)
2 )自定义爱心的形状
设置字形的角度
love_words <-love_words %>% mutate(angle = 45 *sample(-2:2, n(), replace = TRUE, prob = c(1, 1, 4, 1, 1)))
ggplot(love_words,aes(label = word, size = speakers, color = speakers, angle = angle)) + geom_text_wordcloud_area( mask = png::readPNG(system.file("extdata/hearth.png", package = "ggwordcloud", mustWork = TRUE )), rm_outside = TRUE ) + scale_size_area(max_size = 40) + scale_color_gradient(low = "darkred", high = "red")
四 ”密码“VS”对话“
既然是ggplot2的扩展包,那么就可以做很多事情。
1)“密码”
更改label ,变成“密码”
#更改label ,变成“密码” set.seed(42) ggplot(love_words_small, aes(label = word, size = speakers, label_content = sprintf("%s<span style='font-size:7.5pt'>(%g)</span>", word, speakers))) + geom_text_wordcloud_area() + scale_size_area(max_size = 40) + theme_minimal()
注:此为官网图,尝试很多没实现官网中label_content
的功能,本来想着新增一列,把想说的话随机打乱加在新列中,然后label_content
展示这些“密码”。
2)“对话”
统计微信或者QQ中的对话词频,标记出谁说的,然后分页展示
library(dplyr) library(tidyr) #随机生成 love_words$MW <- sample(c("M","W"),size=147,replace=T) ggplot(love_words,aes(label = word, size = speakers, color = speakers)) + geom_text_wordcloud_area( mask = png::readPNG(system.file("extdata/hearth.png", package = "ggwordcloud", mustWork = TRUE )), rm_outside = TRUE ) + scale_size_area(max_size = 40) + scale_color_gradient(low = "darkred", high = "red")+ facet_wrap(~MW) + theme_minimal()
参考资料:
https://lepennec.github.io/ggwordcloud/articles/ggwordcloud.html
好了,自由发挥去吧!