注 :广大的段子手朋友们, 下次再用R做词云的时候,记得在wordcloud后面加个2
无论是install.packages(“wordcloud2”)
还是library(wordcloud2)
或者wordcloud2(data)
留下一个无法辩驳的理由,作为一个有情怀的语言,主函数的第一个变量不应该是data.frame么?
最近写了一个wordcloud2的R包。调用一个JS的库( wordcloud2.js )实现wordcloud。 与旧的wordcloud相比,新的wordcloud2 能更有效的利用词与词的间隔来插入数据,更可以根据图片或者文字来绘制定制化的词云。
install.packages("wordcloud2") library(wordcloud) library(wordcloud2) wordcloud(demoFreq$word, demoFreq$freq) wordcloud2(demoFreq)
由于使用了Rstudio出品的 htmlwidgets 框架,knitr和shiny也都支持。以下是wordcloud2包的一个基本介绍。
基本的函数有两个:
wordcloud2
: 提供基本的词云功能 letterCloud
: 使用选定的词绘制词云(就像刚才那个wordcloud2的图片) 为了文章的流畅性,详细的使用参数我就不细说了,可以去看下我留在CRAN的 文档 。下面会给大家介绍三种模式,按需选择。
开启懒人模式之后,玩家可以把准备好的数据框(第一列词名,第二列词频)扔给wordcloud2函数,wordcloud2会自动处理,生成一个动态的页面。就像上面那幅和wordcloud对比的图片一样。
wordcloud2的包里面存了一个词与词频的数据,是从统计之都的订阅抓出来的信息,并做了分词和词频表。数据的名字是 demoFreqC
。
data("demoFreqC") head(demoFreqC)
V2 V1 1 数据 2304 3 统计 1413 4 用户 855 5 模型 846 7 分析 773 8 数据分析 750
使用wordcloud对这个数据进行可视化,颜色使用的是亮色随机,背景是灰色。
# Windows # Sys.setlocale("LC_CTYPE","eng") wordcloud2(demoFreqC, color = "random-light", backgroundColor = "grey")
自定义模式允许用户去设定一个字符,然后根据这个字符,生成一个形状相同的词云,比如下面的两个例子。
htmlwidgets gallery 是一个展示各种引用js做可视化R包的平台。几周前我把wordcloud2传了上去,为了让大家更好的认识我,我把我微博的头像作为展示图传了上去,就像这样:
这个头像也是用本包实现的,使用 lettercloud
完成,letter=”R”选择了字符R的形状,颜色随机亮色,背景黑色,大小选的是0.3。数据是自己编的一个文件,可以在 这里 下载。
dat = read.csv("chiffon.csv",header = T) dat = dat[,2:3] letterCloud(dat,letter = "R", color = "random-light", backgroundColor = "black",size = 0.3)
亚磊 顺手爬了淘宝搜索“男”或者“女”的结果, 用 letterCloud
生成的词云,你以为这是用图片做的形状么?实际上是用了一个showtext包来实现的特殊字符。 有代码有真相 ,大家慢慢读。
说实话,很多时候字母什么的并不能满足段子手的需求,有时候需要根据自己的图片来生成一个定义好形状的词云,wordcloud2里面也是支持的,只需要给wordcloud2传一个图片路径就好了,是不是很容易?
wordcloud2函数支持输入自定义图片来作为词云的背景形状,需要注意的是自己定义图片的时候需要 “黑白” 的来作为词云的形状输入。本文使用了该包自带的一个 小鸟 图片。
figPath = system.file("examples/t.png",package = "wordcloud2") wordcloud2(demoFreq, figPath = figPath, size = 1.5,color = "skyblue")
浩彬老撕 绘制的蜘蛛侠,是不是很帅气?
shape
变量,可以画五角星,心形等形状的词云,后来开发出了基于图片的词云,已经开始嫌弃这个功能了:) Sys.setlocale("LC_CTYPE","eng")
Size