0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python中一种简单的动态图表制作方法

数据分析与开发 来源:机器之心 作者:机器之心 2021-02-04 15:58 次阅读

在读技术博客的过程中,我们会发现那些能够把知识、成果讲透的博主很多都会做动态图表。他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法。

83b42286-5fd2-11eb-8b86-12bb97331649.gif

数据暴增的年代,数据科学家、分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人。如何让目标听众更直观地理解?当然是将数据可视化啊,而且最好是动态可视化。 本文将以线型图、条形图和饼图为例,系统地讲解如何让你的数据图表动起来。

84f19dcc-5fd2-11eb-8b86-12bb97331649.gif

这些动态图表是用什么做的? 接触过数据可视化的同学应该对 Python 里的 Matplotlib 库并不陌生。它是一个基于 Python 的开源数据绘图包,仅需几行代码就可以帮助开发者生成直方图、功率谱、条形图、散点图等。这个库里有个非常实用的扩展包——FuncAnimation,可以让我们的静态图表动起来。 FuncAnimation 是 Matplotlib 库中 Animation 类的一部分,后续会展示多个示例。如果是首次接触,你可以将这个函数简单地理解为一个 While 循环,不停地在 “画布” 上重新绘制目标数据图。 如何使用 FuncAnimation? 这个过程始于以下两行代码:

importmatplotlib.animationasani animator=ani.FuncAnimation(fig,chartfunc,interval=100) 从中我们可以看到 FuncAnimation 的几个输入:

fig 是用来 「绘制图表」的 figure 对象;

chartfunc 是一个以数字为输入的函数,其含义为时间序列上的时间;

interval 这个更好理解,是帧之间的间隔延迟,以毫秒为单位,默认值为 200。

这是三个关键输入,当然还有更多可选输入,感兴趣的读者可查看原文档,这里不再赘述。 下一步要做的就是将数据图表参数化,从而转换为一个函数,然后将该函数时间序列中的点作为输入,设置完成后就可以正式开始了。 在开始之前依旧需要确认你是否对基本的数据可视化有所了解。也就是说,我们先要将数据进行可视化处理,再进行动态处理。 按照以下代码进行基本调用。另外,这里将采用大型流行病的传播数据作为案例数据(包括每天的死亡人数)。

importmatplotlib.animationasani importmatplotlib.pyplotasplt importnumpyasnp importpandasaspdurl='https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv' df=pd.read_csv(url,delimiter=',',header='infer')df_interest=df.loc[ df['Country/Region'].isin(['UnitedKingdom','US','Italy','Germany']) &df['Province/State'].isna()]df_interest.rename( index=lambdax:df_interest.at[x,'Country/Region'],inplace=True) df1=df_interest.transpose()df1=df1.drop(['Province/State','Country/Region','Lat','Long']) df1=df1.loc[(df1!=0).any(1)] df1.index=pd.to_datetime(df1.index)绘制三种常见动态图表动态曲线图

88635180-5fd2-11eb-8b86-12bb97331649.gif

如下所示,首先需要做的第一件事是定义图的各项,这些基础项设定之后就会保持不变。它们包括:创建 figure 对象,x 标和 y 标,设置线条颜色和 figure 边距等:

importnumpyasnp importmatplotlib.pyplotaspltcolor=['red','green','blue','orange'] fig=plt.figure() plt.xticks(rotation=45,ha="right",rotation_mode="anchor")#rotatethex-axisvalues plt.subplots_adjust(bottom=0.2,top=0.9)#ensuringthedates(onthex-axis)fitinthescreen plt.ylabel('NoofDeaths') plt.xlabel('Dates') 接下来设置 curve 函数,进而使用 .FuncAnimation 让它动起来: defbuildmebarchart(i=int): plt.legend(df1.columns) p=plt.plot(df1[:i].index,df1[:i].values)#noteitonlyreturnsthedataset,uptothepointi foriinrange(0,4): p[i].set_color(color[i])#setthecolourofeachcurveimportmatplotlib.animationasani animator=ani.FuncAnimation(fig,buildmebarchart,interval=100) plt.show()动态饼状图

8c06c506-5fd2-11eb-8b86-12bb97331649.gif

可以观察到,其代码结构看起来与线型图并无太大差异,但依旧有细小的差别。

importnumpyasnp importmatplotlib.pyplotaspltfig,ax=plt.subplots() explode=[0.01,0.01,0.01,0.01]#popouteachslicefromthepiedefgetmepie(i): defabsolute_value(val):#turn%backtoanumber a=np.round(val/100.*df1.head(i).max().sum(),0) returnint(a) ax.clear() plot=df1.head(i).max().plot.pie(y=df1.columns,autopct=absolute_value,label='',explode=explode,shadow=True) plot.set_title('TotalNumberofDeaths '+str(df1.index[min(i,len(df1.index)-1)].strftime('%y-%m-%d')),fontsize=12)importmatplotlib.animationasani animator=ani.FuncAnimation(fig,getmepie,interval=200) plt.show() 主要区别在于,动态饼状图的代码每次循环都会返回一组数值,但在线型图中返回的是我们所在点之前的整个时间序列。返回时间序列通过 df1.head(i) 来实现,而. max()则保证了我们仅获得最新的数据,因为流行病导致死亡的总数只有两种变化:维持现有数量或持续上升。 df1.head(i).max()动态条形图

8cdb4c72-5fd2-11eb-8b86-12bb97331649.gif

创建动态条形图的难度与上述两个案例并无太大差别。在这个案例中,作者定义了水平和垂直两种条形图,读者可以根据自己的实际需求来选择图表类型并定义变量栏。 fig=plt.figure() bar=''defbuildmebarchart(i=int): iv=min(i,len(df1.index)-1)#theloopiteratesanextraonetime,whichcausesthedataframestogooutofbounds.Thiswastheeasiest(mostlazy)waytosolvethis:) objects=df1.max().index y_pos=np.arange(len(objects)) performance=df1.iloc[[iv]].values.tolist()[0] ifbar=='vertical': plt.bar(y_pos,performance,align='center',color=['red','green','blue','orange']) plt.xticks(y_pos,objects) plt.ylabel('Deaths') plt.xlabel('Countries') plt.title('DeathsperCountry '+str(df1.index[iv].strftime('%y-%m-%d'))) else: plt.barh(y_pos,performance,align='center',color=['red','green','blue','orange']) plt.yticks(y_pos,objects) plt.xlabel('Deaths') plt.ylabel('Countries')animator=ani.FuncAnimation(fig,buildmebarchart,interval=100)plt.show()保存动画图 在制作完成后,存储这些动态图就非常简单了,可直接使用以下代码: animator.save(r'C: empmyfirstAnimation.gif')责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6511

    浏览量

    87583
  • 可视化
    +关注

    关注

    1

    文章

    1016

    浏览量

    20549
  • python
    +关注

    关注

    51

    文章

    4671

    浏览量

    83457

原文标题:让数据动起来:Python动态图表制作!

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    光耦检测仪的制作方法有哪些

    搭建和软件编程等方面。本文将详细介绍光耦检测仪的制作方法,包括电路设计和搭建、元器件选型、软件编程等方面。 一、光耦检测仪的电路设计和搭建 1.选取合适的光耦件 光耦件根据不同的应用需求有不同的类型和参数要求。
    的头像 发表于 04-01 18:10 532次阅读

    无感绕线电阻器制作方法及其缺点?

    无感绕线电阻器制作方法及其缺点? 绕线电阻器是一种最常见的电阻器类型,它由一根绝缘电线绕成的线圈和连接的引线组成。绕线电阻器主要用于电路中对电流的控制和调整,常见于各类电子产品和电路中。在以下
    的头像 发表于 12-29 10:45 802次阅读

    一种简易恒流充电器的制作方法

    恒流充电器的制作方法,帮助大家了解并掌握这项技术。 制作原理 恒流充电器是一种能够保持恒定电流输出的充电器,其原理是通过负反馈调节电路,使充电电流始终保持在设定值附近。简易恒流充电器的核心元件是LM317可调稳压器,
    的头像 发表于 12-14 14:32 594次阅读

    python简单for循环例子

    Python一种简单而又强大的编程语言,通过其清晰的语法和丰富的功能库,我们可以实现各种各样的任务。其中一个最基本的语法结构就是for循环,让我们来看一下如何使用for循环来编写一个
    的头像 发表于 11-21 14:53 486次阅读

    TCL华星“显示面板及其制作方法”专利获授权

    专利摘要显示,本申请公开了一种显示面板及其制作方法,该显示面板包括:第一基板、第一金属层、第一半导体层和第二金属层,第一基板中第一基板和第一金属层位于第一基板上。第一半导体层设置在第一金属层上,第二金属层设置在第一半导体层上
    的头像 发表于 09-27 10:19 332次阅读
    TCL华星“显示面板及其<b class='flag-5'>制作方法</b>”专利获授权

    STM32GUI使用TouchGFX动态图片功能实现动态更换表盘背景功能

    电子发烧友网站提供《STM32GUI使用TouchGFX动态图片功能实现动态更换表盘背景功能.pdf》资料免费下载
    发表于 09-19 16:54 2次下载
    STM32GUI使用TouchGFX<b class='flag-5'>动态图</b>片功能实现<b class='flag-5'>动态</b>更换表盘背景功能

    变压器220v变12v制作方法

    变压器220v变12v制作方法 变压器是电力传输过程中经常使用的一种设备,可用于改变电压。它可以将高电压变成低电压,例如从220伏变成12伏。在这篇文章中,我们将讨论制作220伏往12伏变压器的详细
    的头像 发表于 08-17 17:37 3795次阅读

    动态库封装成python模块的方法

    之前的文章 将静态库封装成 python 模块中讲解了如何将静态库封装成 python 模块,静态库封装相对来说还是有点复杂,今天来介绍下动态库封装成 python 模块的
    发表于 07-13 15:24 376次阅读

    Insun英尚SPI程序制作方法

    Insun英尚SPI程序制作方法
    的头像 发表于 07-06 10:25 421次阅读
    Insun英尚SPI程序<b class='flag-5'>制作方法</b>

    数字温度测量装置的制作方法

    电子发烧友网站提供《数字温度测量装置的制作方法.zip》资料免费下载
    发表于 06-29 11:18 0次下载
    数字温度测量装置的<b class='flag-5'>制作方法</b>

    使用Python和Raspberry Pi的实时图表

    电子发烧友网站提供《使用Python和Raspberry Pi的实时图表.zip》资料免费下载
    发表于 06-13 10:47 0次下载
    使用<b class='flag-5'>Python</b>和Raspberry Pi的实时<b class='flag-5'>图表</b>

    一种集成电路芯片测试座的制作方法

    当下集成电路芯片测试座的制作方法有很多,但您需要一种高效、稳定、易操作的方法
    的头像 发表于 05-24 09:32 658次阅读

    是否有一种简单方法将esp连接到openhab并发送特殊命令?

    嗨, (首先抱歉我的英语不好) 个月以来我直在玩 ESP,我真的很喜欢它! 但现在我想更进步,将 ESP 连接到 Openhab 并控制灯、RGB-LED 等。 所以我的问题:是否有一种
    发表于 05-24 08:14

    一种简单的报错设计,分享

    一种简单的报错设计,可在次基础上增加。 冲突 阻挡 重复 不在工位 不在岗 计时不准 范围外 强停 其它
    发表于 05-20 20:07

    线上科普双绞线制作方法

    双绞线是一种综合布线工程中最常用的传输介质,是由两根具有绝缘保护层的铜导线组成的,把两根绝缘的铜导线按一定密度互相绞在一起,下面为大家科普一下双绞线制作方法
    的头像 发表于 05-11 10:42 1583次阅读