news 2026/4/29 18:12:26

【数据可视化实战】用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/18 17:40:36

Vue3基于OJ的Java课程实验课程作业管理系统的设计与实现(编号:98370330)

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

作者头像 李华
网站建设 2026/4/18 1:13:38

Vue3计算机学院校友信息活动网站的设计与实现(编号:66613294)

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

作者头像 李华
网站建设 2026/4/27 22:26:43

自动扫描器遗漏的手动SQL注入技巧

自动扫描器遗漏的关键漏洞 我们都经历过这样的事:找到一个参数,运行sqlmap,然后等待。如果终端显示“未发现漏洞”,我们就继续寻找下一个目标。 但扫描器是“愚蠢”的。 它们会忽略上下文。它们会被基本的过滤器阻挡。它们无法理解…

作者头像 李华
网站建设 2026/4/28 1:44:48

csp信奥赛C++标准模板库STL案例应用22

csp信奥赛C标准模板库STL案例应用22 next_permutation实践 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人…

作者头像 李华
网站建设 2026/4/26 4:43:03

Anaconda配置PyTorch环境时内存溢出怎么办?

Anaconda配置PyTorch环境时内存溢出怎么办? 在深度学习项目开发中,你是否曾遇到这样的场景:刚搭建好的Anaconda环境,一运行PyTorch训练脚本就报错“CUDA out of memory”?明明显卡有24GB显存,模型也不算特…

作者头像 李华
网站建设 2026/4/24 15:46:46

PyTorch-CUDA镜像能否用于文物数字化修复

PyTorch-CUDA镜像能否用于文物数字化修复 在敦煌莫高窟的数字化保护项目中,研究人员面对一幅120008000像素的唐代壁画扫描图——表面剥落、颜料褪色、裂缝纵横。传统人工修复需要数月时间,而团队希望借助AI实现快速补全。此时,一个关键问题浮…

作者头像 李华