中美疫情对比 - 折线图动画
前言
初始数据来自于“丁香园”(20年到目前为为止)丁香园网址
提示:以下是本篇文章正文内容,下面案例可供参考
1.导入相应的库
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
2. 数据准备
2.1 加载数据
datas = pd.read_csv('./.currentConfirmedCount.csv')
2.2 准备折线图所需要的数据
a.日期, 作为横轴的刻度
x_ticks = datas.dateId.values
b. x轴数据
x = list(range(x_ticks.shape[0]))
c. 中国现有确诊人数
美国现有确诊人数
china = datas['中国'].values
usa = datas['美国'].values
3. 创建画布
3.1 制定画布大小及清晰度
fig = plt.figure(figsize=(10, 6), dpi=100)
4. 初始化折线图和坐标轴的范围与刻度
4.1定义变量,用于记录每一帧折线图显示的数据条数
line_range = 8
4.2定义变量,用于记录每一帧x显示的刻度数量
xticks_range = 10
4.3创建中美折线图对象
china_line, = plt.plot([], [], color='r', marker='o', label='中国')
usa_line, = plt.plot([], [], color='g', marker='*', label='美国')
4.4显示图例
plt.legend()
4.5设置x轴,y轴的显示范围以及x轴刻度
plt.ylim(0, 12000)
plt.xlim(0, line_range)
plt.xticks(x[0:xticks_range], x_ticks[0:xticks_range])
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来显示正常中文标签,防止乱码
5. 实现动画更新方法
def update(i):
# 5.1更新折线图的数据
start = 0 if i - line_range + 1 < 0 else i - line_range + 1
end = i + 1
china_line.set_data(x[start:end],china[start:end])
usa_line.set_data(x[start:end], usa[start:end])
#5.2设置x轴的范围和刻度
if i>=line_range:
xticks_end = end + (xticks_range-line_range) if end + (xticks_range-line_range)<len(x) else len(x)
#更新x轴范围
plt.xlim(start,xticks_end)
# 更新x轴刻度
plt.xticks(x[start:xticks_end],x_ticks[start:xticks_end])
return china_line,usa_line
6.创建动画对象并展示
animation = FuncAnimation(fig,update,frames=x,repeat=False)
plt.show()
总代码如下`:
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 1.准备数据
# 2.加载数据
datas = pd.read_csv('./.currentConfirmedCount.csv')
x_ticks = datas.dateId.values
x = list(range(x_ticks.shape[0]))
china = datas['中国'].values
usa = datas['美国'].values
# 3.创建画布
fig = plt.figure(figsize=(10, 6), dpi=100)
line_range = 8
xticks_range = 10
china_line, = plt.plot([], [], color='r', marker='o', label='中国')
usa_line, = plt.plot([], [], color='g', marker='*', label='美国')
plt.legend()
plt.ylim(0, 12000)
plt.xlim(0, line_range)
plt.xticks(x[0:xticks_range], x_ticks[0:xticks_range])
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来显示正常中文标签,防止乱码
# 5.实现动画的更新方法
def update(i):
start = 0 if i - line_range + 1 < 0 else i - line_range + 1
end = i + 1
china_line.set_data(x[start:end],china[start:end])
usa_line.set_data(x[start:end], usa[start:end])
if i>=line_range:
xticks_end = end + (xticks_range-line_range) if end + (xticks_range-line_range)<len(x) else len(x)
plt.xlim(start,xticks_end)
plt.xticks(x[start:xticks_end],x_ticks[start:xticks_end])
return china_line,usa_line
# 6.创建动画对象
animation = FuncAnimation(fig,update,frames=x,repeat=False)
plt.show()
7.结果展示
(结果应该为动态图,只截取了其中一个画面)
加油喔
如果本文对你有帮助,记得点赞哟,你的支持,也是对我最大的鼓励
如果有不足之处可以在评论区留言指正,我会在看到的第一时间修正