Python项目——疫情可视化案例

中美疫情对比 - 折线图动画


前言

初始数据来自于“丁香园”(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.结果展示

(结果应该为动态图,只截取了其中一个画面)
结果展示


加油喔

如果本文对你有帮助,记得点赞哟,你的支持,也是对我最大的鼓励
如果有不足之处可以在评论区留言指正,我会在看到的第一时间修正

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值