R可视乎|气泡图

气泡图

气泡图是一种多变量图表,是散点图的变体,也可以认为是散点图和百分比区域图的组合[1]。气泡图最基本的用法是使用三个值来确定每个数据序列,和散点图一样。气泡图通过气泡的位置及面积大小,可分析数据之间的相关性。

本文可以看作是《R语言数据可视化之美》[1]的学习笔记。前两部分可见(跳转):

  1. 趋势显示的二维散点图
  2. 分布显示的二维散点图

该书对气泡图的绘制并不是非常详细,小编将内容进行了大量拓展。下面的例子将一步步带你完成气泡图的绘制。本文内容丰富,希望大家都能学到自己想要的内容。

本文框架

数据介绍

数据集来源gapminder包中,包含了1704行和6个变量。其中6个变量含义分别为:

  • country 国家142个水平
  • continent 大陆5个水平
  • year 1952年-2007年(间隔为5年)
  • lifeExp 出生预期寿命,以年计数
  • pop 人口数
  • gdpPercap 人均国内生产总值(扣除通货膨胀因素后的美元)

由于数据过多,我们感兴趣的是年份为2007年的数据,所以使用dplyr包进行数据处理,具体数据处理案例可见我写的另一篇推送:[R数据科学]tidyverse数据清洗案例详解。数据缩略版如下:

手把手绘制

geom_point()函数构建

气泡图是添加了第三维度的散点图:附加数值变量的值通过点的大小表示。(来源:data-to-viz[2])。使用ggplot2,可以通过geom_point()函数构建气泡图。aes()设定至少三个变量:x、y和size。其实就是散点图绘制的升级版吧,aes()中多了一个参数。

ggplot(data, aes(x=gdpPercap, y=lifeExp, size = pop)) +
    geom_point(alpha=0.7)

上图展示了世界各国的预期寿命(y)与人均国内生产总值(x)之间的关系。每个国家的人口用圆的大小表示。但是这个图不是非常美观,而且圆的大小并不是很直观,大家都差不多大。接下来对圆的大小进行设定。

scale_size()控制圆的大小

scale_size()允许使用range参数设置最小和最大的圆的大小,用name改变图例名称(scale_size(range = c(0.1, 24), name="Population (M)"))。

  • 图中可以看到,有些圆圈重叠了。k可将点的透明度进行调整(geom_point(alpha=0.5)
  • 为了避免在图表顶部出现大的圆圈,可以将数据集进行排序(arrange(desc(pop))),代码如下。
data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size = pop)) +
    geom_point(alpha=0.5) +
    scale_size(range = c(.1, 24), name="Population (M)")

现在图可读性有所提高,但如果数据集中还有一个变量想加入图中该怎么办呢?

添加第四个维度:颜色

这里可以用每个国家的洲来控制圆圈的颜色(aes(x=gdpPercap, y=lifeExp, size=pop, color=continent)):

data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country, country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, color=continent)) +
    geom_point(alpha=0.5) +
    scale_size(range = c(.1, 24), name="Population (M)")

该图基本可以满足我们日常生活的气泡图的可视化了。相信大家通过前面的详细的介绍,应该可以自行绘制,只要换个数据,懂得各个代码的含义即可。后面是图表美化的过程,参考thr R Graph Gallery: Bubble plot with ggplot2[3]

美化气泡图

一些经典的改进

  • 使用viridis包的调色板:(scale_fill_viridis(discrete=TRUE, guide=FALSE, option="A")
  • 使用hrbrthemes包的theme_ipsum()
  • 使用xlab和ylab自定义轴标题
  • 为圆添加描边:将形状改为21,并指定颜色(描边)和填充
library(hrbrthemes)
library(viridis)

# Most basic bubble plot
data %>%
  arrange(desc(pop)) %>%
  mutate(country = factor(country)) %>%
  ggplot(aes(x=gdpPercap, y=lifeExp, size=pop, fill=continent)) +
    geom_point(alpha=0.5, shape=21, color="black") +
    scale_size(range = c(.1, 24), name="Population (M)") +
    scale_fill_viridis(discrete=TRUE, guide=FALSE, option="A") +
    theme_ipsum() +
    theme(legend.position="bottom") +
    ylab("Life Expectancy") +
    xlab("欢迎关注:庄闪闪的成长手册 \nq  Gdp per Capita") +
    theme(legend.position = "none")

带数据标签

这里使用ggrepel包中的(geom_text_repel()),可以给每个点自动加入标签,我这里是加入了各个国家名字,其他可以根据你实际需求进行设置。

library(ggrepel)
data1 = data %>%
  mutate(country = factor(country)) %>% head(20)
attach(data1)
  ggplot(data1,aes(x=gdpPercap, y=lifeExp, size=pop, fill=continent)) +
    geom_point(alpha=0.5, shape=21, color="black") +
    scale_size(range = c(.1, 24), name="Population (M)") +
    geom_text_repel(label = country,size=5)+
    scale_fill_viridis(discrete=TRUE, guide=FALSE, option="A") +
    theme_ipsum() +
    theme(legend.position="bottom") +
    ylab("Life Expectancy") +
    xlab("欢迎关注:庄闪闪的成长手册 \nq  Gdp per Capita") +
    theme(legend.position = "none")

如果不喜欢圆形的气泡图,可以将代码中的shape=21进行更改,正方形是shape=22,得到的图如下:

拓展知识

其他扩展可自行学(小编做推送的时候已经学过啦,但是篇幅有限,就没继续整理下去了)

  • GOplot包[4]提供了直接做气泡图的方法,函数是:GOBubble。
  • BUBBLE PLOT理论定义[5]
  • plotly包[6]绘制可以互动的气泡图

参考资料

[1]

R语言数据可视化之美: https://github.com/EasyChart/Beautiful-Visualization-with-R

[2]

data-to-viz: https://www.data-to-viz.com/graph/bubble.html

[3]

thr R Graph Gallery: https://www.r-graph-gallery.com/320-the-basis-of-bubble-plot.html

[4]

GOplot包: https://wencke.github.io/

[5]

BUBBLE PLOT理论: https://www.data-to-viz.com/graph/bubble.html

[6]

plotly包: https://plotly.com/r/bubble-charts/

本文分享自微信公众号 - 庄闪闪的R语言手册(Zss_R4ds),作者:庄闪闪

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-11-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 「R」数据可视化5 : 气泡图

    在生物信息领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包...

    王诗翔呀
  • R可视乎|饼图

    饼图(pie chart)被广泛地应用于各个领域,用于表示不同分类的占比情况,通过弧度大小来对比各种分类。饼图通过将一个圆饼按照分类的占比划分成多个切片,整个圆...

    庄闪闪
  • R可视乎|圆环图

    对于饼图,上一次学习《R语言数据可视化之美》的时候主要利用graphics包和ggplot包(可见R可视乎|饼图)。这几天的学习中发现还有一个更加简便的方法——...

    庄闪闪
  • R可视乎|瀑布图

    瀑布图(waterfall plot) 用于展示拥有相同的X轴变量数据(如相同的时间序列)、不同的Y轴离散型变量(如不同的类别变量)和Z轴数值变量,可以清晰地展...

    庄闪闪
  • R语言可视化——地图与气泡图结合应用

    今天跟大家分享如何在地图上进行散点图、气泡图绘制。 昨天跟大家介绍了ggplot函数进行地图绘制的原理,通过轮廓点和分组来定义每一个地区(国家边界),通过多边形...

    数据小磨坊
  • R可视乎|马赛克图

    马赛克图(mosaic plot),显示分类数据中一对变量之间的关系,原理类似双向的100%堆叠式条形图,但其中所有条形在数值/标尺轴上具有相等长度,并会被划分...

    庄闪闪
  • R可视乎|等高线图

    等高线图(contour map) 是可视化二维空间标量场的基本方法[1],可以将三维数据使用二维的方法可视化,同时用颜色视觉特征表示第三维数据,如地图上的等高...

    庄闪闪
  • 可视化神器Plotly绘制气泡图

    本文是可视化神器Plotly绘图的第6篇:将会重点讲解如何通过Plotly绘制气泡图,英文叫Bubble Charts。首先看一段Plotly官网中对气泡图的简...

    皮大大
  • R可视乎|分面一页多图

    双变量数据可视化可能对于我们比较简单, 但是如果变量是三个或者更多,怎么在一幅图一起显示呢?今天我们就来讨论这个问题,解决方案有两种。

    庄闪闪
  • R可视乎|复合饼图系列

    散点复合饼图(compound scatter and pie chart)可以展示三个数据变量的信息:(x, y, P),其中x和y决定气泡在直角坐标系中的位...

    庄闪闪
  • R可视乎 | 散点图系列(1)

    散点图(scatter graph、point graph、X-Y plot、scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较...

    庄闪闪
  • R可视乎 | 散点图系列(2)

    散点图(scatter graph、point graph、X-Y plot、scatter chart )是科研绘图中最常见的图表类型之一,通常用于显示和比较...

    庄闪闪
  • R语言绘图 | 气泡矩阵图

    如上图所示,准备四列数据,分别为X轴、Y轴、数值(控制气泡大小)和分类(控制气泡颜色,可为字符或数字),以"Tab"为分隔符。

    生信小王子
  • R可视乎|克利夫兰点图系列

    在可靠性实验中,不同产品的测试失效时间可以通过克利夫兰点图进行可视化,今天就对该系列的图进行系统的介绍。主要参考张杰博士的《R语言数据可视化之美》[1],并结合...

    庄闪闪
  • Word天呀,气泡图居然还有这种操作~

    在之前写实习僧爬虫可视化案例之时,曾经用过一个很类似气泡图的图表——气泡云图(superbubble)。 它的图表信息呈现与文字云非常相似,都是在控制一组元素的...

    数据小磨坊
  • 【数据可视化】D3.js实现动态气泡图

    数据处理及可视化是Python的一大应用场景。不过为了实现更好的动态演示效果,实际应用中常常还需要和js相结合。

    Crossin先生
  • R可视乎|决策树结果可视化

    决策树是一种非常有用的分类方法,它能够对新出现的对象给出正确的分类。比起文本描述的规则,我们更希望能使用图形来直观展示决策树的结果,这就是本文介绍的重点——决策...

    庄闪闪
  • 终极篇:3分钟搞定GO/KEGG功能富集分析-气泡图

    干货预警:3分钟搞定GO/KEGG功能富集分析(2),给大家详细讲解了DAVID网站的使用,通过分步操作,带领大家学习了使用DAVID工具来进行GO和KEGG分...

    用户6317549
  • R语言可视化——多图层叠加(离散颜色填充与气泡图综合运用)

    今天这一篇是昨天推送的基础上进行了进一步的深化,主要讲如何在离散颜色填充的地图上进行气泡图图层叠加。 为了使得案例前后一致,仍然使用昨天的数据集。 加载包: l...

    数据小磨坊

扫码关注云+社区

领取腾讯云代金券