作者:林骥

     来源:林骥

01

你好,我是林骥。

一个动态气泡图,可以展现多个维度的信息。

比如说,要对比分析中国和美国从 1800 年以来每年的人口数量、人均收入和预期寿命,我们可以这样设置每个维度代表的含义:

(1)X 轴:人均收入;

(2)Y 轴:预期寿命;

(3)气泡大小:人口;

(4)气泡颜色:国家;

(5)时间变化:年份。

利用 matplotlib 制作动画的功能,我做了一个动态气泡图的视频:

在作图的细节方面,我做了一下刻意的调整:

(1)图表标题文字用深灰色,并且左对齐;

(2)X 轴和 Y 轴的标题与数字对齐,竖向的文字分行逐字显示;

(3)气泡的颜色与对应的文字使用接近的颜色;

(4)去掉网格线、图例、边框、刻度线等元素;

(5)只选取两个国家的数据。

以上这些刻意的调整,主要是为了更加突出地展现数据本身,或许让人看起来比较「素颜」,但是不要忘了我们作图的目标,是让观众更加快速地理解想要表达的信息,而不是靠「浓妆艳抹」去吸人眼球。

数据可视化,有时需要有批判性思维,突出数据中的重要内容。我们可以从设计师身上学习,多想一想数据可视化的目标是什么,尽可能让数据更利于观众理解,而不能拿着数字,就开始盲目地画图。

02

接下来,我们看看用 matplotlib 画图的具体步骤。

首先,导入所需的库,并设置中文字体和定义颜色等。

# 导入所需的库
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation# 正常显示中文标签
mpl.rcParams['font.sans-serif'] = ['SimHei']# 自动适应布局
mpl.rcParams.update({'figure.autolayout': True})# 正常显示负号
mpl.rcParams['axes.unicode_minus'] = False# 禁用科学计数法
pd.set_option('display.float_format', lambda x: '%.2f' % x)# 定义颜色,主色:蓝色,辅助色:灰色,互补色:橙色
colors = {'蓝色':'#00589F', '深蓝色':'#003867', '浅蓝色':'#5D9BCF','灰色':'#999999', '深灰色':'#666666', '浅灰色':'#CCCCCC','橙色':'#F68F00', '深橙色':'#A05D00', '浅橙色':'#FBC171'}

其次,从 Excel 文件中读取数据,并定义画图用的数据。

# 读取从 https://www.gapminder.org/data 下载的 Excel文件
dfx = pd.read_excel('./data/income_per_person.xlsx', index_col='country')
dfy = pd.read_excel('./data/life_expectancy_years.xlsx', index_col='country')
dfs = pd.read_excel('./data/population_total.xlsx', index_col='country')

接下来,开始用「面向对象」的方法进行画图。

# 使用「面向对象」的方法画图,定义图片的大小
fig, ax = plt.subplots(figsize=(9, 6))# 设置边框颜色
ax.spines['top'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)# 隐藏刻度线
ax.tick_params(axis='x', which='major', length=0)
ax.tick_params(axis='y', which='major', length=0)# 设置坐标标签字体大小和颜色
ax.tick_params(labelsize=16, colors=colors['深灰色'])# 动画函数
def animate(year):# 先清空画布,让画面动态显示新的数据ax.cla()# 设置标题ax.text(-11000, 106, '\n中美人口数量、人均收入和预期寿命的动态变化\n', fontsize=26, color=colors['深灰色'])# 主要通过数字 year 来控制图形的变化,year = 0 代表第 1 年,当 year 增加,相应的画图数据发生变化# 中国数据x = dfx.loc['China'].iloc[year, ]y = dfy.loc['China'].iloc[year, ]s = dfs.loc['China'].iloc[year, ]/100000000# 画气泡图ax.scatter(x, y, s*500, c = colors['浅蓝色'], alpha=0.9)# 设置显示的文本标签ax.text(x, y-18.5, '中国 ' + '%.2f' % s + ' 亿人\n$' + '%.0f' % x + ',' + '%.1f' % y + ' 岁', fontsize=16, c = colors['深蓝色'], ha='center', va='center')# 美国数据x = dfx.loc['United States'].iloc[year, ]y = dfy.loc['United States'].iloc[year, ]s = dfs.loc['United States'].iloc[year, ]/100000000# 画气泡图ax.scatter(x, y, s*500, c = colors['浅橙色'], alpha=0.9)# 设置显示的文本标签ax.text(x, y+15.5, '美国 ' + '%.2f' % s + ' 亿人\n$' + '%.0f' % x + ',' + '%.1f' % y + ' 岁', fontsize=16, c = colors['深橙色'], ha='center', va='top')# 设置坐标轴范围ax.set_xlim(-5000, 65000)ax.set_ylim(0, 100)# 设置 X、Y 轴的标题,适当留白ax.text(-1000, -15, '人均收入$', ha='left', fontsize=16, color=colors['深灰色'])ax.text(-11000, 103, '预\n期\n寿\n命', va='top', fontsize=16, color=colors['深灰色'])# 更新文本的位置和内容x_mean = (ax.get_xlim()[0] + ax.get_xlim()[1]) / 2y_mean = (ax.get_ylim()[0] + ax.get_ylim()[1]) / 2ax.text(x_mean, y_mean, str(1800 + year), ha='center', va='center', fontsize=260, color=colors['灰色'], zorder=-1, alpha=0.2)# 用函数的方式绘制动画,frames 表示动画的张数, interval 表示间隔毫秒数
anim = FuncAnimation(fig, animate, frames=220, interval=100)# 保存为 mp4 的文件格式
anim.save('动态气泡图.mp4')

你可以前往 https://github.com/linjiwx/mp 下载画图用的数据和完整代码。

03

下面对这个动态气泡图做一个简单的数据分析。

两个气泡的位置在不断变化,整体趋势都是从左下角向右上角移动,左下角代表贫穷和疾病,右上角代表富有和健康,说明两个国家的人们变得越来越富有、越来越长寿;气泡的大小也在不断变化,整体趋势是越变越大,代表人口越来越多。

在这个动态气泡图中,有短暂向下的波动,如果我们追溯当年发生的事件,那么就会发现,战争等重大灾难对人们的预期寿命影响非常大。

从上面的分析可以看出,真正有意思的,并不是数据本身,而是数据背后隐藏的信息。

人们都希望知道数据有什么意义,如果你能帮助他们,让他们更容易理解数据的意义,那么你就为他们创造了价值。

要想更容易理解数据,可视化是一种非常有效的方法,把数据放在视觉空间中,我们的大脑就会更容易发现数据背后潜藏的信息。

对数据进行可视化,我们也要有「双赢思维」,让观众的兴趣与自己想要传递的信息保持一致,实现双赢。

如果只顾观众的兴趣,弄了一堆花哨的东西,但是没有传递有价值的信息,那么只是浪费观众和自己的时间和精力。

如果不顾观众的兴趣,则做出的图表可能没人看,就容易碌碌无为,最终也体现不出自己的价值

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

● 笑死人不偿命的知乎沙雕问题排行榜

● 用Python扒出B站那些“惊为天人”的阿婆主!

● 全球股市跳水大战,谁最坑爹!

● 华农兄弟、徐大Sao&李子柒?谁才是B站美食区的最强王者?

● 你相信逛B站也能学编程

利用动态气泡图进行数据分析相关推荐

  1. 利用公交刷卡数据分析北京职住关系和通勤出行

    01 文章信息 <利用公交刷卡数据分析北京职住关系和通勤出行>,本篇文章于2021年10月15日发表于<地理学报>. 02 摘要 基于位置服务 (Location Based ...

  2. R语言可视化散点图、气泡图、动态气泡图、数据点重合的散点图、数据点计数图、抖动数据点图、基于lm方法或者loess方法拟合数据点之间的趋势关系曲线、自定义数据点的大小、色彩、添加主标题、副标题、题注

    R语言可视化散点图.气泡图.动态气泡图.数据点重合的散点图.数据点计数图.抖动数据点图.基于

  3. [脑海成像]科学家利用动态电极绕过眼睛直接刺激大脑,在盲人脑海画出字母

    目录 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:941473018 5 月 14 日,国际顶级期刊<Cell>杂志发表了一项黑科技成果,来自美国贝勒医学院 D ...

  4. python去除数组缺失值_动态数组的应用,VBA中如何利用动态数组去除重复值的第二讲...

    大家好,我们今日继续讲解VBA代码解决方案的第62讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法第二部分.在上一讲中,我们讲了知识点的利用,其一是Filter函数,其二是ReDi ...

  5. ligertoolbar 动态加载按钮_Axure利用动态面板实现环形加载进度条

    先来看下效果. 基本原理 上面是组合效果,主要包含三个部分,左半圆.右半圆和中间的百分加载部分.左.右半圆的实现原理很简单,就是利用动态面板的遮挡功能,将一个完整的圆遮挡一半,然后在显示的那一半上面添 ...

  6. 工程监测管理平台、工程数据看板、工程总览、动态模型、数据分析、数据跟踪、建筑工地、数据报表、警点管控、现场记录、观测记录、测点管理、模型管理、文档管理、墙体下沉、成员管理、axure原型、产品原型

    工程监测管理平台.工程数据看板.工程总览.动态模型.数据分析.数据跟踪.建筑工地.数据报表.警点管控.现场记录.观测记录.测点管理.模型管理.文档管理.墙体下沉.成员管理.axure原型.产品原型   ...

  7. 可视化:动态气泡图,拿走不谢!

    作者 | 小F 来源 | 法纳斯特(ID:walker398) 头图 |  CSDN 下载自东方IC 本期给大家分享一个用D3.js实现的动态气泡图案例. 也是之前小F了解D3.js时发现的,效果大致 ...

  8. c++删除数组中重复元素_在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法...

    大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法.如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法 ...

  9. 简单粗暴的动态气泡图

    R语言之动态气泡图 刚开始学习R语言那会,被一个叫动态气泡图的图所吸引,因为看起来觉得很酷炫,当我把我的实验数据用动态气泡图展示给老师看的时候,我觉得他应该还是比较满意吧. 为了画这个图,我记得是写了 ...

最新文章

  1. 1的个数 itoa函数使用
  2. 树莓派 4B安装ubuntu18.04与melodic版ROS
  3. LeetCode: Convert BST to Greater Tree
  4. 关于团队开发项目的想法
  5. 一个Python爬虫案例让你看清Python2和3之间的区别
  6. New module changes in Go 1.16
  7. 618电商大促 到底谁家赢了?大家都这么有钱的吗?
  8. Android精讲--界面编程2(布局管理器)
  9. zabbix+ldap认证故障解决一例
  10. LIO-SAM探秘之文章索引
  11. 缓冲流与打印流(字节与字符)
  12. IT行业的工作内容是什么?
  13. 7个最佳博客名称生成器,可帮助您找到好的博客名称提示
  14. 嵌入式开发板模拟器:QEMU
  15. 一战封神——提升奇珍提高战力
  16. 基于CAD等高线的流域边界绘制
  17. CorelDRAW x4提示非法软件产品被禁用解决方法教程
  18. 本科毕设论文如何写(1)-- 快速下手
  19. 在OpenGL中利用shader进行实时瘦脸大眼等脸型微调
  20. 计蒜之道2019 复赛 D-星云系统(单调栈)

热门文章

  1. 【论文写作】如何画出好看的图表
  2. UltraEdit 15.10注册码
  3. 小实操(3): 利用键盘事件实现小人快跑
  4. 摄像头和麦克风的使用日志管控方案
  5. python中circle是什么意思_啥是佩奇,让 Python 告诉你!
  6. 儿童台灯哪个品牌更护眼推荐?2022年最新护眼台灯十大品牌排行榜
  7. ogr2ogr导入导出数据。
  8. C#程序设计实践课程设计之数字华容道
  9. 【题解】老虎的数字游戏
  10. 轻博客只是大众喜新厌旧的产物