• python--Matplotlib数据可视化基础


    绘图基础语法与常用参数

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    # 包含子图绘制的基础语法
    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    在这里插入图片描述

    设置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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

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

    在这里插入图片描述

    # 设置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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    分析特征间关系

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

    • 用于比较跨类别的数据
    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    • 绘制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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    分析:通过图中点的颜色和形状的区别可以看出,第一产业增长平缓,第三产业呈指数型增长,第二产业每年会根据季度呈现周期性波动。总体来看,我国近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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    在这里插入图片描述

    • 绘制点线图
    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 绘制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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

    画图任务分析实现

    • 绘制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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    在这里插入图片描述
    分析:通过图可以看出,我国现阶段国民经济增长的主要动力是第三产业,其次是第二产业。从行业看来,工业、其他行业和农业对整体国民经济贡献度最大。

    • 绘制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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    在这里插入图片描述

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

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

    • 直方图、饼图和箱线图是另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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述
    分析: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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述
    分析:可以明确看出三个产业在整个国民生产总值中的占比。第一产业不到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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    分析:在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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    在这里插入图片描述
    分析:通过直方图分析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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    在这里插入图片描述
    分析:分析:通过分析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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

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

  • 相关阅读:
    3288S Android11 适配红外遥控功能(超详细)
    深入理解红黑树
    注意力机制
    Java每日笔记 面向对象理解、异常
    flutter系列之:Material主题的基础-MaterialApp
    DataGrip 2023:让数据库开发变得更简单、更高效 mac/win版
    linux下Nerdtree安装方法
    第十五届全国大学生数学竞赛初赛试卷解析
    阿里巴巴面试题- - -多线程&并发篇(二十四)
    目标检测YOLO实战应用案例100讲-面向恶劣环境下的多模态 行人识别
  • 原文地址:https://blog.csdn.net/weixin_46361294/article/details/125570563