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

    文章

    7315

    浏览量

    94035
  • 可视化
    +关注

    关注

    1

    文章

    1319

    浏览量

    22616
  • python
    +关注

    关注

    57

    文章

    4859

    浏览量

    89631

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    指令集测试的一种纠错方法

    本文描述在进行指令集测试的一种纠错方法 1.打开测试指令集对应的dump文件 dump文件是指由汇编文件进行反汇编之后,可以供人阅读指令的反汇编文件。其包含了每条指令的具体操作的信息。指令集测试
    发表于 10-24 14:04

    求助,关于tougfx显示问题求解

    使用stm32f469idisco 移植了个自己的屏幕的项目在使用动态图表的时候显示刷新如下 怎么来优化这个问题呢 ?
    发表于 08-13 06:33

    一种适用于动态环境的实时RGB-D SLAM系统

    了UP-SLAM,这是一种适用于动态环境的实时RGB-D SLAM系统。实验结果表明,UP-SLAM在定位精度方面(高出59.8%)和渲染质量方面(峰值信噪比高出4.57分贝)均优于最先进的方法,同时保持实时性能,并在
    的头像 发表于 07-04 15:14 1006次阅读
    <b class='flag-5'>一种</b>适用于<b class='flag-5'>动态</b>环境的实时RGB-D SLAM系统

    DTMB天线制作的几种简易图纸和方法 5分钟就做出来了

    目录: 八单元DTMB扇形振子宽频带DTMB定向天线 自制DTMB扇形UHF天线 自制DTMB天线之双菱天线制作方法 VHFUHF电视天线放大器电路图 近距离DTMB接收宽频带UHF天线 款UHF频段简易环形天线
    发表于 05-09 11:46

    U盘制作

    在电脑维修中启动盘很重要,靠谱的u盘键启动制作方法
    发表于 05-06 16:10 44次下载

    一种高精度动态压电陶瓷驱动电源

    利用高压大带宽MOSFET运放和高精度运放组成复合式负反馈放大电路,设计了一种高精度动态压电陶瓷驱动电源电路图。
    发表于 04-14 17:31 5次下载

    一种分段气隙的CLLC变换器平面变压器设计

    ,验证理论设计的正确性,为变压器制作提供理论依据。文中基于图1电路拓扑研究了平面变压器的设计与实现方法。 2 一种分段气隙的CLLC平面变压器设计图1中拓扑变压器副边三绕组并联,实际上等效为三个变压器
    发表于 03-27 13:57

    一种永磁电机用转子组件制作方法

    一种永磁电机所使用的转子组件,是由磁钢与芯轴组装而成,产品工作转速80 000 r /mi n,磁钢相对于芯轴的同轴度要小于O.015 mm。现有的装配方法是:先在芯轴两端面制作中心孔,然后直接
    发表于 03-25 15:20

    零基础入门:如何在树莓派上编写和运行Python程序?

    一种非常有用的编程语言,其语法易于阅读,允许程序员使用比汇编、C或Java等语言更少的代码行。Python编程语言最初实际上是作为Linux的脚本语言而开发的。Py
    的头像 发表于 03-25 09:27 1564次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    为什么DLP2021LEQ1EVM按照使用手册在主机静音工作下启动还是跟本地主机控制模式样的人动态图案?

    为什么按照使用手册在主机静音工作下启动还是跟本地主机控制模式样的人动态图案?而不是使用手册上写的人垂直色条的静态图像
    发表于 02-17 07:42

    SciChart—高性能的JavaScript图表和图形库

    使用 SciChart 的 JavaScript 图表库为您的 JS 应用程序发现终极解决方案。 使用 WebGL 创建动态、高速的图表和图形,非常适合实时处理复杂的数据可视化。使用我们强大而灵活
    的头像 发表于 01-22 10:15 2562次阅读
    SciChart—高性能的JavaScript<b class='flag-5'>图表</b>和图形库

    Chart FX——图表导出

    Chart FX 提供的导出方法可以让您(或您的最终用户)以多种格式保存图表文件、图像和数据。不同平台的产品能够导出的格式也不尽相同,只有Web产品(如 Chart FX WebForms)能生成
    的头像 发表于 01-15 14:38 706次阅读
    Chart FX——<b class='flag-5'>图表</b>导出

    Chart FX——打印图表

    出现在页内,从而将图表打印在页纸上。请注意,如果您在打印前使用了压缩属性,打印出的图表可能会有不同的外观。下面是用于压缩和打印图表的 A
    的头像 发表于 01-13 09:12 646次阅读
    Chart FX——打印<b class='flag-5'>图表</b>

    Chart FX-选择图表输出

    图表选择输出时,最简单方法是使用 Chart FX 智能标签向导。 通过 Chart FX 服务器控件控制图表输出有几种不同的方法。其
    的头像 发表于 01-05 11:06 809次阅读
    Chart FX-选择<b class='flag-5'>图表</b>输出

    小批量电路板加工新选择:探索高效低成本的方法

    站式PCBA智造厂家今天为大家讲讲小批量电路板加工制作方法有哪些?小批量电路板加工制作方法
    的头像 发表于 12-25 14:38 1134次阅读