news 2026/4/18 3:21:23

【数据可视化实战】用Matplotlib绘制动态疫情趋势图:从数据到故事

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【数据可视化实战】用Matplotlib绘制动态疫情趋势图:从数据到故事

一、项目背景与目标

在《数据可视化》课程中,我们学习了如何将枯燥的数据转化为直观的图表。本次实战项目,我将使用Python的Matplotlib库,结合真实疫情数据(模拟),绘制一个随时间变化的动态折线图,展示多个地区的疫情趋势对比。

通过这个项目,你将学会:

  • 如何使用Matplotlib绘制动态图表

  • 如何美化图表,增强可读性

  • 如何将数据故事化,提升可视化表达力

二、环境准备与数据模拟

我们使用以下库:

  • matplotlib用于绘图

  • numpy用于生成模拟数据

  • pandas用于数据处理

为了模拟真实数据,我生成了2023年1月至12月三个地区(北京、上海、广州)的每月新增确诊数据:

import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 生成模拟数据 months = np.arange(1, 13) beijing = np.random.randint(50, 200, size=12) shanghai = np.random.randint(30, 180, size=12) guangzhou = np.random.randint(20, 150, size=12) df = pd.DataFrame({ 'Month': months, 'Beijing': beijing, 'Shanghai': shanghai, 'Guangzhou': guangzhou }) print(df.head())

三、绘制静态趋势图

在绘制动态图之前,我们先绘制一张静态的多线图,用于对比三个地区的趋势:

plt.figure(figsize=(10, 6)) plt.plot(df['Month'], df['Beijing'], marker='o', label='Beijing', linewidth=2) plt.plot(df['Month'], df['Shanghai'], marker='s', label='Shanghai', linewidth=2) plt.plot(df['Month'], df['Guangzhou'], marker='^', label='Guangzhou', linewidth=2) plt.title('Monthly New Cases in Three Cities (2023)', fontsize=16, fontweight='bold') plt.xlabel('Month', fontsize=12) plt.ylabel('New Cases', fontsize=12) plt.legend() plt.grid(True, linestyle='--', alpha=0.6) plt.xticks(df['Month']) plt.tight_layout() plt.savefig('static_trend.png', dpi=300) plt.show()

https://via.placeholder.com/800x400/4CAF50/FFFFFF?text=Static+Chart+Example
(此处为示意图,实际运行时将生成真实图表)

四、进阶:绘制动态趋势图

接下来是本次项目的核心:动态绘制每条折线的增长过程。我们将使用Matplotlib的动画模块:

fig, ax = plt.subplots(figsize=(10, 6)) ax.set_xlim(1, 12) ax.set_ylim(0, 250) ax.set_title('Dynamic Trend of New Cases (2023)', fontsize=16, fontweight='bold') ax.set_xlabel('Month') ax.set_ylabel('New Cases') ax.grid(True, linestyle='--', alpha=0.6) lines = [] colors = ['#FF6B6B', '#4ECDC4', '#45B7D1'] labels = ['Beijing', 'Shanghai', 'Guangzhou'] for i, col in enumerate(['Beijing', 'Shanghai', 'Guangzhou']): line, = ax.plot([], [], marker='o', color=colors[i], label=labels[i], linewidth=2) lines.append(line) def init(): for line in lines: line.set_data([], []) return lines def update(frame): for i, col in enumerate(['Beijing', 'Shanghai', 'Guangzhou']): lines[i].set_data(df['Month'][:frame+1], df[col][:frame+1]) ax.legend() return lines ani = FuncAnimation(fig, update, frames=len(df), init_func=init, blit=True, interval=500) plt.tight_layout() ani.save('dynamic_trend.gif', writer='pillow') plt.show()

https://via.placeholder.com/800x400/2196F3/FFFFFF?text=Dynamic+GIF+Example
(实际运行动画将保存为GIF文件)

五、可视化优化与故事表达

5.1 为什么选择动态图表?

静态图表适合呈现完整趋势,而动态图表能更好地展示时间序列的变化过程,增强叙事感。尤其在数据汇报或教学演示中,动态图表更能吸引注意力。

5.2 美化建议

  • 颜色选择:使用对比明显且舒适的色系(如我使用的三种色调)

  • 标签与标题:标题要简洁有力,坐标轴标签要清晰

  • 图例位置:避免遮挡数据,通常放在右上角或下方

  • 网格线:使用浅色虚线,增强可读性但不喧宾夺主

5.3 数据故事化

在博客或报告中,可以这样描述:

“从动态图中可以看出,北京在春季(3-4月)出现一波小高峰,随后趋于平稳;上海整体波动较小;广州则在夏季(7-8月)有所上升。整体来看,三地疫情趋势均呈波动下降态势。”


六、总结与心得

通过本次实战,我深刻体会到数据可视化不仅是“画图”,更是“讲故事”。Matplotlib虽然入门简单,但其动态功能、样式配置都非常强大,适合做科研、教学、汇报等多种场景的可视化。

如果你也想快速上手数据可视化,推荐以下资源:

  • Matplotlib官方教程

  • Python数据可视化实战案例合集(GitHub)

  • 课程教材:《Python数据可视化之美》(张杰著)


七、完整代码与数据

你可以在我的GitHub仓库中获取本次项目的完整代码、模拟数据与生成图表
🔗 https://github.com/lzzy-yc-3181/DataViz-Dynamic-Trend

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 21:00:14

Anaconda清理缓存释放空间:加快PyTorch环境创建

Anaconda清理缓存释放空间:加快PyTorch环境创建 在深度学习开发中,一个看似不起眼的操作——创建和删除 Conda 环境,可能正悄悄吞噬你宝贵的 SSD 空间。尤其是当你频繁测试不同版本的 PyTorch、CUDA 或尝试各种依赖组合时,你会发现…

作者头像 李华
网站建设 2026/4/18 3:26:57

Vue3基于springboot校园兼职学生服务平台的设计与实现(编号:918933100)

目录 已开发项目效果实现截图关于博主开发技术介绍 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 已…

作者头像 李华
网站建设 2026/4/18 3:25:46

python基于联盟链的农产品农药商城溯源系统vue

目录已开发项目效果实现截图关于博主开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!已开发项目效果实现截图 同行可拿货,招校园代理 ,本人源头供货商 python基于联盟链的农产品农药商城溯…

作者头像 李华
网站建设 2026/4/18 3:28:21

PyTorch-CUDA-v2.7镜像在智慧路灯控制中的实践

PyTorch-CUDA-v2.7镜像在智慧路灯控制中的实践智慧城市边缘计算的新挑战 当一座城市的路灯不再只是“亮”与“灭”的简单切换,而是能感知行人、识别车流、自适应调节亮度时,我们其实已经站在了边缘智能的临界点上。近年来,随着AI算法能力的跃…

作者头像 李华
网站建设 2026/4/17 14:37:40

GitHub星标10k+的PyTorch项目都在用这款基础镜像

GitHub星标10k的PyTorch项目都在用这款基础镜像 在深度学习的世界里,最让人头疼的往往不是模型调参,而是环境配置。你有没有经历过这样的场景:论文复现到一半,发现本地 PyTorch 和 CUDA 版本不匹配;或者刚写完训练脚本…

作者头像 李华
网站建设 2026/4/18 3:31:14

AES加密存储与大文件分片上传结合的解决方案

这篇文章介绍了Asp.Net上传文件并配置可上传大文件的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 ASP.NET 包含两个控件可以使用户向网页服务器上传文件。一旦服务器接受了上传的文件数据&…

作者头像 李华