一、matplotlib库介绍
Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表,可根据数据集(DataFrame,Series)自行定义x,y轴,绘制图形(线形图,柱状图,直方图,密度图,散布图等等),能够满足大部分需要。
Matplotlib最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发,因为在函数的设计上参考了MATLAB,所以叫做Matplotlib。
官方文档: https://matplotlib.org/
Matplotlib中最基础的模块是pyplot。
二、学习目标
1.掌握pyplot常用的绘图参数的调节方法
2.掌握子图的绘制方法
3.掌握绘制图形的保存与展示方法
4.掌握散点图和折线图的作用与绘制方法
5.掌握直方图、饼图和箱线图的作用与绘制方法
三、掌握制图基础语法与常用参数
3.1掌握pyplot基础语法
基本绘图流程
1.创建画布与创建子图
第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制。
函数名称 | 函数作用 |
plt.figure | 创建一个空白画布,可以指定画布大小,像素。 |
figure.add_subplot | 创建并选中子图,可以指定子图的行数,列数,与选中图片编号。 |
2.添加画布内容
第二部分是绘图的主体部分。其中添加标题,坐标轴名称,绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签。但是添加图例一定要在绘制图形之后。
函数名称 | 函数作用 |
plt.title | 在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数。 |
plt.xlabel | 在当前图形中添加x轴名称,可以指定位置、颜色、字体大小等参数。 |
plt.ylabel | 在当前图形中添加y轴名称,可以指定位置、颜色、字体大小等参数。 |
plt.xlim | 指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识。 |
plt.ylim | 指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识。 |
plt.xticks | 指定x轴刻度的数目与取值。 |
plt.yticks | 指定y轴刻度的数目与取值。 |
plt.legend | 指定当前图形的图例,可以指定图例的大小、位置、标签。 |
3.保存与展示图形
第三部分主要用于保存和显示图形。
函数名称 | 函数作用 |
plt.savafig | 保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数。 |
plt.show | 在本机显示图形。 |
pyplot中的基础绘图语法(不含子图)
import numpy as np
import matplotlib.pyplot as plt
## %matplotlib inline表示在行中显示图片,在命令行运行报错
data = np.arange(0,1.1,0.01)
plt.title('lines') ## 添加标题
plt.xlabel('x')## 添加x轴的名称
plt.ylabel('y')## 添加y轴的名称
plt.xlim((0,1))## 确定x轴范围
plt.ylim((0,1))## 确定y轴范围
plt.xticks([0,0.2,0.4,0.6,0.8,1])## 规定x轴刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1])## 确定y轴刻度
plt.plot(data,data**2)## 添加y=x^2曲线
plt.plot(data,data**4)## 添加y=x^4曲线
plt.legend(['y=x^2','y=x^4'])
plt.savefig('../tmp/y=x^2.png')
plt.show()
pyplot中的基础绘图语法(含子图)
rad = np.arange(0,np.pi*2,0.01)
##第一幅子图
p1 = plt.figure(figsize=(8,6),dpi=80)## 确定画布大小
ax1 = p1.add_subplot(2,1,1)## 创建一个两行1列的子图,并开始绘制第一幅
plt.title('lines')## 添加标题
plt.xlabel('x')## 添加x轴的名称
plt.ylabel('y')## 添加y轴的名称
plt.xlim((0,1))## 确定x轴范围
plt.ylim((0,1))## 确定y轴范围
plt.xticks([0,0.2,0.4,0.6,0.8,1])## 规定x轴刻度
plt.yticks([0,0.2,0.4,0.6,0.8,1])## 确定y轴刻度
plt.plot(rad,rad**2)## 添加y=x^2曲线
plt.plot(rad,rad**4)## 添加y=x^4曲线
plt.legend(['y=x^2','y=x^4'])
##第二幅子图
ax2 = p1.add_subplot(2,1,2)## 创开始绘制第2幅
plt.title('sin/cos') ## 添加标题
plt.xlabel('rad')## 添加x轴的名称
plt.ylabel('value')## 添加y轴的名称
plt.xlim((0,np.pi*2))## 确定x轴范围
plt.ylim((-1,1))## 确定y轴范围
plt.xticks([0,np.pi/2,np.pi,np.pi*1.5,np.pi*2])## 规定x轴刻度
plt.yticks([-1,-0.5,0,0.5,1])## 确定y轴刻度
plt.plot(rad,np.sin(rad))## 添加sin曲线
plt.plot(rad,np.cos(rad))## 添加cos曲线
plt.legend(['sin','cos'])
plt.savefig('../tmp/sincos.png')
plt.show()
3.2掌握常用的动态rc参数设置与更改
由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数。
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
除了设置线条和字体的rc参数外,还有设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等rc参数。具体参数与取值可以参考官方文档。
调节线条的rc参数
## 原图
x = np.linspace(0, 4*np.pi)## 生成x轴数据
y = np.sin(x)## 生成y轴数据
plt.plot(x,y,label="$sin(x)$")## 绘制sin曲线图
plt.title('sin')
plt.savefig('../tmp/默认sin曲线.png')
plt.show()
## 修改rc参数后的图
plt.rcParams['lines.linestyle'] = '-.'
plt.rcParams['lines.linewidth'] = 3
plt.plot(x,y,label="$sin(x)$")## 绘制三角函数
plt.title('sin')
plt.savefig('../tmp/修改rc参数后sin曲线.png')
plt.show()
调节字体的rc参数
## 无法显示中文标题
plt.plot(x,y,label="$sin(x)$")## 绘制三角函数
plt.title('sin曲线')
plt.savefig('../tmp/无法显示中文标题sin曲线.png')
plt.show()
##设置rc参数显示中文标题
## 设置字体为SimHei显示中文
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False ## 设置正常显示符号
plt.plot(x,y,label="$sin(x)$")## 绘制三角函数
plt.title('sin曲线')
plt.savefig('../tmp/显示中文标题sin曲线.png')
plt.show()
四、分析特征间的关系-散点图和折线图
4.1绘制散点图
散点图(scatter diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。
值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。
scatter函数
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, alpha=None, **kwargs)
常用参数及说明如下表所示
参数名称 | 说明 |
x,y | 接收array。表示x轴和y轴对应的数据。无默认。 |
s | 接收数值或者一维的array。指定点的大小,若传入一维array则表示每个点的大小。默认为None。 |
c | 接收颜色或者一维的array。指定点的颜色,若传入一维array则表示每个点的颜色。默认为None |
marker | 接收特定string。表示绘制的点的类型。默认为None。 |
alpha | 接收0-1的小数。表示点的透明度。默认为None。 |
#散点图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('../data/国民经济核算季度数据.npz')
name = data['columns'] ## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
plt.figure(figsize=(8,7))## 设置画布
plt.scatter(values[:,0],values[:,2], marker='o')## 绘制散点图
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)#Rotation用来指定字符串的旋转角度
plt.title('2000-2017年季度生产总值散点图')## 添加图表标题
plt.savefig('../tmp/2000-2017年季度生产总值散点图.png')
plt.show()
使用不同颜色、不同形状的点
plt.figure(figsize=(8,7))## 设置画布
## 绘制散点1
plt.scatter(values[:,0],values[:,3], marker='o',c='red')
## 绘制散点2
plt.scatter(values[:,0],values[:,4], marker='D',c='blue')
## 绘制散点3
plt.scatter(values[:,0],values[:,5], marker='v',c='yellow')
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各产业季度生产总值散点图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])## 添加图例
plt.savefig('../tmp/2000-2017年各产业季度生产总值散点图.png')
plt.show()
4.2 绘制折线图
折线图(line chart)是一种将数据点按照顺序连接起来的图形。可以看作是将散点图,按照x轴坐标顺序连接起来的图形。
折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根据常用比例设置)而变化的连续数据。
同时还可以看出数量的差异,增长趋势的变化。
plot函数 matplotlib.pyplot.plot(*args, **kwargs)
plot函数在官方文档的语法中只要求填入不定长参数,实际可以填入的主要参数主要如下。
参数名称 | 说明 |
x,y | 接收array。表示x轴和y轴对应的数据。无默认。 |
color | 接收特定string。指定线条的颜色。默认为None。 |
linestyle | 接收特定string。指定线条类型。默认为“-”。 |
marker | 接收特定string。表示绘制的点的类型。默认为None。 |
alpha | 接收0-1的小数。表示点的透明度。默认为None。 |
color参数的8种常用颜色的缩写。
颜色缩写 | 代表的颜色 | 颜色缩写 | 代表的颜色 |
b | 蓝色 | m | 品红 |
g | 绿色 | y | 黄色 |
r | 红色 | k | 黑色 |
c | 青色 | w | 白色 |
plt.figure(figsize=(8,7))## 设置画布
## 绘制折线图
plt.plot(values[:,0],values[:,2],color = 'r',linestyle = '--')
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年季度生产总值折线图')## 添加图表标题
plt.savefig('../tmp/2000-2017年季度生产总值折线图.png')
plt.show()
plt.figure(figsize=(8,7))## 设置画布
plt.plot(values[:,0],values[:,2],color = 'r',linestyle = '--',
marker = 'o')## 绘制折线图
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年季度生产总值点线图')## 添加图表标题
plt.savefig('../tmp/2000-2017年季度生产总值点线图.png')
plt.show()
plt.figure(figsize=(8,7))## 设置画布
plt.plot(values[:,0],values[:,3],'bs-',
values[:,0],values[:,4],'ro-.',
values[:,0],values[:,5],'gH--')## 绘制折线图
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.title('2000-2017年各产业季度生产总值折线图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])
plt.savefig('../tmp/2000-2017年季度各产业生产总值折线图.png')
plt.show()
绘制2000~2017各产业与行业的国民生产总值散点图
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('../data/国民经济核算季度数据.npz')
name = data['columns']## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
p = plt.figure(figsize=(12,12)) ##设置画布
## 子图1
ax1 = p.add_subplot(2,1,1)
plt.scatter(values[:,0],values[:,3], marker='o',c='r')## 绘制散点
plt.scatter(values[:,0],values[:,4], marker='D',c='b')## 绘制散点
plt.scatter(values[:,0],values[:,5], marker='v',c='y')## 绘制散点
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.title('2000-2017年各产业季度生产总值散点图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])## 添加图例
## 子图2
ax2 = p.add_subplot(2,1,2)
plt.scatter(values[:,0],values[:,6], marker='o',c='r')## 绘制散点
plt.scatter(values[:,0],values[:,7], marker='D',c='b')## 绘制散点
plt.scatter(values[:,0],values[:,8], marker='v',c='y')## 绘制散点
plt.scatter(values[:,0],values[:,9], marker='8',c='g')## 绘制散点
plt.scatter(values[:,0],values[:,10], marker='p',c='c')## 绘制散点
plt.scatter(values[:,0],values[:,11], marker='+',c='m')## 绘制散点
plt.scatter(values[:,0],values[:,12], marker='s',c='k')## 绘制散点
## 绘制散点
plt.scatter(values[:,0],values[:,13], marker='*',c='purple')
## 绘制散点
plt.scatter(values[:,0],values[:,14], marker='d',c='brown')
plt.legend(['农业','工业','建筑','批发','交通',
'餐饮','金融','房地产','其他'])
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.savefig('../tmp/2000-2017年季度各行业生产总值散点子图.png')
plt.show()
p1 = plt.figure(figsize=(8,7))## 设置画布
## 子图1
ax3 = p1.add_subplot(2,1,1)
plt.plot(values[:,0],values[:,3],'b-',
values[:,0],values[:,4],'r-.',
values[:,0],values[:,5],'g--')## 绘制折线图
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.title('2000-2017年各产业季度生产总值折线图')## 添加图表标题
plt.legend(['第一产业','第二产业','第三产业'])## 添加图例
## 子图2
ax4 = p1.add_subplot(2,1,2)
plt.plot(values[:,0],values[:,6], 'r-',## 绘制折线图
values[:,0],values[:,7], 'b-.',## 绘制折线图
values[:,0],values[:,8],'y--',## 绘制折线图
values[:,0],values[:,9], 'g:',## 绘制折线图
values[:,0],values[:,10], 'c-',## 绘制折线图
values[:,0],values[:,11], 'm-.',## 绘制折线图
values[:,0],values[:,12], 'k--',## 绘制折线图
values[:,0],values[:,13], 'r:',## 绘制折线图
values[:,0],values[:,14], 'b-')## 绘制折线图
plt.legend(['农业','工业','建筑','批发','交通',
'餐饮','金融','房地产','其他'])
plt.xlabel('年份')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加纵轴标签
plt.xticks(range(0,70,4),values[range(0,70,4),1],rotation=45)
plt.savefig('../tmp/2000-2017年季度各行业生产总值折线子图.png')
plt.show()
五、分析特征内部数据分布与分散状况
5.1绘制直方图
直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,纵轴表示数量或者占比。
用直方图可以比较直观地看出产品质量特性的分布状态,便于判断其总体质量分布情况。直方图可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。
bar函数 matplotlib.pyplot.bar(left,height,width = 0.8,bottom = None,hold = None,data = None,** kwargs )
常用参数及说明如下表所示。
参数名称 | 说明 |
left | 接收array。表示x轴数据。无默认。 |
height | 接收array。表示x轴所代表数据的数量。无默认。 |
width | 接收0-1之间的float。指定直方图宽度。默认为0.8。 |
color | 接收特定string或者包含颜色字符串的array。表示直方图颜色。默认为None。 |
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
data = np.load('../data/国民经济核算季度数据.npz')
name = data['columns']## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
label = ['第一产业','第二产业','第三产业']## 刻度标签
plt.figure(figsize=(6,5))## 设置画布
plt.bar(range(3),values[-1,3:6],width = 0.5)## 绘制散点图
plt.xlabel('产业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(3),label)
plt.title('2017年第一季度各产业国民生产总值直方图')## 添加图表标题
plt.savefig('../tmp/2017年第一季度各产业国民生产总值直方图.png')
plt.show()
5.2 绘制饼图
饼图(Pie Graph)是将各项的大小与各项总和的比例显示在一张“饼”中,以“饼”的大小来确定每一项的占比。
饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显现方式直观。
pie函数
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, … )
常用参数及说明如下表所示。
参数名称 | 说明 | ||
x | 接收array。表示用于绘制撇的数据。无默认。 | ||
explode | 接收array。表示指定项离饼图圆心为n个半径。默认为None。 | ||
labels | 接收array。指定每一项的名称。默认为None。 | ||
color | 接收特定string或者包含颜色字符串的array。表示饼图颜色。默认为None。 |
参数名称 | 说明 |
autopct | 接收特定string。指定数值的显示方式。默认为None。 |
pctdistance | 接收float。指定每一项的比例和距离饼图圆心n个半径。默认为0.6。 |
labeldistance | 接收float。指定每一项的名称和距离饼图圆心多少个半径。默认为1.1。 |
radius | 接收float。表示饼图的半径。默认为1。 |
plt.figure(figsize=(6,6))## 将画布设定为正方形,则绘制的饼图是正圆
label= ['第一产业','第二产业','第三产业']## 定义饼状图的标签,标签是列表
explode = [0.01,0.01,0.01]## 设定各项离心n个半径
plt.pie(values[-1,3:6],explode=explode,labels=label,
autopct='%1.1f%%')## 绘制饼图
plt.title('2017年第一季度各产业国民生产总值饼图')
plt.savefig('../tmp/2017年第一季度各产业生产总值占比饼图')
plt.show()
5.3绘制箱线图
箱线图(boxplot)也称箱须图,其绘制需使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。
箱线图利用数据中的五个统计量(下边缘、下四分位数、中位数、上四分位数和上边缘)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。
boxplot函数
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None,meanline=None, labels=None, … )
参数名称 | 说明 |
x | 接收array。表示用于绘制箱线图的数据。无默认。 |
notch | 接收boolean。表示中间箱体是否有缺口。默认为None。 |
sym | 接收特定sting。指定异常点形状。默认为None。 |
vert | 接收boolean。表示图形是横向纵向或者横向。默认为None。 |
参数名称 | 说明 |
positions | 接收array。表示图形位置。默认为None。 |
widths | 接收scalar或者array。表示每个箱体的宽度。默认为None。 |
labels | 接收array。指定每一个箱线图的标签。默认为None。 |
meanline | 接收boolean。表示是否显示均值线。默认为False。 |
label= ['第一产业','第二产业','第三产业']## 定义标签
gdp = (list(values[:,3]),list(values[:,4]),list(values[:,5]))
plt.figure(figsize=(6,4))
plt.boxplot(gdp,notch=True,labels = label, meanline=True)
plt.title('2000-2017各产业国民生产总值箱线图')
plt.savefig('../tmp/2000-2017各产业国民生产总值箱线图.png')
plt.show()
六、绘制国民生产总值构成分布直方图、饼图和箱线图
import numpy as np
import matplotlib.pyplot as plt
data = np.load('../data/国民经济核算季度数据.npz')
name = data['columns'] ## 提取其中的columns数组,视为数据的标签
values = data['values']## 提取其中的values数组,数据的存在位置
plt.rcParams['font.sans-serif'] = 'SimHei' ## 设置中文显示
plt.rcParams['axes.unicode_minus'] = False
label1 = ['第一产业','第二产业','第三产业']## 刻度标签1
label2 = ['农业','工业','建筑','批发','交通',
'餐饮','金融','房地产','其他']## 刻度标签2
p = plt.figure(figsize=(12,12))
## 子图1
ax1 = p.add_subplot(2,2,1)
plt.bar(range(3),values[0,3:6],width = 0.5)## 绘制散点图
plt.xlabel('产业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(3),label1)
plt.title('2000年第一季度国民生产总值产业构成分布直方图')
## 子图2
ax2 = p.add_subplot(2,2,2)
plt.bar(range(3),values[-1,3:6],width = 0.5)## 绘制散点图
plt.xlabel('产业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(3),label1)
plt.title('2017年第一季度国民生产总值产业构成分布直方图')
## 子图3
ax3 = p.add_subplot(2,2,3)
plt.bar(range(9),values[0,6:],width = 0.5)## 绘制散点图
plt.xlabel('行业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(9),label2)
plt.title('2000年第一季度国民生产总值行业构成分布直方图')## 添加图表标题
## 子图4
ax4 = p.add_subplot(2,2,4)
plt.bar(range(9),values[-1,6:],width = 0.5)## 绘制散点图
plt.xlabel('行业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
plt.xticks(range(9),label2)
plt.title('2017年第一季度国民生产总值行业构成分布直方图')## 添加图表标题
## 保存并显示图形
plt.savefig('../tmp/国民生产总值构成分布直方图.png')
plt.show()
label1 = ['第一产业','第二产业','第三产业']## 标签1
label2 = ['农业','工业','建筑','批发','交通',
'餐饮','金融','房地产','其他']## 标签2
explode1 = [0.01,0.01,0.01]
explode2 = [0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01]
p = plt.figure(figsize=(12,12))
## 子图1
ax1 = p.add_subplot(2,2,1)
plt.pie(values[0,3:6],explode=explode1,labels=label1,
autopct='%1.1f%%')## 绘制散点图
plt.title('2000年第一季度国民生产总值产业构成分布饼图')
## 子图2
ax2 = p.add_subplot(2,2,2)
plt.pie(values[-1,3:6],explode=explode1,labels=label1,
autopct='%1.1f%%')## 绘制散点图
plt.title('2017年第一季度国民生产总值产业构成分布饼图')
## 子图3
ax3 = p.add_subplot(2,2,3)
plt.pie(values[0,6:],explode=explode2,labels=label2,
autopct='%1.1f%%')## 绘制散点图
plt.title('2000年第一季度国民生产总值行业构成分布饼图')## 添加图表标题
## 子图4
ax4 = p.add_subplot(2,2,4)
plt.pie(values[-1,6:],explode=explode2,labels=label2,
autopct='%1.1f%%')## 绘制散点图
plt.title('2017年第一季度国民生产总值行业构成分布饼图')## 添加图表标题
## 保存并显示图形
plt.savefig('../tmp/国民生产总值构成分布饼图.png')
plt.show()
label1 = ['第一产业','第二产业','第三产业']## 标签1
label2 = ['农业','工业','建筑','批发','交通',
'餐饮','金融','房地产','其他']## 标签2
gdp1 = (list(values[:,3]),list(values[:,4]),list(values[:,5]))
gdp2 = ([list(values[:,i]) for i in range(6,15)])
p = plt.figure(figsize=(8,8))
## 子图1
ax1 = p.add_subplot(2,1,1)
## 绘制散点图
plt.boxplot(gdp,notch=True,labels = label1, meanline=True)
plt.title('2000-2017各产业国民生产总值箱线图')
plt.ylabel('生产总值(亿元)')## 添加y轴名称
## 子图2
ax2 = p.add_subplot(2,1,2)
## 绘制散点图
plt.boxplot(gdp2,notch=True,labels = label2, meanline=True)
plt.title('2000-2017各行业国民生产总值箱线图')
plt.xlabel('行业')## 添加横轴标签
plt.ylabel('生产总值(亿元)')## 添加y轴名称
## 保存并显示图形
plt.savefig('../tmp/国民生产总值分散情况箱线图.png')
plt.show()