使用 Matplotlib 这么久,竟不知道数据可以动起来

用Matplotlib,妈妈再也不担心我没有表情包斗图了 全文共3003字,预计学习时长6分钟 Netflix、Instagram、YouTube、电影还有电视剧,这些都有什么共同之处呢?它们都是视觉媒介,吸引着形形色色的观众。 今时今日,大部分人逐渐放弃读书、听书的方式,而选择观看电影、电视剧去了解一个故事。也许有人持不同意见,认为人们还未曾放弃书籍,但认清这现实吧——喜爱看电影的人要比爱读书的人多得多。 以上讨论了视觉成为当下重要沟通... 阅读详情

作者:Costas Andreou

机器之心编译

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

数据暴增的年代,数据科学家、分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人。如何让目标听众更直观地理解?当然是将数据可视化啊,而且最好是动态可视化。

本文将以线型图、条形图和饼图为例,系统地讲解如何让你的数据图表动起来。

这些动态图表是用什么做的?

接触过数据可视化的同学应该对 Python 里的 Matplotlib 库并不陌生。它是一个基于 Python 的开源数据绘图包,仅需几行代码就可以帮助开发者生成直方图、功率谱、条形图、散点图等。这个库里有个非常实用的扩展包——FuncAnimation,可以让我们的静态图表动起来。

FuncAnimation 是 Matplotlib 库中 Animation 类的一部分,后续会展示多个示例。如果是首次接触,你可以将这个函数简单地理解为一个 While 循环,不停地在 “画布” 上重新绘制目标数据图。

如何使用 FuncAnimation?

这个过程始于以下两行代码:

import matplotlib.animation as ani

animator = ani.FuncAnimation(fig, chartfunc, interval = 100)

从中我们可以看到 FuncAnimation 的几个输入:

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

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

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

这是三个关键输入,当然还有更多可选输入,感兴趣的读者可查看原文档,这里不再赘述。

下一步要做的就是将数据图表参数化,从而转换为一个函数,然后将该函数时间序列中的点作为输入,设置完成后就可以正式开始了。

在开始之前依旧需要确认你是否对基本的数据可视化有所了解。也就是说,我们先要将数据进行可视化处理,再进行动态处理。

按照以下代码进行基本调用。另外,这里将采用大型流行病的传播数据作为案例数据(包括每天的死亡人数)。

import matplotlib.animation as ani
import matplotlib.pyplot as plt
import numpy as np
import pandas as pdurl = '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(['United Kingdom', 'US', 'Italy', 'Germany'])
    & df['Province/State'].isna()]df_interest.rename(
    index=lambda x: 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)

绘制三种常见动态图表

绘制动态线型图

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

import numpy as np
import matplotlib.pyplot as pltcolor = ['red', 'green', 'blue', 'orange']
fig = plt.figure()
plt.xticks(rotation=45, ha="right", rotation_mode="anchor") #rotate the x-axis values
plt.subplots_adjust(bottom = 0.2, top = 0.9) #ensuring the dates (on the x-axis) fit in the screen
plt.ylabel('No of Deaths')
plt.xlabel('Dates')

接下来设置 curve 函数,进而使用 .FuncAnimation 让它动起来:

def buildmebarchart(i=int):
    plt.legend(df1.columns)
    p = plt.plot(df1[:i].index, df1[:i].values) #note it only returns the dataset, up to the point i
    for i in range(0,4):
        p[i].set_color(color[i]) #set the colour of each curveimport matplotlib.animation as ani
animator = ani.FuncAnimation(fig, buildmebarchart, interval = 100)
plt.show()

动态饼状图

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

import numpy as np
import matplotlib.pyplot as pltfig,ax = plt.subplots()
explode=[0.01,0.01,0.01,0.01] #pop out each slice from the piedef getmepie(i):
    def absolute_value(val): #turn % back to a number
        a  = np.round(val/100.*df1.head(i).max().sum(), 0)
        return int(a)
    ax.clear()
    plot = df1.head(i).max().plot.pie(y=df1.columns,autopct=absolute_value, label='',explode = explode, shadow = True)
    plot.set_title('Total Number of Deaths\n' + str(df1.index[min( i, len(df1.index)-1 )].strftime('%y-%m-%d')), fontsize=12)import matplotlib.animation as ani
animator = ani.FuncAnimation(fig, getmepie, interval = 200)
plt.show()

主要区别在于,动态饼状图的代码每次循环都会返回一组数值,但在线型图中返回的是我们所在点之前的整个时间序列。返回时间序列通过 df1.head(i) 来实现,而. max()则保证了我们仅获得最新的数据,因为流行病导致死亡的总数只有两种变化:维持现有数量或持续上升。

df1.head(i).max()

动态条形图

创建动态条形图的难度与上述两个案例并无太大差别。在这个案例中,作者定义了水平和垂直两种条形图,读者可以根据自己的实际需求来选择图表类型并定义变量栏。

fig = plt.figure()
bar = ''def buildmebarchart(i=int):
    iv = min(i, len(df1.index)-1) #the loop iterates an extra one time, which causes the dataframes to go out of bounds. This was the easiest (most lazy) way to solve this :)
    objects = df1.max().index
    y_pos = np.arange(len(objects))
    performance = df1.iloc[[iv]].values.tolist()[0]
    if bar == '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('Deaths per Country \n' + 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:\temp\myfirstAnimation.gif')

感兴趣的读者如想获得详细信息可参考:https://matplotlib.org/3.1.1/api/animation_api.html

原文链接:https://towardsdatascience.com/learn-how-to-create-animated-graphs-in-python-fce780421afe

- end -





用python使图形动起来? 数据暴增的年代,数据科学家、分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人。如何让目标听众更直观地理解?当然是将数据可视化啊,而且最好是动态可视化。 本文将以线型图、条形图和饼图为例,系统地讲解如何让你的数据图表动起来。 这些动态图表是用什么做的? 接触过数据可视化的同学应该对 Python 里的 Matplotlib 库并不陌生。它是一个基于 Python 的开源数据绘图包,仅需几行代码就可以帮助开发者生成直方图、功率谱、条形图、散点图等。这个库里有个非常实用的扩展包——Fu 阅读详情

相关推荐

Matplotlib下载、安装、简单使用

Matplotlib Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案,也可用于Python脚本,Python和IPython (opens new window)Shell、Jupyter (opens new window)笔记本,Web应用程序服务器和 图形用户界面工具包.(PyQt、wxPython、PyGObject、PyGTK、PySide、Tkinter)。

CJW的博客 8万+

用Python代码画出灰太狼

用python代码画出灰太狼,仅使用turtle库。

qq_54434938的博客 2067

08爬取PPT模板.py

利用Python爬虫爬取PPT模板 用xpath进行数据解析,只是一个小爬虫,作为自己学习爬虫的一个记录而已,无其他用途

史上最全的Python操作 “PPT” 文档大全,以后写“数据分析报告”靠她了!

↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析简说Python严选来源:数据分析与统计学之美 作者:黄伟呢Oneoldw...

简说Python的博客 3471

英飞凌TC3xx实战:PWM中点触发ADC采集+DMA自动搬运完整配置流程(基于ILLD库)

本文详细介绍了在英飞凌TC3xx系列微控制器上使用ILLD库实现PWM中点触发ADC采集并通过DMA自动搬运数据的完整配置流程。该方案适用于电机控制、电源管理等需要高精度定时采集的场景,通过GTM生成PWM信号、ADC采集和DMA传输实现全硬件自动化流程,显著提升系统效率。

weixin_42536058的博客 535

小白 虚拟机 kali_Linux安装 详细教程

安装版本:VMmare workstation pro kali_Linux 安装环境:Window10 首先我们先了解一下什么是kali_linux: Kali Linux是基于Debian的Linux发行版, 设计用于数字取证操作系统。每一季度更新一次。由Offensive Security Ltd维护和资助。最先由Offensive Security的Mati Aharoni和Devon Kearns通过重写BackTrack来完成,BackTrack是他们之前写的用于取证的Linux发行

m0_50917178的博客 9万+

通过Python的pptx库操作ppt-替换文本和图片-批量生成任意自定义图片

这是一个全部的脚本,我们知道,ppt有很多个模板,每个模板都有自己设计的精美的样式。那么,如果我们可以替换里面的文字和图片,并保留之前的精美的样式。结合市面上各种精美的ppt模板,就可以通过程序批量生成任何想要的精美图片了。有了图片可以批量根据这些图片生成视频。用于各种自媒体操作。最后的最后由本人水平所限,难免有错误以及不足之处, 屏幕前的靓仔靓女们 如有发现,恳请指出!你轻轻地点了个赞,那将在我的心里世界增添一颗明亮而耀眼的星!

编辑编辑器 4092

第八章 MobileNetv3网络详解

本文介绍了基于互补的搜索技术和新颖的架构设计的MobileNets的下一代。MobileNetV3通过硬件感知网络架构搜索(NAS)和NetAdapt算法相结合,针对移动电话CPU进行优化,随后通过新颖的架构改进技术进行了进一步提高。本文开始探索自动化搜索算法和网络设计如何相互协作,以利用互补的方法改进整体技术水平。通过此过程,我们创建了两个新的MobileNet模型:MobileNetV3-Large和MobileNetV3-Small,分别针对高资源和低资源使用情况。

ADICDFHL的博客 1万+

【matplot】matplot 坐标轴标签旋转后依然重叠

ha。

u014088048的博客 645

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

如何在 Windows 11 上安装 ChatGPT:CMD + 图形界面两种方式

我没说在 Windows 11 上装 ChatGPT 应用有多难,但你要是知道有哪几种官方途径可用,事情就会顺一点,尤其是对新手。对大多数用户来说,商店应用就是正确的选择。如果你在受管理的设备上,或者想避开商店,那么通过 Edge 或 Chrome 装 PWA 是完全站得住脚的替代方案。不管你选哪条路,真正的收获都是把 ChatGPT 从浏览器标签页里挪出来,放进一个它真正像个工具的地方。把它固定到任务栏、配好 Alt + 空格,你就会纳闷以前没它是怎么干活的。

山岚的运维笔记 302

如何用 Python 让你的 PPT 数据动起来?

点击上方“编程派”,选择设为“设为星标”优质文章,第一时间送达!作者:Costas Andreou机器之心编译参与:Jamin、张倩在读技术博客的过程中,我们会发现那些能够把知识、成果讲...

codingpy的博客 1785

【HALCON 25.11 + C#】 01:2026年工业机器视觉实战详解(从入门到精通)

2026年机器视觉市场规模将突破230亿美元,HALCON 25.11的革命性更新与C#的工业集成优势形成黄金技术栈。本文作为付费专栏开篇序章,聚焦“为什么现在必须学25.11+C#”的核心问题,通过真实工业案例、五项核心技术突破、联合编程架构优势及30篇系统学习路线,全方位论证其投资价值。读者将掌握持续学习、深度OCR加速等关键技能,获得可直接上产线的工业级代码资产与架构设计思维,解决柔性生产、边缘部署等核心痛点,成为具备技术溢价的机器视觉工程师。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1230

matplotlib实现数据可变_使用 Matplotlib 这么久,竟不知道数据可以动起来

作者:Costas Andreou机器之心编译在读技术博客的过程中,我们会发现那些能够把知识、成果讲透的博主很多都会做动态图表。他们的图是怎么做的?难度大吗?这篇文章就介绍了 Python 中一种简单的动态图表制作方法。数据暴增的年代,数据科学家、分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人。如何让目标听众更直观地理解?当然是将数据可视化啊,而且最好是动态可视化。本文...

weixin_39631316的博客 127

PPT里文字太多如何排版-一口气教你7种布局瞬间让PPT高大上起来

PPT里全是文字且很拥挤怎么办?本篇教你使用7种不同的排版让你的PPT瞬间变得高大上起来。

打造全国最全的AI Agent开发知识领域的博客 5026

Matlab之机载雷达系统中的空时自适应处理(STAP)技术(附源码)

在第一个脉冲期间,天线 1 通过天线 N-1 接收的杂波返回与第二个脉冲期间天线 2 通过天线 N 接收的杂波返回相同。该算法可能需要搜索角度和多普勒的所有组合来定位目标,但对于示例,由于确切知道目标的位置,因此可以将处理器定向到该点。然而,接收到的信号不仅包含来自目标的反射回波,还包含来自被照亮地表的回波。然而,由于干扰器的白噪声性质,接收到的干扰信号占据了整个多普勒频段。在以下部分中,您将模拟来自目标、杂波和干扰器的返回,并说明 STAP 技术如何过滤来自接收信号的干扰。假设元件间距是波形波长的一半。

珞瑜的博客 7140

让 Matplotlib、seaborn 静态数据图动起来

继上一篇介绍如何使用matplotlib.pyplot实现实时数据动态显示后,这一篇将介绍如何让 Matplotlib、Seaborn 的静态数据图动起来。

艽野尘梦的博客 255

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

使用matplotlib让你的数据更加生动(三)

1 引言 在上一节中我们介绍了使用matplotlib进行数据可视化的几种表现方法,包括折线图、散点图、饼状图以及柱状图等, 今天我们来继续学习matplotlib的高级用法,主要包括网络图,流动图以及圆弧图,那么我们开始吧。。。 2 网络图 分散式网络: 中心化网络和分布式网络的混合体,在这种类型的网络中,少量节点的攻击会降低或破坏整个网络系统的性能. 分布式网络: 分布式网络具有抵御攻击的能力,即使在攻击后部分节点无法对网络作出贡献后,该网络仍将继续运行。这与中心化网络不同,中心化网络在中心节点受到攻

sgzqc的专栏 7278

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

如何使用 matplotlib 在 Python 3 中绘制数据

Python 在处理数据方面非常出色。通常,数据集会包括多个变量和许多实例,这使得很难理解数据的情况。数据可视化是帮助您识别数据模式的一种有用方式。例如,假设您是一名房地产经纪人,您想要了解房屋的年龄与售价之间的关系。如果您的数据包括 5 栋房屋的数据,那么理解情况就不会太困难。但是,假设您想要使用整个镇上 500 栋房屋的数据,那么理解年龄如何影响价格就会变得非常困难。通过绘制售价与年龄的关系,对数据进行可视化肯定会阐明这两者之间的关系。

rubys007的博客 2063

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何让 Matplotlib、Seaborn 数据图动起来?

作者 |pythonic生物人来源丨pythonic生物人本文介绍如何让Matplotlib、Seaborn的静态数据图动起来,变得栩栩如生。Matplotlib效果图主要使用matplotlib.animation.FuncAnimation,上核心代码:#定义静态绘图函数 defdraw_barchart(year): dff=df[df['year...

AI科技大本营 617

让 Matplotlib静态数据图动起来

代码实现了如下功能:定义静态图形绘制函数,该函数用于绘制动态绘图中的一个帧,该函数基于传入的随机数种子计算1000个随机数的均值,并将其绘制在一个柱状图中。然后使用matplotlib.animation.FuncAnimation让静态图动起来,其基于传入参数,依次绘制动画的每一帧图形,然后联合成动画效果。这里我们让其绘制分别以1-50为随机数种子得到的柱状图。,使用matplotlib绘制动画,由于代码只展示了核心部分,数据也没有共享,本篇文章提供一个可直接运行的示例,以供读者测试。

艽野尘梦的博客 543

python-Matplotlib画图那些你不知道的事

Matplotlib画图之添加箭头、中文、坐标点;等高线,3D图形。

qq_47326711的博客 2202

使用matplotlib让你的数据更加生动(一)

1 引言 Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。 本文就日常生活中常见的业务场景进行展开讨论,更详尽的说明可以参考文档。 2 折线图 折线图(line chart)是我们日常工作、学习中经常使用的一种图表,它可以直观的反映数据的变化趋势。 可视化结果: 直线:左上直

sgzqc的专栏 3492

如何使用Python语言将测量数据曲线动起来? matplotlib转换成 GIF文件

微信公众号里的动图 在前天推文“狗追鸭子”留言中,有同学学问推文中的动图是如何制作的。 关于动图的制作方法,在公众号里大家输入 动图? 便可以查询到原来的说明。 推文中的动图是通过数据采集系统,包括可以读取数值的数字万用表、数字示波器、数字频谱仪以及特制的数据采集板卡等来采集。然后通过python语言绘制产生相应的动图。动图的风格包括以下两种: (1)动态信号波形 仿照示波器显示波形的形式,将连续...

TSINGHUAJOKING 2354
上一篇: Python玩转PDF文档的各种实用操作
下一篇: 无监督方法实现C++、Java、Python 代码转换,程序员:出了bug怎么办,两种语言都要看吗?...
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值