2-14 |“特殊”的日子,多学一种表达爱的方式

2020-08-06 11:29:57 浏览数 (1)

全世界所有的语言都有表达爱意的方式,R语言当然也有!

特殊的日子,需要一个特殊的数据集!ggwordcloud内置数据集包含全世界147种爱你的语言,用R送给TA一份远程的爱。

一 道具 氛围

准备好R的环境,和“爱”的数据集

代码语言:javascript复制
#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 看一下世界范围内的不同国家说“爱”的人数
代码语言:javascript复制
#AI的大小由speakers的人数决定
ggplot(love_words, aes(label = word, size = speakers))  
  geom_text_wordcloud()  
  scale_size_area(max_size = 40)

三 ”钻石“和”心“

1 )将爱变成钻石的形状
代码语言:javascript复制
#钻石形状
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 )自定义爱心的形状

设置字形的角度

代码语言:javascript复制
love_words <-love_words %>%
mutate(angle = 45 *sample(-2:2, n(), replace = TRUE, prob = c(1, 1, 4, 1, 1)))
代码语言:javascript复制
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 ,变成“密码”

代码语言:javascript复制
#更改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中的对话词频,标记出谁说的,然后分页展示

代码语言:javascript复制
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

好了,自由发挥去吧!

0 人点赞