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

您所在的位置:网站首页 怎样用python绘制动图 Python中一种简单的动态图表制作方法

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

2022-06-10 18:32| 来源: 网络整理| 查看: 265

在读技术博客的过程中,我们会发现那些能够把知识、成果讲透的博主很多都会做动态图表。他们的图是怎么做的?难度大吗?这篇文章就介绍了 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

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

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

收藏 人收藏

扫一扫,分享给好友

复制链接分享 评论

发布评论请先 登录

相关推荐

星环科技入选 “2021年重点课题研究优秀课题报告” 日前,中国证券业协会2021年重点课题研究优秀课题报告评选结果公示,星环科技联合银河证券申报的课题 .... 的头像 科技绿洲 发表于 06-10 17:29 • 56次 阅读 Young基于Python的开源论坛 ./oschina_soft/Young.zip 发表于 06-10 14:33 • 3次 阅读 Young基于Python的开源论坛 Retwis-py仿Twitter微博系统 ./oschina_soft/retwis-py.zip 发表于 06-10 14:31 • 1次 阅读 Retwis-py仿Twitter微博系统 ME@deepgully开源博客系统 ./oschina_soft/me.zip 发表于 06-10 14:20 • 1次 阅读 ME@deepgully开源博客系统 Tornado-Minos简约社区系统 ./oschina_soft/Minos.zip 发表于 06-10 11:32 • 1次 阅读 Tornado-Minos简约社区系统 reddit官方网站源代码 ./oschina_soft/reddit.zip 发表于 06-10 11:06 • 1次 阅读 reddit官方网站源代码 Misago开源Python论坛系统 ./oschina_soft/Misago.zip 发表于 06-10 11:05 • 3次 阅读 Misago开源Python论坛系统 3n1b三年一班开源论坛 ./oschina_soft/3n1b.com.zip 发表于 06-10 11:04 • 1次 阅读 3n1b三年一班开源论坛 ByrBbsMirror北邮人论坛镜像 ./oschina_soft/ByrBbsMirror.zip 发表于 06-10 10:37 • 1次 阅读 ByrBbsMirror北邮人论坛镜像 Icarus基于Python3.6和Vue.js的社区系统 ./oschina_soft/Icarus.zip 发表于 06-10 10:06 • 1次 阅读 Icarus基于Python3.6和Vue.js的社区系统 FakeV2EX基于Django的仿V2EX社区 ./oschina_soft/FakeV2EX.zip 发表于 06-10 09:57 • 5次 阅读 FakeV2EX基于Django的仿V2EX社区 Yat自动化测试框架 ./oschina_soft/gitee-Yat.zip 发表于 06-10 09:34 • 1次 阅读 Yat自动化测试框架 东软医疗NeuBrilliant卒中智能急救助手助力优质医疗服务 创新不止,关爱无界。东软医疗将继续以高端诊疗设备和智能软件的研发为基础,不断完善胸痛、卒中双中心建设.... 的头像 科技绿洲 发表于 06-09 17:51 • 314次 阅读 宇泛推出数智建造解决方案 赋能智慧城市建设 近日,由宇泛参与编制的《智慧工地总体规范》、《智慧工地建设规范》和《智慧工地应用规范》3项团体标准经.... 的头像 科技绿洲 发表于 06-09 17:07 • 539次 阅读 IBM提出开放混合云架构为客户机房节能减排提供数据支撑 随着各行各业数字化转型的不断深入,企业对技术支持服务的规模、技术复杂度、响应速度的要求日益严苛。而当.... 的头像 科技绿洲 发表于 06-09 15:36 • 200次 阅读 DeerU基于Django的开源博客系统 ./oschina_soft/gitee-DeerU.zip 发表于 06-09 14:45 • 11次 阅读 DeerU基于Django的开源博客系统 利用Django开发的写作系统变饼档博客 ./oschina_soft/gitee-bianbingdang.zip 发表于 06-09 14:37 • 8次 阅读 利用Django开发的写作系统变饼档博客 MyDjangoBlog基于Django搭建的个人博客 ./oschina_soft/gitee-17python.zip 发表于 06-09 14:23 • 8次 阅读 MyDjangoBlog基于Django搭建的个人博客 碎言静态博客系统 ./oschina_soft/gitee-suiyan.zip 发表于 06-09 11:21 • 8次 阅读 碎言静态博客系统 多个能将深度学习训练过程进行可视化的工具 Visual DL是百度开发的,基于echar和PaddlePaddle,支持PaddlePaddl.... 的头像 新机器视觉 发表于 06-09 11:17 • 124次 阅读 WLBLOG静态博客生成系统 ./oschina_soft/gitee-WLBLOG.zip 发表于 06-09 10:55 • 6次 阅读 WLBLOG静态博客生成系统 White博客CMS ./oschina_soft/white.zip 发表于 06-09 10:50 • 6次 阅读 White博客CMS PyLinden静态博客生成器 ./oschina_soft/PyLinden.zip 发表于 06-09 10:29 • 6次 阅读 PyLinden静态博客生成器 ijd8博客for BAE/SAE ./oschina_soft/ijd8.zip 发表于 06-09 10:28 • 9次 阅读 ijd8博客for BAE/SAE GarfieltBlog-webpy web.py轻量级博客系统 ./oschina_soft/GarfieltBlog-webpy.zip 发表于 06-09 10:24 • 6次 阅读 GarfieltBlog-webpy web.py轻量级博客系统 DPress博客系统 ./oschina_soft/DPress.zip 发表于 06-09 10:04 • 9次 阅读 DPress博客系统 MapleBlog博客平台 ./oschina_soft/MapleBlog.zip 发表于 06-09 09:20 • 9次 阅读 MapleBlog博客平台 大小鼠热板测痛仪操作流程的详细介绍  热板法是镇痛药物筛选、检测中常用的一种方法,也是一种能确定区分中 枢神经和末梢神经镇痛机理的方法,.... 的头像 ahyk 发表于 06-08 17:41 • 215次 阅读 大小鼠热板测痛仪操作流程的详细介绍 支持蓝牙双模的纯数据芯片KT6368A介绍 KT6368A芯片是一款支持蓝牙双模的纯数据芯片,蓝牙5.1版本。芯片的亮点在超小尺寸,超级价格。以.... 的头像 清月电子 发表于 06-08 16:18 • 273次 阅读 支持蓝牙双模的纯数据芯片KT6368A介绍 风光互补系统在地质灾害中的应用 2021年全国共发生地质灾害4772起,一共造成80人死亡、11人失踪、55人受伤,直接经济损失13.... 发表于 06-08 14:24 • 15次 阅读 如何为企业制定有效的数据质量政策   虽然数据质量框架有助于组织数据质量工作的运营方面,但数据质量情报让关键决策者和其他利益相关者深入.... 的头像 星星科技指导员 发表于 06-08 11:33 • 165次 阅读 IBM z16推出全新的容量订阅模式 今天,你用主机了吗?如果你刚刚用手机在网上买了东西,那么这笔购物交易的转账操作,极有可能就是在银行的.... 的头像 科技绿洲 发表于 06-08 10:45 • 242次 阅读 华为云桌面实现灵活云上办公、降本增效 近年来,各领域发布了数字化转型、数字经济和信息化的规划,推动软件及IT服务市场规模迅速扩大,不仅加速.... 的头像 科技绿洲 发表于 06-08 10:35 • 238次 阅读 subsync自动同步字幕和视频画面 ./oschina_soft/subsync.zip 发表于 06-07 15:06 • 11次 阅读 subsync自动同步字幕和视频画面 Pokemon-Terminal口袋妖怪主题终端 ./oschina_soft/Pokemon-Terminal.zip 发表于 06-07 14:48 • 7次 阅读 Pokemon-Terminal口袋妖怪主题终端 BlenderGIS链接Blender和地理数据的Blender插件 ./oschina_soft/BlenderGIS.zip 发表于 06-07 14:29 • 8次 阅读 BlenderGIS链接Blender和地理数据的Blender插件 QuickWall基于Python的壁纸更换软件 ./oschina_soft/QuickWall.zip 发表于 06-07 14:28 • 5次 阅读 QuickWall基于Python的壁纸更换软件 Interest.blog 基于Python Flask的技术博客 ./oschina_soft/interest.blog.zip 发表于 06-07 14:27 • 6次 阅读 Interest.blog 基于Python Flask的技术博客 中海达为防灾减灾救灾提供水文专业技术数据支撑 接到协助通知后,中海达四川分公司第一时间响应,一支由航测专员、海洋专员、技术人员组成的中海达应急队迅.... 的头像 科技绿洲 发表于 06-07 14:22 • 167次 阅读 arXiv2020-RIFE基于Python开发的视频插帧工具 ./oschina_soft/arXiv2020-RIFE.zip 发表于 06-07 14:17 • 9次 阅读 arXiv2020-RIFE基于Python开发的视频插帧工具 SemEval 2022: 多语种惯用语识别评测冠军系统简介 提交的系统使用XLM-RoBERTa作为编码器,在预处理过程中对训练数据的惯用语短语(MWE)进行特.... 的头像 深度学习自然语言处理 发表于 06-07 09:48 • 72次 阅读 启动数字化转型战略的初心是什么? 还是那句话,要牢记我们的初心。无论我们如何变革、如何转型,最终的目标是能更好地服务客户, 从而让企业.... 的头像 工业互联网前线 发表于 06-07 09:33 • 133次 阅读 python-bitcoinrpc比特币的JSON-RPC API的Python实现 python-bitcoinrpc.zip 发表于 06-06 16:36 • 6次 阅读 python-bitcoinrpc比特币的JSON-RPC API的Python实现 bitrade比特币交易机器人 bitrade.zip 发表于 06-06 16:34 • 8次 阅读 bitrade比特币交易机器人 pybitcoin比特币客户端的Python实现 pybitcoin.zip 发表于 06-06 16:32 • 4次 阅读 pybitcoin比特币客户端的Python实现 Caesure比特币服务器 caesure.zip 发表于 06-06 16:25 • 6次 阅读 Caesure比特币服务器 bitHopper比特币poolhopper bitHopper.zip 发表于 06-06 16:12 • 6次 阅读 bitHopper比特币poolhopper Blockstack Blockchain的DNS服务 stacks-blockchain.zip 发表于 06-06 15:22 • 8次 阅读 Blockstack Blockchain的DNS服务 维智科技升级发布时空AI平战结合疫情防控平台2.0 根据国家“疫情防控”最新要求,以坚持“科学精准、动态清零”总方针不动摇,以最快速度实现动态清零,尽量.... 的头像 科技绿洲 发表于 06-06 15:16 • 212次 阅读 bitcoin-python Bitcoin API的Python实现 bitcoin-python.zip 发表于 06-06 15:01 • 8次 阅读 bitcoin-python Bitcoin API的Python实现 【飞控开发基础教程6】疯壳·开源编队无人机-SPI(六轴传感器数据获取) COCOFLY教程——疯壳·无人机·系列SPI(六轴传感器数据获取)             &nb... 发表于 05-30 11:19 • 1434次 阅读 【飞控开发基础教程6】疯壳·开源编队无人机-SPI(六轴传感器数据获取) python学习框架介绍 对于爬虫初学者来说,弄清楚一个领域的知识体系往往比单纯学习某个技术要重要得多,因为技术总会跟随时代发生快速变化,而知识... 发表于 05-25 16:47 • 3309次 阅读 【开源分享】树莓PICO掌上电脑的通用Python教程 作者:Peter Misenko 树莓PICO掌上电脑的通用Python教程 我注意尽量减少外部组件,使用 PICO 板上集成的最大功... 发表于 05-18 17:41 • 10003次 阅读 【开源分享】树莓PICO掌上电脑的通用Python教程 爬虫进阶之提高爬虫效率的方式 相信来看这篇深造爬虫文章的同学,大部分已经对爬虫有不错的了解了,也在之前已经写过不少爬虫了,但我猜爬取的数据量都较小,因... 发表于 05-17 16:43 • 4546次 阅读 安装DevEco device tool打开VS找不到主页面的解决办法 本来发个贴,后来把标题的时候看到别人发的贴的经验贴推荐了,就解决了,所以我也来分分看一下。 原因:Python环境不玩。 解决... 发表于 05-13 10:22 • 451次 阅读 RK3399Pro上的Python api与RKNN C api推理速度一样吗 看了RK3399Pro的相关文档,感觉有两套API:一套是Toolkit的Python api,另一个是RKNN C api。这个理解对吗?另外想... 发表于 05-09 15:33 • 3432次 阅读 水滴摄影是如何实现的? 水滴摄影 摄影是一门通过探索和学习来灌输的艺术。数百次点击就能捕捉到一张完美的照片,摄影师脸上的满足感在眨眼之间就... 发表于 05-01 16:25 • 3528次 阅读 水滴摄影是如何实现的? Sipeed M2DOCK:全志V831 开源 人工智能 神经网络 视觉 AI Python开发板 作者@Sipeed 原文链接: 发表于 04-29 15:06 • 2481次 阅读 RKNN Toolkit Lite的使用与安装过程 RKNN Toolkit Lite 是 RKNN Toolkit 的精简版本,为用户提供在 PC、RK3399Pro、RK1808、RK1806、V1109、R... 发表于 04-27 18:36 • 3605次 阅读 python简单的获取基金信息 最近基金非常涨跌幅度蛮大的,很多原本不投资、不理财人,也开始讨论、参与买基金了。投资基金的人都知道根据投资对象的不同,... 发表于 04-27 16:43 • 5880次 阅读


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3