欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

可视化小作业

时间:2023-08-19
可视化小作业:制作动态折线图

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

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

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

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

#多个动态折线图# -*- coding: utf-8 -*-# """## """#import numpy as npimport matplotlibmatplotlib.use('TkAgg')matplotlib.rc("font", family='Microsoft YaHei')#family是设置的字体import pandas as pdimport matplotlib.pyplot as pltimport matplotlib.animation as animationimport timeif __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 reproducibilitynp.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 = disdiss2 = dissfig, 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 linedef 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 linesani = animation.FuncAnimation(fig, update, frames=data, interval=120)ani1 = animation.FuncAnimation(fig, update1, frames=data1, interval=120)plt.show()

最终效果图

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。