用python畫新型冠狀病毒病例曲線圖

 用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)

 

 

發佈了37 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章