Python 动态图表制作指南:基于 Matplotlib FuncAnimation
在数据科学和可视化领域,静态图表往往难以充分展示随时间变化的趋势。动态图表能够通过动画形式直观地呈现数据的演变过程,帮助受众更深刻地理解数据背后的逻辑。本文将系统讲解如何使用 Python 的 Matplotlib 库及其扩展模块 FuncAnimation 来制作线型图、条形图和饼图的动态效果。
核心原理与前置知识
Matplotlib 是 Python 中最流行的开源绘图库,支持生成直方图、功率谱、条形图、散点图等。其 animation 模块提供了强大的动画功能,核心类为 FuncAnimation。
FuncAnimation 的工作原理类似于一个 While 循环:它会在指定的时间间隔内反复调用用户定义的更新函数(update function),在画布上重新绘制目标数据,从而形成动画效果。主要参数包括:
fig: 用于绘制图表的 Figure 对象。func: 以帧索引或时间为输入的更新函数。interval: 帧之间的间隔延迟,单位为毫秒,默认值为 200。
环境准备
确保已安装必要的依赖库:
pip install matplotlib pandas numpy
数据预处理
为了演示动态效果,我们需要一组随时间变化的数据。本例将使用全球传染病传播数据(COVID-19 死亡人数)作为案例。首先加载数据并进行清洗,提取特定国家的数据并转换为适合可视化的格式。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置中文字体显示,避免乱码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
url = '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, ], inplace=)
df1 = df_interest.transpose()
df1 = df1.drop([, , , ])
df1 = df1.loc[(df1 != ).()]
df1.index = pd.to_datetime(df1.index)


