使用Python绘制新型冠状肺炎全国增长趋势图

  截至1月28日24时,国家卫生健康委收到31个省(区、市)累计报告确诊病例5974例,现有重症病例1239例,累计死亡病例132例,累计治愈出院103例。现有疑似病例9239例。目前累计追踪到密切接触者65537人,当日解除医学观察1604人,现有59990人正在接受医学观察。累计收到港澳台地区通报确诊病例:香港特别行政区8例,澳门特别行政区7例,台湾地区8例。

  本次采用Matplotlib库,pandas 库,Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib可用于Python脚本,Python和IPython Shell、Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

  Matplotlib 尝试使容易的事情变得更容易,使困难的事情变得可能。您只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。更多的示例,请参见基础绘图例子和示例陈列馆。

  为了简单绘图,该 pyplot 模块提供了类似于MATLAB的界面,尤其是与IPython结合使用时。对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组功能来完全控制线型,字体属性,轴属性等。

  在绘图结构中,figure创建窗口,subplot创建子图。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。所有你会看到一些教程中使用plt进行设置,一些教程使用子图属性进行设置。他们往往存在对应功能函数。

Figure:面板(图),matplotlib中的所有图像都是位于figure对象中,一个图像只能有一个figure对象。

Subplot:子图,figure对象下创建一个或多个subplot对象(即axes)用于绘制图像。

以下是配置参数:

axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示

figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置

font: 字体集(font family)、字体大小和样式设置

grid: 设置网格颜色和线性

legend: 设置图例和其中的文本的显示

line: 设置线条(颜色、线型、宽度等)和标记

patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。

savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。

verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。

xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。

 

Pandas库,Pandas是什么?

  Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。

利器之一:DataFrame

  DataFrame是Pandas中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame即有行索引也有列索引,可以被看做是由Series组成的字典。

利器之一:Series

  它是一种类似于一维数组的对象,是由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series对象。

  本文用到其DataFrame,读取数据极其方便,并且把csv数据读取为结构化数据Dataframe.其中行列数据可直接被matplotlib画图所用。

 

 

 

 

 

 

具体用法详见代码,以下是完整代码:

 1 # -*- coding: utf-8 -*-
 2 import matplotlib
 3 import matplotlib.pyplot as plt
 4 import numpy as np
 5 import pandas as pd 
 6 
 7 df = pd.read_csv('total.csv')
 8 #设置X轴,这里表示是时间轴
 9 #x0 = ['1.11','1.12','1.13','1.14','1.15','1.16','1.17','1.18','1.19','1.20','1.21','1.22','1.23','1.24','1.25','1.26','1.27','1.28','1.29']
10 x0 = df.columns
11 #设置Y轴,这是表示数据,两个方向分别表示确诊和疑似人数
12 #y1 = np.array([41,41,41,41,41,41,41,45,62,198,291,440,571,830,1287,1975,2744,4515,5997])
13 #y2 = np.array([0,0,0,0,0,0,0,0,0,0,54,37,393,1072,1965,2684,5794,6973,9239])
14 y1 = np.array(df.ix[0])
15 y2 = np.array(df.ix[1])
16 
17 #设置Y轴范围
18 plt.ylim(-10500,6500) 
19 
20 #画数据
21 plt.bar(x0,y1,0.9,label='确诊人数',color='r')
22 plt.bar(x0,-y2,0.9,label='疑似人数',color='b') 
23 
24 #在柱的上方和下方另写上人数
25 for x,y in zip(x0,y1):
26     plt.text(x,y+0.05,'%d'%y,ha='center',va='bottom')
27 
28 for x,y in zip(x0,y2):
29     plt.text(x,-y-500,'%d'%y,ha='center',va='bottom')
30 
31 #设置X轴刻度
32 plt.xticks(x0) 
33 
34 #设置轴标签
35 plt.xlabel('日期(2020年)')
36 plt.ylabel('人数') 
37 
38 #设置显示风格
39 plt.grid(True)
40 
41  #设置显示图例
42 plt.legend()
43 
44 #设置显示中文,这里用的微软雅黑字体
45 matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei']
46 matplotlib.rcParams['font.family']='sans-serif' 
47 
48 #设置标题
49 plt.title('新型冠状肺炎全国确诊及疑似感染人数近十九天增长趋势    2020.1.29',fontsize=18)
50 
51 #显示图表
52 plt.show()

csv数据如下:

 

 

 

posted @ 2020-02-04 18:56  Ndolls工作室  阅读(2373)  评论(0编辑  收藏  举报