前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >词云图,看过没做过?快来,教你秘籍

词云图,看过没做过?快来,教你秘籍

作者头像
用户6317549
发布2020-06-16 09:53:45
9830
发布2020-06-16 09:53:45
举报
文章被收录于专栏:科研猫
很多时候我们会遇到这样的一个问题,一堆数据中有很多个物品或者种类,我们需要对其进行频数的统计。比如说在一组肿瘤患者当中,I期和II期肿瘤占了多少?III期肿瘤占了多少IV肿瘤占了多少?如果,我们要对这些病人进行频数统计,这个很简单就可以实现,SPSS可以做,R里面的table函数也可以做,我们不讨论统计的问题。

今天我们来说一说可视化的问题,如果这个时候我们要对频数进行可视化的话,我们首先想到的应该是一个什么样子的图形呢?很多人可能会说是柱状图。还有一些科研喵们,看过我们的教程的,可能会想到棒棒糖图(Lollipop)或者说滑珠图(Dot plot)。当然这些图都是适合的,但是这些图形都存在一个严重的问题,那就是他们只适合于分类较少时的绘图。

当分类的种类比较少时,我们可以选择上面刚刚讲过的柱状图或者是滑珠图。但是当分类的种类非常多,比如说成百上千时,我们就没有很好的方法来对它进行展示了。这个时候就可以引入一种新的图形:词云图(word cloud)

所谓词云图(word cloud),顾名思义,就是把词汇拼接成在一起像云朵一样。如下图所示:

在这个图形中,由很多个词汇或者分类名称构成,它们大小不同,因为这些词语的大小都对应了它们各自的频数,频数越高的,size越大。这样的图形,我们在网页中经常遇到,不过在科研绘图中应用较少,我猜想了几个原因:一个可能是因为很多人不知道可以用这样的图形,一个可能是因为词云图的绘制比较难,很多绘图软件不提供词云图。其实,在很多场合都是可以用到词云图的,甚至用词云图更为合适。举个例子来说,我们在罗列检测到的热点突变时,经常用table表格来表示,因为突变往往有很多,用常规图形是无法绘制完整的。这个时候,不妨尝试使用词云图。下面我们就来讲解词云图的绘制,先来看看数据。

测试数据

这个数据长什么样子呢?首先数据分为两列,非常简单,第1列就是我们的文字或者是词语,或者是某些分类的名称。第2列就是我们统计的频数,也就是count。借用今时今日,在大洋彼岸正在发生的大事为例,我们准备了如下的数据(仔细看)。

好了,下面开始绘图。拿到这个数据以后呢,就可以直接用R包wordcloud2进行绘图了。

初级绘图

首先是非常简单的初级绘图。直接用wordcloud2()这个函数,输入我们的词语和频数的数据框就可以绘图了。

代码语言:javascript
复制
# Read in data
data = read.table("words.txt",header = T,sep="\t")
head(data)

# Gives a proposed palette
wordcloud2(data, size=0.5, color='random-light')

高级调整

如果你觉得这个颜色不够漂亮,在这里我们可以自定义color,比如我们选择默认的random-dark颜色值,就可以得到比较深的颜色。

代码语言:javascript
复制
# or a vector of colors. vector must be same length than input data
wordcloud2(data, size=0.5, color='random-dark' )

在这里,我们自己从配色面板中挑选了一个合适的颜色,绘制出来是这样的,有没有很惊艳呢?

代码语言:javascript
复制
# Use colors from wesanderson package
pacman::p_load("wesanderson")
names(wes_palettes)
wordcloud2(data, size=0.5, color=rep(wes_palette("Darjeeling1", 5), nrow(data)) )

当然,我们也可以使用backgroundColor来调整背景色,比如黑色,有种街头炫酷风:

代码语言:javascript
复制
# Change the background color
wordcloud2(demoFreqC, size=1.5, color='random-light', backgroundColor="black")

终极优化

刚才我们绘制的图形都是圆形的,这也是绘图函数默认的外形。当然,我们可以调整这个图形的外观,用shape参数,根据使用说明shape可以等于'circle' (圆形,默认), 'cardioid' (心形), 'diamond' (菱形), 'triangle-forward', 'triangle'(三角形), 'pentagon'(五角星)和'star'(星形)。现在我们尝试使用星形,绘制出来的图形如下:

代码语言:javascript
复制
# Change the shape 
wordcloud2(data, size=0.6, color='random-dark', shape = "star")

另外,我们这里看到的文字的方向都是随机倾斜的,为了让字体的排列更加整齐,我们可以自定义文字的旋转方向,比如都是水平的,或者都是垂直的,通过minRotation和maxRotation函数就可以实现。

代码语言:javascript
复制
# Rotation
wordcloud2(data, size = 0.5, shape="triangle", 
           minRotation = pi/0.5, maxRotation = pi/0.5, rotateRatio = 1,
           color = rep(wes_palette("BottleRocket2", 5), nrow(data)))

好了,关于本期的词云图,我们就讲到这里,想要获得测试数据和绘图代码的同学,可以在文末联系客服领取。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科研猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云图数据可视化
腾讯云图数据可视化(Tencent Cloud Visualization) 是一站式数据可视化展示平台,旨在帮助用户快速通过可视化图表展示大量数据,低门槛快速打造出专业大屏数据展示。精心预设多种行业模板,极致展示数据魅力。采用拖拽式自由布局,全图形化编辑,快速可视化制作。腾讯云图数据可视化支持多种数据来源配置,支持数据实时同步更新,同时基于 Web 页面渲染,可灵活投屏多种屏幕终端。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档