可视化小作业

可视化小作业,第1张

可视化小作业 可视化小作业:制作动态折线图

选取的新冠肺炎疫情数据库地址:COVID-19-data: 新冠病毒感染人数统计数据

由于湖北省的感染人数远远高于其他省份,故此处选取了广东省作为其他省份的代表来做动态可视化,否则整个画面的底部的曲线会颜色过于复杂,而且提前利用静态折线图(如图)可以看出,除湖北省外,其他省市区的感染人数较少,感染人数增长趋势是相似的。为了画面的简洁,动态图的制作只采用湖北省和广东省(除湖北省外感染人数最多的省份)的数据。

 源代码如下,数据是用csv形式读取的,数据格式如图:

字段意思:time表示时间,price表示当日累计新增人数,quantity表示统计的第几天。 

#多个动态折线图
# -*- coding: utf-8 -*-
# """
#
# """
#
import numpy as np
import matplotlib
matplotlib.use('TkAgg')
matplotlib.rc("font", family='Microsoft YaHei')#family是设置的字体
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time





if __name__ == '__main__':
    oneFile = "data1.csv"
    # 广东省数据
    otherFile = "data2.csv"
    # 湖北省数据

    # print(1234567);
    oneFileData = pd.read_csv(OneFile)
    otherFileData = pd.read_csv(otherFile)
    OneFileData.info()  # 输出读入的csv数据的基本信息
    otherFileData.info()

# Fixing random state for reproducibility
np.random.seed(196)
data = OneFileData.price #读入广东省感染人数
data1 =  otherFileData.price #读入湖北省感染人数
xdata = np.arange(0, len(data))
print('xdata(x轴数据)',xdata)
print('data(y轴广东省数据)',data)
print('data(y轴湖北省数据)',data1)

# 初始数据绘图
dis = np.zeros(165)
diss = np.zeros(165)
dis2 = dis
diss2 = diss
fig, ax = plt.subplots()
line, = ax.plot(dis)
lines, = ax.plot(diss)
ax.set_ylim(0, 2000)
ax.legend(handles=[line,lines],labels=["广东省感染人数","湖北省感染人数"],loc="lower right",fontsize=6)
plt.grid(True)
ax.set_ylabel("感染人数/人")
ax.set_xlabel("统计时间/第X天")
ax.set_title("2020年1月20日至2020年7月02日 湖北省和广东省感染新冠肺炎人数趋势图")


def update(frame):
    global dis
    global dis2
    global line
    # 读入模拟
    a = frame
    time.sleep(np.random.rand() / 10)
    # 绘图数据生成
    dis[0:-1] = dis2[1:]
    dis[-1] = a
    dis2 = dis
    # 绘图
    line.set_ydata(dis)
    # 颜色设置
    plt.setp(line, 'linewidth', 2.0)
    return line


def update1(frame1):
    global diss
    global diss2
    global lines
    # 读入模拟
    b = frame1
    time.sleep(np.random.rand() / 10)
    # 绘图数据生成
    diss[0:-1] = diss2[1:]
    diss[-1] = b
    diss2 = diss
    # 绘图
    lines.set_ydata(diss)
    # 颜色设置
    plt.setp(line,  'linewidth', 2.0)
    return lines

ani = animation.FuncAnimation(fig, update, frames=data, interval=120)
ani1 = animation.FuncAnimation(fig, update1, frames=data1, interval=120)

plt.show()

最终效果图

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5721340.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存