python--Matplotlib数据可视化基础

Matplotlib数据可视化基础

  • 绘图基础语法与常用参数
    • pyplot基础语法
      • 创建画布与创建子图常见函数
      • 添加画布内容常用函数
      • 保存与显示图形常用函数
    • 设置pyplot动态rc参数
  • 分析特征间关系
    • 散点图--用于分析特征间的相关关系
    • 折线图--用与分析自变量特征和因变量特征的趋势关系
    • 画图任务分析实现
  • 分析特征内部数据分布与分散状况
    • 直方图--查看各分组数据的数量分布,以及各组数据之间的数量比较
    • 饼图--查看各分组数据在总数据中的占比
    • 箱线图--发现整体数据的分布分散情况
    • 画图任务分析实现

绘图基础语法与常用参数

pyplot基础语法

  • pyplot基本绘图流程分为三个步骤:1.创建画布与创建子图;2.添加画布内容;3.保存与显示图形。第二部分包括添加标题,添加x轴名称,修改x轴刻度与范围,添加y轴名称,修改y轴刻度与范围

创建画布与创建子图常见函数

函数名称 函数作用
plt.figure 创建一个空白画布,可以指定画布大小、像素
figure.add_subplot 创建并选中子图,可以指定子图的行数、列数和选中图片的编号

添加画布内容常用函数

函数名称 函数作用
plt.title 在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等参数
plt.xlabel 在当前图形中添加x轴名称,可以指定位置、颜色、字体大小等参数
plt.ylabel 在当前图形中添加y轴名称,可以指定位置、颜色、字体大小等参数
plt.xlim 指定当前图形x轴的范围,只能确定一个数值区间,而无法使用字符串标识
plt.ylim 指定当前图形y轴的范围,只能确定一个数值区间,而无法使用字符串标识
plt.xticks 指定x轴刻度的数目与取值
plt.yticks 指定y轴刻度的数目与取值
plt.legend 指定当前图形的图例,可以指定图例的大小、位置、标签

保存与显示图形常用函数

函数名称 函数作用
plt.savefig 保存绘制的图形,可以指定图形的分辨率、边缘的颜色等参数g
plt.show 在本机显示图形
  • 实例
# 基础绘图语法
import numpy as np
import matplotlib.pyplot as plt
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('./y=x^2.png')
plt.show()

python--Matplotlib数据可视化基础_第1张图片

# 包含子图绘制的基础语法
rad=np.arange(0,np.pi*2,0.01)
# 第一幅子图
p1=plt.figure(figsize=(8,6),dpi=80)  # 确定画布大小
ax1=p1.add_subplot(2,1,1)  # 创建一个2行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)
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('./sincos.png')
plt.show()

python--Matplotlib数据可视化基础_第2张图片

设置pyplot动态rc参数

  • pyplot使用rc配置文件来自定义图形中的各种默认属性

线条常用的rc参数

rc参数名称 解释 取值
lines.linewidth 线条宽度 取0~10之间的数值,默认为1.5
lines.linestyle 线条样式 可取“-” “–” “-.” “:” 四种。默认为“-”
lines.marker 线条上点的形状 可取“o” “D” “h” “.” “,” “S”等20种默认为None
lines.markersize 点的大小 取0~10之间的数值,默认为1

lines.linestyle参数取值及意义

lines.linestyle取值 意义 lines.linestyle取值 意义
‘-’ 实线 ‘-.’ 点线
‘–’ 长虚线 ‘:’ 短虚线

lines.marker参数取值及意义

lines.marker取值 意义 lines.marker取值 意义
‘o’ 圆圈 ‘.’
‘D’ 菱形 ‘s’ 正方形
‘h’ 六边形1 ‘*’ 星号
‘H’ 六边形2 ‘d’ 小菱形
‘-’ 水平线 ‘v’ 一角朝下的三角形
‘8’ 八边形 ‘<’ 一角朝左的三角形
‘p’ 五边形 ‘>’ 一角朝右的三角形
‘,’ 像素 ‘^’ 一角朝上的三角形
‘+’ 加号 ‘’ 竖线
‘None’ ‘x’ X
  • 实例
# 调节线条的rc参数
# 原图
x = np.linspace(0,4*np.pi)  # 生成x轴参数
y = np.sin(x)  # 生成y轴参数
plt.plot(x,y,label="$sin(s)$")  # 绘制sin曲线图
plt.title('sin')
plt.savefig('./默认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('./修改rc参数后sin曲线.png')
plt.show()

python--Matplotlib数据可视化基础_第3张图片

# 调节字体的rc参数
# 无法显示中文标题
plt.plot(x,y,label="$sin(x)$")  # 绘制三角函数
plt.title('sin曲线')
plt.savefig('./无法显示中文标题的sin曲线.png')
plt.show()

python--Matplotlib数据可视化基础_第4张图片

# 设置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('./显示中文标题的sin曲线.png')
plt.show()

python--Matplotlib数据可视化基础_第5张图片

分析特征间关系

散点图–用于分析特征间的相关关系

  • 用于比较跨类别的数据
  1. 特征之间是否存在数值或者数量的关联趋势,关联趋势是线性的还是非线性的。
  2. 如果某一个点或者某几个点偏离大多数点,则这些点就是离群值,通过散点图可以一目了然,从而进一步分析这些离群值是否在建模分析中产生很大的影响。
  • 绘制方法matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,alpha=None,linewidths=None,verts=None,edgecolors=None,hold=None,data=None,**kwargs)

scatter函数常用参数及其说明

参数名称 说明
x,y 接受array。表示x轴和y轴对应的数据。无默认
s 接受数值或者一维的array。指定点的大小,若传入一维array,则表示每个点的大小。默认为None
c 接受颜色或者一维的array。指定点的颜色,若传入一维array,则表示每个点的颜色。默认为None
marker 接收特定string。表示绘制的点的类型。默认为None
alpha 接收0~1的小数。表示点的透明度。默认为None
  • 绘制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('./国民经济核算季度数据.npz', allow_pickle=True)
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)
plt.title('2000-2017年季度生产总值散点图')  # 添加图表标题
plt.savefig('./2000-2017年季度生产总值散点图.png')
plt.show()

python--Matplotlib数据可视化基础_第6张图片

  • 绘制2000~2017年间各产业各季度国民生产总值的散点图
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('./2000-2017年各产业季度生产总值散点图.png')
plt.show()

分析:通过图中点的颜色和形状的区别可以看出,第一产业增长平缓,第三产业呈指数型增长,第二产业每年会根据季度呈现周期性波动。总体来看,我国近18年的各个产业都在持续增长钟,并且第二和第三产业增长幅度非常大,18年间增长了400%以上。

折线图–用与分析自变量特征和因变量特征的趋势关系

  • 主要是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。
  • 基本语法matplotlib.pyplot.plot(*args, **kwargs)

plot函数常用参数及其说明

参数名称 说明
x,y 接收array。表示x轴和y轴对应的数据。无默认
color 接收特定string。指定线条的颜色。默认为None
linestyle 接收特定string。指定线条类型。默认为“-”
marker 接收特定string。表示绘制的点的类型。默认为None
alpha 接收0-1的小数。表示点的透明度。默认为None

color参数的常用颜色缩写

颜色缩写 代表的颜色 颜色缩写 代表的颜色
b 蓝色 m 品红
g 绿色 y 黄色
r 红色 k 黑色
c 青色 w 白色
  • 绘制2000~2017年各季度国民生产总值折线图
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('./2000-2017年季度生产总值折线图.png')
plt.show()

python--Matplotlib数据可视化基础_第7张图片

  • 绘制点线图
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('./2000-2017年季度生产总值点线图.png')
plt.show()
  • 绘制2000~2017年各产业各季度生产总值的折线散点图
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('./2000-2017年季度各产业生产总值折线图.png')
plt.show()

python--Matplotlib数据可视化基础_第8张图片

画图任务分析实现

  • 绘制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', allow_pickle=True)
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('./2000-2017年季度各行业生产总值散点子图.png')
plt.show()

python--Matplotlib数据可视化基础_第9张图片
分析:通过图可以看出,我国现阶段国民经济增长的主要动力是第三产业,其次是第二产业。从行业看来,工业、其他行业和农业对整体国民经济贡献度最大。

  • 绘制2000~2017年各产业与行业的国民生产总值折线图
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('./2000-2017年季度各行业生产总值折线子图.png')
plt.show()

python--Matplotlib数据可视化基础_第10张图片

分析:此图能够发现我国经济各产业与各行业增长趋势,可以看出我国整体经济呈现增长趋势,其中第一产业增长相对较慢,但是周期性明显,农业的周期性和第一产业的周期性基本吻合。工业和第二产业的增长趋势基本一致。同时除了餐饮行业外,其他行业均呈现较为明显的增长趋势。

分析特征内部数据分布与分散状况

  • 直方图、饼图和箱线图是另3种数据分析常用的图形,主要用于分析数据内部的分布状态和分散状态。

直方图–查看各分组数据的数量分布,以及各组数据之间的数量比较

  • 质量分布图:由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属的类别,用纵轴表示数量或者占比。可以比较直观的看出产品质量特性的分布状态,便于判断其总体质量分布情况。语法:matplotlib.pyplot.bar(left,height,width=0.8,bottom=None,hold=None,data=None,**kwargs)

bar函数的常用参数及其说明

参数名称 说明
left 接收array。表示x轴数据。无默认
height 接收array。表示x轴所代表数据的数量。无默认
width 接收0~1之间的float。指定直方图宽度。默认为0.8
color 接收指定string或者包含颜色字符串的array。表示直方图颜色。默认为None
  • 绘制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', allow_pickle=True)
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('./2017年第一季度各产业国民生产总值直方图.png')
plt.show()

python--Matplotlib数据可视化基础_第11张图片
分析:2017年第一季度的第一产业生产总值不到第二产业的六分之一,基本与第三产业的十分之一持平。第二产业生产总值和第三产业生产总值大约相差三分之一。

饼图–查看各分组数据在总数据中的占比

  • 可以比较清楚的反应除部分与部分、部分与整体之间的比例关系,易于显示每组数据相对于总数的大小,而且显示方式直观。语法:matplotlib.pyplot.pie(x,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,shadow=False,labeldistance=1.1,startangle=None,radius=None,counterclock=True,wedgeprops=None,textprops=None,center=(0,0),frame=False,hold=None,data=None)

pie函数的常用参数及其说明

参数名称 说明
x 接收array。表示用于绘制饼图的数据。无默认
explode 接收array。表示指定项距离饼图圆心为n个半径。默认为None
labels 接收array。指定每一项的名称。默认为None
color 接收特定string或者包含颜色字符串的array。表示饼图颜色。默认为None
autopct 接收特定string。指定数值的显示方式。默认为None
pctdistance 接收float。指定每一项的比例autopct和距离圆心的半径。默认为0.6
labeldistance 接收float。指定每一项的名称labels和距离圆心的半径。默认为1.1
radius 接收float。表示饼图的半径。默认为1
  • 绘制2017年第一季度各产业国民生产总值饼图
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('./2017年第一季度各产业生产总值占比饼图')
plt.show()

python--Matplotlib数据可视化基础_第12张图片
分析:可以明确看出三个产业在整个国民生产总值中的占比。第一产业不到5%,第三产业超过50%,说明现阶段我国经济的主要贡献产品为第三产业。

箱线图–发现整体数据的分布分散情况

  • 箱须图:能提供有关数据位置和分散情况的关键信息,尤其是在比较不同特征时,更可表示其分散程度差异。箱线图利用数据中的5个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据。它也可以粗略的看出数据是否具有对称性、分布的分散程度等信息,特别是可以用于几个样本的比较。语法:matplotlib.pyplot.boxplot(x,notch=None,sym=None,vert=None,whis=None,positions=None,widths=None,patch_artist=None,bootstrap=None,usermedians=None,conf_intervals=None,meanlines=None,showmeans=None,showcaps=None,showbox=None,showfliers=None,boxprops=None,labels=None,filerprops=None,medianprops=None,meanprops=None,capprops=None,whiskerprops=None,manage_xticks=True,autorange=False,zorder=None,hold=None,data=None)

boxplot函数常用参数及其说明

参数名称 说明
x 接收array。表示用于绘制箱线图的数据。无默认
notch 接收boolean。表示中间箱体是否有缺口。默认为None
sym 接收特定string。指定异常点形状。默认为None
vert 接收boolean。表示图形时纵向或者横向。默认为None
positions 接收array。表示图形位置。默认为None
widths 接收scalar或者array。表示每个箱体的宽度。默认为None
labels 接收array。指定每一个箱线图的标签。默认为None
meanline 接收boolean。表示是否显示均值线。默认为False
  • 绘制2000~2017年各产业国民生产总值箱线图
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('./2000-2017各产业国民生产总值箱线图.png')
plt.show()

python--Matplotlib数据可视化基础_第13张图片
分析:在2000~2017年,第一产业在某一年的某个季度具有一个异常值。第三产业整体增速变大,导致了第三产业数据前半部分相对密集,而后半部分相对分散。

画图任务分析实现

  • 绘制国民生产总值构成分布直方图
import numpy as np
import matplotlib.pyplot as plt
data = np.load('./data/国民经济核算季度数据.npz',allow_pickle=True)
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('./国民生产总值构成分布直方图.png')
plt.show()

python--Matplotlib数据可视化基础_第14张图片
分析:通过直方图分析2000年第一季度和2017年第一季度的三大产业的国民生产总值,可以发现各产业绝对数值之间的关系,并通过对比发现产业结构的变化。同理可以得出行业间的绝对数值关系以及2000-2017年的行业发展情况。第一产业与第二产业和第三产业的国民生产总值差距语法巨大。通过坐标轴变化可以发现,国民生产总值增长接近10倍。2000-2017年,金融行业与其他行业增长幅度相比较较明显。

  • 绘制国民生产总值构成分布饼图
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('./国民生产总值构成分布饼图.png')
plt.show()

python--Matplotlib数据可视化基础_第15张图片
分析:分析:通过分析2000年与2017年不同的产业和行业在国民生产总值中的占比,可以发现我国的产业结构变化和行业变迁。2000-2017年,第三产业在整个国民生产总值中的占比约提高了10%,第一产业和第二产业在国民生产总值中的占比分别下讲了约4%和6%。工业在整个国民生产总值中的比例下降了7%,其他行业与金融行业分别提升了6.7%与3.7%。

  • 绘制国民生产总值分散情况箱线图
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('./国民生产总值分散情况箱线图.png')
plt.show()

python--Matplotlib数据可视化基础_第16张图片
分析:通过箱线图分析2000-2017年不同的行业和产业在国民生产总值总的分布情况,从而判断整体增速是否加快。整体经济趋势时上升的,结合箱线图可以看出产业中的第二产业增长平缓。行业中的工业与餐饮也的增长比较平缓,其他行业、批发行业、建筑行业、金融行业和房地产行业增速均有所加快。

你可能感兴趣的:(python,python,matplotlib,开发语言)