【 Matplotlib绘图】

Matplotlib介绍

Matplotlib是Python中最常用的可视化工具之一,可以非常方便地创建海量类型的2D图表和一些基本的3D图表,可根据数据集(DataFrame,Series)自行定义x,y轴,绘制图形(线形图,柱状图,直方图,密度图,散布图等等),能够满足大部分需要。

  • Matplotlib最早是为了可视化癫痫病人的脑皮层电图相关的信号而研发,因为在函数的设计上参考了MATLAB,所以叫做Matplotlib。
  • 官方文档: https://matplotlib.org/
  • Matplotlib中最基础的模块是pyplot。

基本绘图流程

根据Matplotlib图像的4层图像结构,pyplot模块绘制图形基本都遵循一个流程,使用这个流程可以完成大部分图形的绘制。pyplot模块基本绘图流程主要分为3个部分,如下图所示。
在这里插入图片描述

1.创建画布与创建子图

第一部分主要是构建出一张空白的画布,如果需要同时展示几个图形,可将画布划分为多个部分。然后使用对象方法来完成其余的工作,示例如下。

pic = plt.figure(figsize=(8,7), dpi = 80)  # 创建画布,尺寸为8×7,像素值为80
ax1 = pic.add_subplot(2, 1, 1)  # 划分为2×1图形阵,选择第1张图片

2.添加画布内容

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

3.图形保存与展示

函数名称函数介绍
plt.savafig保存绘制的图片,可以指定图片的分辨率、边缘的颜色等参数。
plt.show在本机显示图形。

设置pyplot的动态rc参数

pyplot使用rc配置文件来自定义图形的各种默认属性,被称为rc配置或rc参数。 由于默认的pyplot字体并不支持中文字符的显示,因此需要通过设置font.sans-serif参数改变绘图时的字体,使得图形可以正常显示中文。同时,由于更改字体后,会导致坐标轴中的负号无法显示,因此需要同时更改axes.unicode_minus参数。

  • plt.rcParams[‘font.sans-serif’] = ‘SimHei’ ## 设置中文显示
  • plt.rcParams[‘axes.unicode_minus’] = False
  • rc参数还可以设置文本、箱线图、坐标轴、刻度、图例、标记、图片、图像保存等属性。

线条常用的rc参数
针对线条常用的rc参数名称、解释与取值如下表所示。
在这里插入图片描述
其中lines.linestyle参数4种取值的意义如下表所示。
在这里插入图片描述
lines.marker参数的20种取值及其所代表的意义,如下表所示。
在这里插入图片描述
管理线条属性的rc参数lines几乎可以控制线条的每一个细节,线条常用的rc参数修改前后对比示例如下代码所示。

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
pic = plt.figure(dpi = 80, figsize = (6, 6))
x = np.linspace(0, 1, 1000)
# 绘制第一张图(从左往右从上到下)
pic.add_subplot(2, 2, 1)  # 绘制2×2图形阵中第1张图片
plt.rcParams['lines.linestyle'] = '-.'  # 修改线条类型
plt.rcParams['lines.linewidth'] = 1  # 修改线条宽度
plt.plot(x, x ** 2)
plt.title('y = x^2')
# 绘制第二张图
pic.add_subplot(2, 2, 2)
mpl.rc('lines', linestyle = '--', linewidth = 10)  # 以matplotlib.rc()函数命令方式修改rc参数
plt.plot(x, x ** 2)
plt.title('y = x^2')
# 绘制第三张图
pic.add_subplot(2, 2, 3)
plt.rcParams['lines.marker'] = None  # 修改线条上点的形状
plt.rcParams['lines.linewidth'] = 3
plt.plot(x, x ** 2)
plt.title('y = x^2')
# 绘制第四张图
pic.add_subplot(2, 2, 4)
plt.rcParams['lines.linestyle'] = ':'
plt.rcParams['lines.linewidth'] = 6
plt.plot(x, x ** 2)
plt.title('y = x^2')
plt.savefig('线条rc参数对比.png')#保存图片
plt.show()

运行结果:
在这里插入图片描述
坐标轴常用的rc参数
同样,管理坐标轴属性的rc参数axes也能控制坐标轴的任意细节。坐标轴常用的rc参数修改如下所示。

x = np.linspace(0, 10, 1000)
plt.rcParams['axes.edgecolor'] = 'b'  # 轴颜色设置为蓝色
plt.rcParams['axes.grid'] = True  # 添加网格
plt.rcParams['axes.spines.top'] = False  # 去除顶部轴
plt.rcParams['axes.spines.right'] = False  # 去除右侧轴
plt.rcParams['axes.xmargin'] = 0.1  # x轴余留为区间长度的0.1倍
plt.plot(x, np.sin(x))
plt.show()

运行结果:
在这里插入图片描述
更多的坐标轴常用的rc参数名称、解释、取值如下表所示
在这里插入图片描述

分析特征关系常用图形

1.散点图

散点图(Scatter Diagram)又称为散点分布图,是以利用坐标点(散点)的分布形态反映特征间的相关关系的一种图形。实际中一般使用二维散点图,通过散点的疏密程度和变化趋势表示两个特征间关系。散点图有以下3个特点:
· 表现特征之间是否存在数值或者数量的关联趋势,关联趋势是线性的还是非线性的。
· 凸显出离群点(异常点),及对整体的影响。
· 数据量越大,能发挥的作用越好。
pyplot模块中使用scatter函数绘制散点图,其使用语法如下:
在这里插入图片描述scatter函数常用参数及其说明如下表所示。
在这里插入图片描述
使用scatter函数绘制2000~2017年各季度的国民生产总值散点图,如下代码所示。

import matplotlib.pyplot as plt
import numpy as np
data = np.load('./数据/国民经济核算季度数据.npz',allow_pickle=True)
name = data['columns']  # 提取columns数组,视为数据的标签
values = data['values']  # 提取values数组,数据的存在位置
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize = (8, 7)) 
plt.scatter(values[: ,0], values[: , 2], marker = 'o')
plt.xlabel('年份') 
plt.ylabel('生产总值(亿元)') 
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()

运行结果:
在这里插入图片描述

2.折线图

折线图(Line Chart)是将“散点”按照横坐标顺序用线段依次连接起来的图形。以折线的上升或下降,表示某一特征随另外一特征变化的增减以及总体变化趋势。一般用于展现某一特征随时间的变化趋势。pyplot模块中使用plot函数绘制折线图,其使用语法如下。

  • matplotlib.pyplot.plot(*args, **kwargs)
    plot函数在官方文档的语法中只要求填入不定长参数,实际可以填入的主要参数,如下表所示。
    在这里插入图片描述
    其中color参数的8种常用颜色的缩写如下表所示。
    在这里插入图片描述
    使用plot函数绘制2000~2017年各产业第一季度季度生产总值折线图,如下代码所示。
plt.rcParams['font.sans-serif'] = 'SimHei' 
plt.rcParams['axes.unicode_minus'] = False
plt.figure(dpi = 80, figsize = (8, 8))
y1 = values[: : 4, 3]
y2 = values[: : 4, 4]
y3 = values[: : 4, 5]
plt.plot(range(len(y1)), y1, linestyle = '-')
plt.plot(range(len(y2)), y2, linestyle = '--')
plt.plot(range(len(y3)), y3)
plt.xticks(range(len(y3)), values[: : 4, 1], rotation = 45)
plt.title('2000~2017年各产业第一季度折线图')
plt.legend(['第一产业', '第二产业', '第三产业'])
plt.savefig('各产业第一季度折线图.png')
plt.show()

运行结果:
在这里插入图片描述

分析特征内部数据状态常用图形

1.直方图

直方图(Histogram)又称频数直方图,由一系列宽度相等、长度不等的长方形来展示特征的频数情况。长方形的宽度表示组距(数据范围的间隔),长度表示在给定间隔内的频数(或频率)与组距的比值,以长方形的面积来表示频数(或频率)。由于分组数据具有连续性,直方图的长方形通常是连续排列的。直方图可以比较直观地展现特征内部数据,便于分析其分布情况。
pyplot中使用hist函数绘制直方图,其基本使用语法如下。
在这里插入图片描述
hist函数常用参数及其说明如下表所示。
在这里插入图片描述
实例如下

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize = (8, 6), dpi = 100)
mu = 0
sigma = 1
x = np.random.normal(mu, sigma, 10000)  # 生成10000个服从标准正态分布数据
plt.hist(x, bins = 20, density = True, rwidth = 0.96)  # 绘制直方图
plt.title('标准正态分布数据直方图')
plt.savefig('标准正态分布数据直方图.png')
plt.show()

运行结果:
在这里插入图片描述

2.柱状图

  • 柱状图(bar chart)是一种以长方形的长度为变量的统计图表。长条图用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。长条图亦可横向排列,或用多维方式表达。
  • 柱状图有别于直方图,柱状图无法显示数据在一个区间内的连续变化趋势。柱状图描述的是分类数据,回答的是每一个分类中『有多少?』这个问题。 需要注意的是,当柱状图显示的分类很多时会导致分类名重叠等显示问题。

pyplot中使用bar函数绘制条形图,其基本使用语法如下。
在这里插入图片描述
bar函数在官方文档中只要求输入不定长参数,但其主要参数如下表所示。
在这里插入图片描述

x = values[-1,3:6]
plt.bar(range(3),x,width = 0.5)
plt.title('2017年第一季度三大产业生产总值')
plt.xlabel('类别')
plt.ylabel('生产总值(亿元)')
plt.xticks(range(3),['第一产业','第二产业','第三产业'])
plt.show()

运行结果:
在这里插入图片描述

3.饼图

饼图(Pie Graph)用于表示不同类别的占比情况,通过弧度大小来对比各种类别。饼图通过将一个圆饼按照类别的占比划分成多个区块,整个圆饼代表数据的总量,每个区块(圆弧)表示该分类占总体的比例大小。饼图可以比较清楚地反映出部分与部分、部分与整体之间的比例关系,易于每个类别相对于总数的大小。但因为对于面积大小的不敏感,某些情况下效果不是很好。
pyplot模块中使用pie函数绘制饼图,其使用语法如下。
在这里插入图片描述
pie函数常用参数及其说明如下表所示。
在这里插入图片描述

x = values[-1,3:6]
plt.title('2017年第一季度三大产业生产总值分布情况')
plt.pie(x,labels=['第一产业','第二产业','第三产业'],autopct='%0.2f%%',explode = [0.1,0,0])
plt.show()

运行结果:
在这里插入图片描述

4.箱线图

  • 箱线图(Box Plot)又称箱须图,是利用数据中的最小值、上分位数、中位数、下四分位数与最大值这5个统计量来描述连续型特征变量的一种方法。它也可以粗略地看出数据是否具有对称性分布的分散程度等信息,特别可以用于对几个样本的比较。
  • 箱线图的上边缘为最大值,下边缘为最小值,但范围不超过盒型各端加1.5倍IQR(四分位距,即上四分位数与下四分位数的极差)的距离。超出上下边缘的值即视为异常值

pyplot模块中使用boxplot函数绘制箱线图,其基本使用语法如下。
在这里插入图片描述
boxplot函数常用参数及其说明如下表所示。
在这里插入图片描述

data = np.load('./数据/国民经济核算季度数据.npz',allow_pickle=True)
data.files#含有columns和values两个数组
values = data['values']  # 提取values数组,数据的存在位置
x = values[:,3:6]
plt.title('三大产业分布情况')
plt.xlabel('类别')
plt.ylabel('分布')
plt.boxplot(x,labels=['第一产业','第二产业','第三产业'])
plt.show()

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白哒哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值