用python畫新型冠狀病毒病例曲線圖
地圖的畫,因爲要下載地圖工具包,所以沒去深入學習。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
功能:用python畫新型冠狀病毒病例曲線圖
環境:python3.7
日期:2020/2/8 21:20
作者:指尖魔法師
版本:1.0
"""
import requests, json
from matplotlib import pyplot as plt
from matplotlib import font_manager
import time
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=&_=%d' % int(time.time()*1000)
def chinaDayList():
"""中國每日數據"""
global url
date_list = list()
confirm_list =list()
suspect_list = list()
dead_list = list()
heal_list = list()
deadRate_list =list()
healRate_list = list()
jsondata = json.loads(requests.get(url).json()['data'])
# print(jsondata['chinaDayList'])
for daydata in jsondata['chinaDayList']:
# print(daydata)
date_list.append(daydata['date'])
confirm_list.append(daydata['confirm'])
suspect_list.append(daydata['suspect'])
dead_list.append(daydata['dead'])
heal_list.append(daydata['heal'])
deadRate_list.append(float(daydata['deadRate']))
healRate_list.append(float(daydata['healRate']))
return date_list, confirm_list, suspect_list, dead_list, heal_list, deadRate_list, healRate_list
def catch_provincedata():
"""獲取中國每個省份確診數據"""
global url
data = dict()
jsondata = json.loads(requests.get(url).json()['data'])
# 中國各省份
provinces = jsondata['areaTree'][0]['children']
for province in provinces:
data.update({province['name']: province['total']['confirm']})
return data
def draw_perday_confirm_suspect(date_list, confirm_list, suspect_list):
"""繪製確診和疑似人數趨勢圖"""
# 設置字體
my_font = font_manager.FontProperties('Microsoft YaHei', size=14)
# 設置圖形大小
plt.figure(figsize=(12, 8))
# 繪製圖表
plt.plot(date_list, confirm_list, label='確診人數')
plt.plot(date_list, suspect_list, label='疑似人數')
plt.scatter(date_list, confirm_list)
plt.scatter(date_list, suspect_list)
# 設置X軸刻度
x = date_list
xtick_labels = date_list
plt.xticks(x, xtick_labels, rotation=45)
# 添加描述信息
plt.xlabel("日期", fontproperties=my_font)
plt.ylabel("人數", fontproperties=my_font)
plt.title("2019-nCoV每日累計確診和疑似人數趨勢圖", fontproperties=my_font)
# 顯示輔助網格
plt.grid(alpha=0.4)
# 添加圖例
plt.legend(prop=my_font)
plt.savefig('./2019-nCoV每日累計確診和疑似人數趨勢圖.png')
plt.show()
def draw_perday_dead_heal(date_list, dead_list, heal_list):
"""繪製治癒和死亡人數趨勢圖"""
# 設置字體
my_font = font_manager.FontProperties('Microsoft YaHei', size=14)
# 設置圖形大小
plt.figure(figsize=(12, 8))
# 繪製圖表
plt.plot(date_list, dead_list, label='死亡人數')
plt.plot(date_list, heal_list, label='治癒人數')
plt.scatter(date_list, dead_list)
plt.scatter(date_list, heal_list)
# 設置X軸刻度
x = date_list
xtick_labels = date_list
plt.xticks(x, xtick_labels, rotation=45)
# 添加描述信息
plt.xlabel("日期", fontproperties=my_font)
plt.ylabel("人數", fontproperties=my_font)
plt.title("2019-nCoV每日死亡和治癒人數趨勢圖", fontproperties=my_font)
# 顯示輔助網格
plt.grid(alpha=0.4)
# 添加圖例
plt.legend(prop=my_font)
plt.savefig('./2019-nCoV每日死亡和治癒人數趨勢圖.png')
plt.show()
def draw_perday_deadRate_healRate(date_list, deadRate_list, healRate_list):
"""繪製治癒率和死亡率對比趨勢圖"""
# 設置字體
my_font = font_manager.FontProperties('Microsoft YaHei', size=14)
# 設置圖形大小
plt.figure(figsize=(12, 8))
# 繪製圖表
plt.plot(date_list, deadRate_list, label='死亡率')
plt.plot(date_list, healRate_list, label='治癒率')
plt.scatter(date_list, deadRate_list)
plt.scatter(date_list, healRate_list)
# 設置X軸刻度
x = date_list
xtick_labels = date_list
plt.xticks(x, xtick_labels, rotation=45)
y = [i for i in range(int(max(deadRate_list+healRate_list)+2))]
ytick_labels = ["{}%".format(i) for i in range(int(max(deadRate_list+healRate_list)+2))]
plt.yticks(y, ytick_labels)
# 添加描述信息
plt.xlabel("日期", fontproperties=my_font)
plt.ylabel("百分比", fontproperties=my_font)
plt.title("2019-nCoV每日死亡率和治癒率對比趨勢圖", fontproperties=my_font)
# 顯示輔助網格
plt.grid(alpha=0.4)
# 添加圖例
plt.legend(prop=my_font)
plt.savefig('./2019-nCoV每日治癒率和死亡率對比趨勢圖.png')
plt.show()
if __name__=="__main__":
# 獲取每日數據
date_list, confirm_list, suspect_list, dead_list, heal_list, deadRate_list, healRate_list = chinaDayList()
# 繪製確診和疑似人數趨勢圖
draw_perday_confirm_suspect(date_list, confirm_list, suspect_list)
# 繪製治癒和死亡人數趨勢圖
draw_perday_dead_heal(date_list, dead_list, heal_list)
# 繪製治癒率和死亡率對比趨勢圖
draw_perday_deadRate_healRate(date_list, deadRate_list, healRate_list)