专栏首页气象学家动态曲线图(linechart)--Matplotlib绘制

动态曲线图(linechart)--Matplotlib绘制

效果预览

配上动感的音乐感觉就是不一样啊,要达到上述效果除了核心的Matplotlib绘图外,其他工具和上篇推文 Hans Rosling Charts Matplotlib 绘制 所使用的工具一样啊。下面将分以下几个部分对制作过程进行介绍。

01. 引言

动态曲线图不同于动态气泡图,它可以查看部分指标在一段时间内的变化趋势,本期推文将推出动态曲线图的 Matplotlib 绘制过程,核心过程为 折线图 和 散点图 的绘制,详细过程如下:

02. 数据处理

由于需要查某些指标随时间的变化趋势,可将数据处理成如下形式(部分):

图表中的 china、usa、japan 等变量可以结合自己的实际需求进行更改,而 time 列则是时间变化。上述数据为本次绘制动态曲线图所需数据,即从 gapminder 网站下载的平均个人收入(Income per person)数据整理而成,处理代码主要如下:

这里 eq(nation) 操作为提取自己所需数据,最后通过 pandas 的 concat() 操纵进行提取数据合并即可。

03. 数据可视化

动态图表的绘制主要在于折线图和散点图的绘制,我们采用的依旧还是面向对象式绘图方式,这里建议绘制较为复杂的图表时多采用此方法进行绘制。完整绘图过程如下:

绘图的核心代码(以china为例)主要在第16-24行,详细解释如下:

idx = data_test.time

折线图:

ax.plot( idx, data_test['china'],color = '#FF5872',lw = 4)#折线图

其中,x 和 y 参数分别设置为数据的 time 列和 china 列,color 和线宽 lw 属性则是为了美化折线图。

散点图:

ax.scatter(idx.tolist()[-1],data_test['china'].tolist()[-1],color='#FF5872',edgecolor ='black',s = 280,lw = 2.5,zorder =4)#散点图

散点图的绘制则需知道我们只需要绘制最后一个散点,即获取最后一个数据,因此scatter的x,y均有[-1]的索引,当然,我们需在之前使用tolist()方法转变成数据列表形式,填充颜色 color、散点边框颜色 edgecolor、散点大小 s、和线宽 lw 均可根据自己需要进行定制化设置。这里需要注意的是zorder属性的设置,这里设置zorder=4,表示散点图绘制在折线图之后,即散点图压在折线图之上,使绘图更加美观。

文本(国家名):

ax.text(idx.tolist()[-1]+5,data_test['china'].tolist()[-1]-250,'china',size=15,c= '#FF5872',va='top',ha='left',fontweight = 'bold')#国家名

这里的 x 和 y 属性则是根据实际情况进行慢慢调试 ,其他的属性则是美化图表使用。

文本(数值):

ax.text(idx.tolist()[-1]+5,data_test['china'].tolist()[-1]-250,'china',size=15,c= '#FF5872',va='top',ha='left',fontweight = 'bold')#国家名

由于数据较大,这里

':{:,.0f}'.format(data_test['china'].tolist()[-1])对文本进行格式化操作,其他属性则根据自己需求进行设置即可。

部分详细解释如下:

  • 77-84 行则是添加位置固定的文本内容,设置 transform = ax.transAxes 则使文本位置不随数据变化而变动。这里需要指出的是,一般的绘图过程,固定文本一般都是在图表的刻度、轴等属性设置结束后再进行添加,这点则需要注意,好的绘图习惯可以大大减少绘图时间哦
  • 66-71 行则是自定义 y 轴的刻度比例范围,由于,较早年份的数据较为集中,使图表绘制集中在一块,影响美观,特经此过程进行设置,而这也是 matplotlib 3.1 版本新添加的内容。
  • 53 行使用 ax.axvline() 为动态图表添加一条推进线。
  • 54-64 行则是对图表刻度、轴脊等 属性进设置。
  • 75 行采用ax.yaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))定制化刻度标签形式,此方法对绘制定制化的刻度标签非常有用,希望感兴趣的同学们可以多看看官网的教程。
  • 86 行 ax.set_axisbelow(True) 设置网格线等属性位于图表图层之下。

下面给出一年份数据绘制的曲线图结果:

备注:要想生成这种暗黑背景风格的图表,则可通过以下设置完成:

#设置画布figure颜色
plt.figure(facecolor='#1D1E23',edgecolor='#1D1E23')
#对Axis进行背景颜色设置
ax.set_facecolor('#373E4B')

04. 总结

Matplotlib绘制动态曲线图较动态气泡图而言,绘制过程较为简单,主要就是折线图和散点图的配合使用,其他的就是图表属性的定制化设置了,个人能力有限,发现错误的同学可以留言告知啊,下期我们将继续推出Matplotlib动态图系列的第三篇--动态条形图 绘制方法。

>>>>

参考链接

(1) https://www.gapminder.org/tools/#$chart-type=linechart

(2) https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.plot.html?highlight=plot#matplotlib.axes.Axes.plot

(3) https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.scatter.html?highlight=scatter#matplotlib.axes.Axes.scatter

(4) https://matplotlib.org/api/_as_gen/matplotlib.axes.Axes.text.html?highlight=text#matplotlib.axes.Axes.text

(5 https://matplotlib.org/api/_as_gen/matplotlib.axis.Axis.set_major_formatter.html#matplotlib.axis.Axis.set_major_formatter

(6) https://matplotlib.org/api/ticker_api.html?highlight=ticker#module-matplotlib.ticker

下期推文预告

下期将会推文matplotlib动态系列的最后一篇教程推文:Bar Chart Race 制作,部分效果如下:敬请期待

本文分享自微信公众号 - 气象学家(Meteorologist2019)

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

原始发表时间:2020-09-03

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python-matplotlib 学术散点图完善

    上期的推文Python-matplotlib 学术型散点图绘制 推出后,很多小伙伴比较喜欢

    气象学家
  • 工具包 | 使用Python绘制Sci学术期刊配图

    之前还在讨论Matplotlib没有很好的第三方主题库呢?这不,又被我发现了一个宝藏库,还专门用于一些学术期刊的图表发表,可谓是弥补了matplotlib 繁琐...

    气象学家
  • Nature Climate Change:气候变化背景下极端干旱对植被生产力的影响

    陆地总初级生产总值(gross primary production, GPP)是全球植被生长和粮食生产的基础,它影响着生态系统碳平衡,在调节大气CO2中发挥着...

    气象学家
  • Solr竞价排名之ExternalFileField使用

    我是攻城师
  • 机器学习算法之岭回归、Lasso回归和ElasticNet回归

    作者:biaodianfu https://www.biaodianfu.com/ridge-lasso-elasticnet.html

    统计学家
  • 双线性插值法

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    于小勇
  • 清华霸榜,长沙理工异军突起!第三届 CCF CCSP落下帷幕

    10月26日上午,经过前一天12个小时的激烈角逐后,2018 大学生计算机系统与程序设计竞赛(CCSP)进入颁奖阶段。

    量子位
  • 读懂一行Full GC日志(回复JVM内存分配担保机制一文中 Mr/Mrs Xxx 在留言区提出的问题)

    回复JVM内存分配担保机制一文中 Mr/Mrs Xxx 在留言区提出的问题: “请问分配3M的时候,怎么还发生了full gc?” 回复如下: 发生Full ...

    ImportSource
  • android传送照片到FTP服务器的实现代码

    本文实例为大家分享了android传送照片到FTP服务器的具体代码,供大家参考,具体内容如下

    砸漏
  • 谷歌称对于用户来说,网络钓鱼比键击记录器和密码复用更具威胁

    近期,Google与加州大学伯克利分校国际计算机科学研究院的研究人员联合主导了一项针对网络安全威胁的研究。该研究表明,对于那些Google账号被盗的用户来说,网...

    FB客服

扫码关注云+社区

领取腾讯云代金券