文章目录

  • 如何查看完整版!!(代码+图片)
  • 第3章 Matplotlib 数据可视化基础
  • 3.1 掌获绘图基础语法与常用参数
    • 3.1.1 掌获pyplot基础语法
      • 1.创建画布与创建子图
      • 2.添加画布内容
      • 3.存与展示图形
      • 代码 3-1 pyplot中基础绘图语法
      • 代码3-2 包含子图绘制的基础语法
    • 3.1.2 设置pyplot的动态rc参数
      • 代码 3-4 调节字体的rc参数
  • 任务3.2分析特征间的关系
    • 3.2.1 绘制散点图
      • 代码 3-5 绘制2000-2017各季度国民生产总值散点图
      • 代码 3-6 绘制2000-2017各产业各季度国民生产总值散点图
    • 3.2.2 绘制折线图
      • 代码 3-7 绘制2000-2017年各季度国民生产总值折线图
      • 代码 3-8 绘制点线图
      • 代码3-9 绘制2000-2017年各产业各季度生产总值的折线散点图
    • 3.2.3 任务实现
      • 1. 绘制2000-2017各产业与行业的国民生产总值散点图
      • 代码 3-11 绘制2000-2017年各产业与行业的国民生产总值折线图
  • 任务 3.3 分析特征内部数据分布与分散状况
    • 3.3.1 绘制直方图
      • 代码 3-12 绘制2017年第一季度各产业国民生产总值直方图
      • 3.3.2 绘制饼图
      • 代码3-13 绘制2017年第一季度各产业国民生产总值饼图
    • 3.3.3 绘制箱线图
      • 代码3-14 绘制2000~2017年各产业国民生产总值箱线图
    • 3.3.4 任务实现
      • 1. 绘制国民生产总值构成分布直方图
      • 代码3-15 绘制国民生产总值构成分布直方图
      • 2.绘制国民生产总值构成分布饼图
      • 代码3-16 绘制国民生产总值构成分布饼图
      • 3.绘制国民生产总值分散情况箱线图
      • 代码 3-17 绘制国民生产总值分散情况箱线图
  • 实训
  • 分析1996-2015年人口数据特征间的关系
  • 3、分析1996-2015年人口数据各个特征的分布和分散情况。

如何查看完整版!!(代码+图片)

点我点我!!!

第3章 Matplotlib 数据可视化基础

maplotlib.pyplot(以下简称pyplot)是一个命令风格函数的集合,使Matplotlib的机制更像MATLAB.每个绘图函数都可对图形进行一些更改,如创建图形,在图形中创建绘图区域,在绘图区域绘制一些线条,使用标签装饰绘图等.在pyplot中,各种状态跨函数调用保存,以便跟踪诸如当前图形和绘图区域之类的东西,并且绘图始终指向当前轴域.本章将以pyplot为基础,讲述5中基础统计图形的绘制方法.

3.1 掌获绘图基础语法与常用参数

3.1.1 掌获pyplot基础语法

大部分的pyplot图形绘制都遵循一个流程,使用这个流程可以完成大部分图形的绘制

# %%html
<img style="float: left;" src="./image/3-1.png" width=700 height=400>

1.创建画布与创建子图

第一部分主要作用是构建出一张空白的画布,并可以选择是否将整个画布划分为多个部分,方便在同一幅图上绘制多个图形的情况。最简单的绘图可以省略第一部分,而后直接在默认的画布上进行图形绘制。

%%html
<img style="float: left;" src="./image/3-1-2.png" width=700 height=400>

2.添加画布内容

第二部分是绘图的主体部分.其中的添加标题,添加坐标轴名称,绘制图形等步骤是并列的,没有先后顺序,可以先绘制图形,也可以先添加各类标签,但是添加图例一定要在绘制图形之后

%%html
<img style="float: left;" src="./image/3-1-3.png" width=700 height=400>

3.存与展示图形

%%html
<img style="float: left;" src="./image/3-1-4.png" width=700 height=400>

代码 3-1 pyplot中基础绘图语法

import numpy as np
import matplotlib.pyplot as plt
data = np.arange(0,1.1,0.01)
plt.title('lines')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim(0,1)
plt.ylim(0,1)
plt.xticks([0,0.2,0.4,0.6,0.8,1])
plt.yticks([0,0.2,0.4,0.6,0.8,1])
plt.plot(data,data**2)
plt.plot(data,data**4)
plt.legend(['y=x^2','y=x^4'])  #从上到下,无法自动识别
plt.savefig('./tmp/y=x^2.png')
plt.show()

代码3-2 包含子图绘制的基础语法

# 3-2
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.1.2 设置pyplot的动态rc参数

pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数。

在pyplot中几乎所有的默认属性都是可以控制的,例如视图窗口大小以及每英寸点数、线条宽度、颜色和样式、坐标轴、坐标和网格属性、文本、字体等。

# 代码 3-3
## 原图
x = np.linspace(0, 4*np.pi)## 生成x轴数据
y = np.sin(x)## 生成y轴数据
plt.plot(x,y,label="$sin(x)$")## 绘制sin曲线图
# label 用来在右上角标记这是什么曲线 [小小图标]
plt.title('sin')
plt.savefig('./tmp/默认sin曲线.png')
plt.legend()   #要在plt.show()前加这个,plt.show()label才能显示
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()

%%html
<img style="float: left;" src="./image/3-3.png" width=700 height=400>

%%html
<img style="float: left;" src="./image/3-3-2.png" width=700 height=400>

%%html
<img style="float: left;" src="./image/3-3-3.png" width=700 height=400>

由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的部分字符无法显示,因此需要同时更改axes.unicode_minus参数。
plt.rcParams[‘font.sans-serif’] = ‘SimHei’ ## 设置中文显示
plt.rcParams[‘axes.unicode_minus’] = False

代码 3-4 调节字体的rc参数

除了设置线条和字体的rc参数外,还有设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等rc参数。具体参数与取值可以参考官方文档。

# 代码 3-4
## 无法显示中文标题
plt.plot(x,y,label="$sin(x)$")## 绘制三角函数
plt.title('sin曲线')
plt.savefig('./tmp/无法显示中文标题sin曲线.png')
plt.legend()
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()

任务3.2分析特征间的关系

3.2.1 绘制散点图

散点图(scatter diagram)又称为散点分布图,是以一个特征为横坐标,另一个特征为纵坐标,利用坐标点(散点)的分布形态反映特征间的统计关系的一种图形。

值是由点在图表中的位置表示,类别是由图表中的不同标记表示,通常用于比较跨类别的数据。

%%html
<img style="float: left;" src="./image/3-5.png" width=700 height=400>

代码 3-5 绘制2000-2017各季度国民生产总值散点图

# 代码 3-5
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])  #将坐标轴变成了我们想要的样子
plt.title('2000-2017年季度生产总值散点图')  #添加标题
plt.savefig('./tmp/2000-2017年季度生产总值散点图.png')
plt.show()

代码 3-6 绘制2000-2017各产业各季度国民生产总值散点图

# 代码 3-6
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()

3.2.2 绘制折线图

折线图(line chart)是一种将数据点按照顺序连接起来的图形。可以看作是将散点图,按照x轴坐标顺序连接起来的图形。
折线图的主要功能是查看因变量y随着自变量x改变的趋势,最适合用于显示随时间(根据常用比例设置)而变化的连续数据。同时还可以看出数量的差异,增长趋势的变化。

%%html
<img style="float: left;" src="./image/3-7.png" width=700 height=400>

%%html
<img style="float: left;" src="./image/3-8.png" width=700 height=400>

代码 3-7 绘制2000-2017年各季度国民生产总值折线图

# 代码 3-7
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()

range(0,70,4) 从0到70(不包括70)取步长为4

代码 3-8 绘制点线图

# 代码 3-8
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()

代码3-9 绘制2000-2017年各产业各季度生产总值的折线散点图

# 代码 3-9
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()

3.2.3 任务实现

国民生产总值数据总共有三大产业的国民生产总值,以及农业、工业、建筑、批发、交通、餐饮、金融、房地产和其他行业各个季度的增加值。

通过散点图分析三大行业的国民生产总值可以发现我国产业结构。通过比较各行业间季度的增加值则可以发现国民经济的主要贡献行业。

1. 绘制2000-2017各产业与行业的国民生产总值散点图

# 代码 3-10
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)) ##设置画布
<Figure size 864x864 with 0 Axes>
## 子图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()

代码 3-11 绘制2000-2017年各产业与行业的国民生产总值折线图

# 代码 3-11
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()

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

3.3.1 绘制直方图

直方图(Histogram)又称质量分布图,是统计报告图的一种,由一系列高度不等的纵向条纹或线段表示数据分布的情况,一般用横轴表示数据所属类别,纵轴表示数量或者占比。

用直方图可以比较直观地看出产品质量特性的分布状态,便于判断其总体质量分布情况。直方图可以发现分布表无法发现的数据模式、样本的频率分布和总体的分布。

代码 3-12 绘制2017年第一季度各产业国民生产总值直方图

# 代码 3-12
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()

3.3.2 绘制饼图

%%html
<img style="float: left;" src="./image/3-13.png" width=700 height=400>

代码3-13 绘制2017年第一季度各产业国民生产总值饼图

# 代码 3-13
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()

3.3.3 绘制箱线图

箱线图(boxplot)也称箱须图,其绘制需使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。

箱线图利用数据中的五个统计量(最小值、下四分位数、中位数、上四分位数和最大值)来描述数据,它也可以粗略地看出数据是否具有对称性、分布的分散程度等信息,特别可以用于对几个样本的比较。

%%html
<img style="float: left;" src="./image/3-14.png" width=400 height=400>

%%html
<img style="float: left;" src="./image/3-14-2.png" width=700 height=400>

代码3-14 绘制2000~2017年各产业国民生产总值箱线图

# 代码 3-14
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()

3.3.4 任务实现

1. 绘制国民生产总值构成分布直方图

通过直方图分析2000年第一季度和2017年第一季度之间的三大产业的国民生产总值,可以发现各产业绝对数值之间的关系,并通过对比发现产业结构的变化。

同理可以得出行业间的绝对数值关系以及17年来行业发展状况

代码3-15 绘制国民生产总值构成分布直方图

#代码3-15
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))  #figure是数字的意思# 子图1
ax1 = p.add_subplot(2,2,1)
plt.bar(range(3),values[0,3:6],width = 0.5)  #绘制散点图
plt.xlabel('产业')
plt.ylabel('生产总值(亿元)')
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()

2.绘制国民生产总值构成分布饼图

通过分析2000年与2017年不同的产业和行业在国民生产总值中的占比,可以发现我国产业结构变化和行业变迁。

代码3-16 绘制国民生产总值构成分布饼图

# 代码 3-16
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()

3.绘制国民生产总值分散情况箱线图

通过分析2000年至2017年不同的产业和行业在国民生产总值中的分散情况,可以发现整体分散情况,从而判断整体增速是否加快。

代码 3-17 绘制国民生产总值分散情况箱线图

# 代码 3-17
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()

import xlwings as xw
import pandas as pd
import numpy as np
data = np.load('./data/populations.npz')
data_new = pd.DataFrame(data['data'])  # 先将数组存储的变成DataFrame
columns = data['feature_names']   #读取数据标签  这里类型是数组
writer = pd.ExcelWriter('./populations.xlsx')
for i in range(len(columns)):data_new = data_new.rename(columns= {data_new.columns[i]:columns[i]})
data_new.to_excel(writer,'Sheets')  #sheets1是写入excel表格的名字
writer.save()writer.close()

实训

分析1996-2015年人口数据特征间的关系

(1) 使用Numpy库读取人口数据;

(2) 创建画布,并添加子图;
(3) 分别绘制散点图和折线图并保存图片;
(4) 分析未来人口变化趋势。

#(1) 使用Numpy库读取人口数据;
data = np.load('./data/populations.npz')
data.files
#data['feature_names']
['data', 'feature_names']
#(2) 创建画布,并添加子图
plt.rcParams['font.sans-serif'] = 'SimHei'  #设置中文显示
name = data['feature_names']
values = data['data']
p = plt.figure(figsize = (12,12))
#子图1
ax1 = p.add_subplot(2,1,1)
plt.scatter(values[-3::-1,0],values[-3::-1,1],marker='8',color='red')
plt.scatter(values[-3::-1,0],values[-3::-1,2],marker='o',color='black')
plt.scatter(values[-3::-1,0],values[-3::-1,3],marker='D',color='green')
plt.scatter(values[-3::-1,0],values[-3::-1,4],marker='h',color='blue')
plt.scatter(values[-3::-1,0],values[-3::-1,5],marker='.',color='yellow')
plt.xticks(values[-3::-1,0])
plt.legend(data['feature_names'][1:])
plt.xlabel('时间')
plt.ylabel('总人口/万人')
plt.title('1996~2015年末人口分布特征散点图')#折线图
p2=p.add_subplot(2,1,2)
plt.plot(values[-3::-1,0],values[-3::-1,1],'r-')
plt.plot(values[-3::-1,0],values[-3::-1,2],'k-')
plt.plot(values[-3::-1,0],values[-3::-1,3],'g-.')
plt.plot(values[-3::-1,0],values[-3::-1,4],'b-')
plt.plot(values[-3::-1,0],values[-3::-1,5],'y-')
plt.xticks(values[0:20,0])
plt.xlabel('时间')
plt.ylabel('总人口')
plt.title('1996~2015年末人口分布特征折线图')
plt.legend(['总人口','男性','女性','城镇','乡村'])
plt.savefig('./tmp/1996~2015年末人口分布特征散点图和折线图.png.png')
plt.show()

3、分析1996-2015年人口数据各个特征的分布和分散情况。

(1)掌握直方图、饼图和箱线图绘制方法;
(2)分析发现人口结构变化情况。

#直方图画布:
values = data['data'][-3::-1,:] #从倒数第三行开始倒序获取数据
label=data['feature_names']
p1 = plt.figure(figsize=(15,15)) #设置画布
p1.add_subplot(2,1,1)
plt.bar(range(4),values[0,2:6],width=0.6)
plt.xlabel('类别'),plt.ylabel('人口数(万人)')
plt.xticks(range(4),label[2:6])
plt.title('1996年人口数据特征间的关系直方图')
p1.add_subplot(2,1,2)
plt.bar(range(4),values[-1,2:6],width=0.6)
plt.xlabel('类别'),plt.ylabel('人口数(万人)')
plt.xticks(range(4),label[2:6])
plt.title('2015年人口数据特征间的关系直方图')
plt.savefig('./tmp/1996与2015年人口数据特征间关系直方图.png')
plt.show()

#饼状图画布
p2=plt.figure(figsize=(15,15)) #设置画布
explode=np.linspace(0.01,0.01,4)
p2.add_subplot(2,1,1)
plt.title('1996年人口数据特征间的关系饼图')
plt.pie(values[0,2:6],explode=explode,labels=label[2:6],autopct='%1.1f%%')
p2.add_subplot(2,1,2)
plt.title('2005年人口数据特征间的关系饼图')
plt.pie(values[-1,2:6],explode=explode,labels=label[2:6],autopct='%1.1f%%')
plt.savefig('./tmp/1996与2015年人口数据特征间关系饼状图.png')
plt.show()

#箱线图画布
p2=plt.figure(figsize=(8,8)) #设置画布
plt.title('1996-2015年人口数据特征间的关系箱线图')
gdp=(list(values[:,2]),list(values[:,3]),list(values[:,4]),list(values[:,5]))
plt.boxplot(gdp,notch=True,labels=label[2:6],meanline=True)
plt.savefig('./tmp/1996~2015年人口数据特征间关系箱线图.png')
plt.show()

Matplotlib【学习大礼包】数据可视化基础 掌获绘图基础语法与常用参数、设置pyplot的动态rc参数、 绘制散点图、折线图、直方图、饼图相关推荐

  1. python绘制折线图显示数据_漂亮图表也可用python信手拈来!一文教你学会用Python绘制堆积折线图...

    今天,和大家聊聊关于Python绘图相关的东东哦,还是和大家继续深耕Python经典的matplotlib库哦! 好啦,咱们就开始吧! 首先,咱们聊聊如何在Python中去绘制经典的堆积折线图 到这可 ...

  2. matplotlib 折线图_漂亮图表也可信手拈来,一文学会用Python绘制堆积折线图

    今天咱们还是接着上次的话题,继续和大家聊聊关于Python绘图相关的东东哦,上次已经和大家讨论完了如何给自己所绘制的图表中添加装饰线以及修改装饰线密度的方法,今天呢,咱们再聊点的新的东东哦,还是和大家 ...

  3. Matplotlib可视化②——3D绘制散点图曲面图折线图等高线图

    公众号: 数据小斑马,关注即可获得价值1000元的数据分析学习资料 数据可视化系列汇总: Matplotlib可视化①--二维图表绘制(折线图&直方图&散点图&条形图& ...

  4. python第三方库matplotlib绘制简单折线图

    一.绘制简单折线图 代码如下: import numpy as np import matplotlib.pyplot as plt X = [0, 1, 2, 3, 4, 5] Y = [222, ...

  5. python matplotlib 地图_Python数据可视化,看这篇就够了

    说到python的常见应用,很多人会想到python的数据分析,作为数据分析中的表现层面,数据可视化都是其中必不可少的部分.但本文并非只推荐无任何数据分析需求仅需要做漂亮可视化图表的人学习python ...

  6. python动态交互图表_Python 调用 matplotlib 实现交互式数据可视化图表案例

    交互式的数据可视化图表是 New IT 新技术的一个应用方向,在过去,用户要在网页上查看数据,基本的实现方式就是在页面上显示一个表格出来,的而且确,用表格的方式来展示数据,显示的数据量会比较大,但是, ...

  7. Matplotlib库-Python数据可视化

    Matplotlib基础 Matplotlib库介绍 Matplotlib是Python的绘图库,是和交互式的进行制图,而且可以方便的将它作为绘图软件,嵌入GUI应用程序中 Matplotlib库由各 ...

  8. Python matplotlib模块实现数据可视化

    Python matplotlib模块实现数据可视化 代码如下: # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import nump ...

  9. matplotlib对excel数据可视化

    数据可视化 对excel文件中的数据进行分析和可视化 1.数据的获取 ​ 从https://datacatalog.worldbank.org/dataset/gender-statistics网站下 ...

最新文章

  1. 浅谈DNS体系结构:DNS系列之一
  2. 数据回归分析和拟合的Matlab实现
  3. 手把手教你写C语言的动态库的开发
  4. php鼠标经过显示文本,CSS_HTML和CSS做网页实例教程:鼠标滑过文字改变,关于HTML+CSS的实例效果很多, - phpStudy...
  5. 超级酒吧女生Java下载_超真实分享:一个人去酒吧的经验+注意事项
  6. Nginx的error_page指令
  7. lwIP ARP协议分析
  8. 这就是搜索引擎:核心技术详解
  9. 一文讲清,MySQL中的二级索引
  10. Django SCRF跨站点请求伪造
  11. 大二下周总结(14)
  12. Centos7下MySql升级
  13. 关于HC05 蓝牙模块与与蓝牙模块连接
  14. java代码实现龙卷风_程序设计-理解java继承-遁地龙卷风
  15. 2021年 个人年度总结
  16. 在Python中以foo.bar.baz的方式访问嵌套dict中的内容
  17. 华为鸿蒙即兴评述,华为的理性,鸿蒙的节奏
  18. (转) Exploring How Cache Coherency Accelerates Heterogeneous Compute
  19. @Transactional注解怎么使用?
  20. lua 阿拉伯数字转大写(一)

热门文章

  1. iFunk翼巧变革,定义新基准
  2. element属性总结
  3. 大数据计算系统学习笔记
  4. 「蓝桥杯」完全平方数(Java)
  5. 息县装修“黑白风格”
  6. 力扣49题 字母异位词分组
  7. 站在巨人的肩膀上--同时要怀疑巨人
  8. 如何设置wordpress多语言站点
  9. Go实现在线词典翻译(三种翻译接口,结合sync)
  10. sql server 统计信息