Matplotlib 气球图 制作

公众号后台回复“图书“,了解更多号主新书内容

作者:宁海涛

来源:DataCharm

     

01. 引言

Matplotlib 制作稍带“艺术”的可视化作品,ggplot2 基于其优秀绘图图层设置及多种拓展绘图包可以较为灵活的完成此类任务,但Matplotlib也不是完全不可以,本期推文用python经典的绘图包Matplotlib进行“气球”图(通过图形合理搭配实现)的绘制,主要涉及Matplotlib 散点图(sactter())及 线 vlines()、mlines()及PatchCollection()等的灵活应用。上期推文预告的效果图在文末的代码链接(notebook)中 也会有绘制方法,本期推文为完善版本

02. 数据处理

本期推文的绘图数据为描述美国圣诞节播放歌曲的数据,我们选取其中部分年份进行可视化绘制,数据主要如下(部分):

数据介绍:title 为可取名,year为年份(绘图-x),week_position 为星期(绘图-y)。这里提一下,这是处理好的数据结果,原始数据处理过程也不是特别复杂,就不介绍处理过程(这里主要是可视化技巧介绍)。但有一点需要大家注意:字符串 和 时间数据 的处理在数据处理和分析中占有很大比例,而pandas也很好继承了Python字符串、时间数据等的灵活处理功能,详细内容,大家可以先看官网教程(看完大多数的数据处理任务都可以满足啦,后期我们也会根据自己在科研和工作过程中的具体数据处理小技巧进行专门推文教程制作)。

03. 数据可视化

本期推文 数据可视化的难点 在于连接“气球”的连接线的绘制,ggplot2 中geom_segment()可以灵活实现这一过程,而Matplotlib 则相对麻烦点,但也是有绘制连接线的方法的。本期推文的连接线绘制过程大家可直接记住,套用即可

(1) Matplotlib 绘制 线 的方法

大家可能首先想到 ax.axvline()、ax.vlines()和ax.axhline()、ax.hlines() 方法绘制垂直及水平线。ax.axvline()和ax.axhline()用于绘制固定位置的线十分方便,但其范围(长短)位置较为固定,无法随着具体数值进行更改,即transform属性固定。要想根据 具体数值 更改线 长短 ,则还需使用ax.vlines()和ax.hlines()进行绘制。本文刚开始实验过程也是采用ax.vlines()进行尝试下绘制,结果如下:

代码:

结果如下(部分):

结果也可以看出:虽然设置了alpha ,但也会根据 “重复“绘制,导致线的粗细不同,再者,散点(scatter)与 线(vlines) 的连接也不能满足绘图需求。

(2) matplotlib.lines 方法绘制

在尝试多次和查看matplotlib官网后,我们发现matplotlib.lines 可以有效解决连接线问题,这也可以看作为Matplotlib的“geom_segment“。具体如下:

(上图中的代码你也可以当作固定公式进行直接套用即可)

绘制效果:

无论从 连接线的粗细以及点线连接 来看,此方法都可以完美解决。

其中:

for p1, p2 in zip(christmas['year'], christmas['week_position']):

christmas['year'] 和christmas['week_position'] 为具体的数据,

newline([p1,1], [p1,p2])则是引用绘线函数。

比如:p1 为 year中数据,我们选1960 ,p2 为 week_position 中数据,选 13,那么在位置 (1960,1)和位置(1960,13) 进行连接线绘制,如下图红线圈出的部分,其他依次绘制即可。

(3) 散点图颜色设置及图例添加

散点图的颜色设置,我们采用字典方法,详细可以查看我之前的推文(推文连接),具体代码如下:

涉及列表表达式和字典的构建,不熟悉的可以自行百度啊,结果如下:

再根据数据christmas 中title 列,遍历即可:

还是那句话,列表和字典的灵活应用,可以使数据处理的效率加倍!!

图例添加还是和之前推文教程一样(Hans Rosling Charts Matplotlib 绘制),如下(部分):

这里结合了刚才构建的color_dict字典。

(4)具体代码及重要部分解释

部分解释如下:

① 第 6 行,在 plt.subplots()中设置了fig背景颜色facecolor和边框颜色edgecolor。

② 第 12- 16 行, 绘制散点图多类别图例。

③ 第 17- 19 行,绘制用于显示光照效果的散点图,设置颜色即可。

④ 第 21 – 28 行,以及 36 – 43 行,都是连接线 的绘制方法。

⑤ 第 30 – 34 行,绘制矩形形状(气球卡口),使用Rectangle() 方法进行绘制。

⑥ 第 47 – 51 行,为具体的图例属性设置,包括图例标题、字体颜色、大小、图例填充颜色以及图例的位置微调等。

⑦ 第 65 行 去除axis 包括网格线、刻度等属性。

⑧ 第 66 行,反转y轴设置。

其他为具体如刻度范围之类的设置。

最终效果如下:


◆ ◆ ◆  ◆ ◆

当当网开学季活动来袭,满100减50的基础上,实付满200的基础上使用优惠码DYU6NM可以再减40,相当于400-240,

使用方法如下:

步骤一,挑选心仪的图书至购物车点击结算 

步骤二,点击优惠券/码处

步骤三,输入优惠码DYU6NM (注意全部要大写)

需要注意的是:优惠码全场自营图书可用(教材、考试类除外)

                           

更多详情可以扫描下方二维码或点击小程序:

点击阅读原文,即可参与当当400-240购书活动
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值