截至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数据如下: