目录
前言
学习matplotlib有一段时间了,总感觉学不到本质的东西,抓不到主要的重点,还是感觉有些吃力,画的图千变万化,总不能一一学会吧,今天我们就来总结一下,matplotlib本质的东西,让我们更能在全局上掌握matplotlib库。
(一)总框架分析
在matplotlib库里,总分成两种绘图方法
- 方法一:函数式绘图
- 方法二:面向对象式绘图
(二)函数式的绘图
1.说明:
在matplotlib.pyplot里是封装好的函数,用户可以直接调用函数进行绘图。
一般的,我们约定 matplotlib.pyplot 取别名为 plt
其模块下主要定义如下两方面的函数:
- 操作类的函数:对于画布,图,子图,坐标轴,图例,背景,网格等的操作。
如:plt.ylabel(), plt.xlabel(), plot.yscale(), plt.legend(), plt.title(), plt.text()……
- 绘图类的函数:画折线图,散点图,条形图,直方图,饼状图等特点图的绘制函数。
如:plt.scatter, plt.plot(), plt.bar, plot.pie(), plt.hise()……
具体可以参考官方网站
2.函数绘图的缺优点
(1)缺点:
其实函数式的绘图本质上还是在matplotlib对象的封装,在对象的基础上多了一层函数的调用,
其定制性并不是很强,都是封装好的函数。
(2)优点:
适合一般用户绘图,要求不是很高,定制性不是很强的绘图。
新手容易上手,不需要了解内部的对象问题。
3.绘图类的函数
matplotlib绘图不止这些,在此只举例了大部分
序号 | 绘图函数(plt.xxx) | 说明 |
---|---|---|
1 | acorr() |
绘制x的自相关图 |
2 | angle_spectrum() |
绘制角度谱图 |
3 | bar() |
制作条形图 |
4 | barbs() |
绘制倒钩的二维场图 |
5 | barh() |
制作水平条形图。 |
6 | boxplot() |
制作一个盒子和胡须图 |
7 | broken_barh() |
绘制一个水平的矩形序列图 |
8 | clabel() |
绘制等高线图 |
9 | cohere() |
绘制x和y之间的一致性图 |
10 | csd() |
绘制交叉谱密度图 |
11 | eventplot() |
绘制相同的平行线 |
12 | fill() |
绘制填充多边形图 |
13 | hexbin() |
制作六边形分箱图 |
14 | hist() |
绘制直方图 |
15 | hist2d() |
制作2D直方图 |
16 | magnitude_spectrum() |
绘制幅度谱图 |
17 | phase_spectrum() |
绘制相位谱图 |
18 | pie() |
绘制饼图 |
19 | plot() |
绘制折线图 |
20 | plot_date() |
绘制包含日期的数据图 |
21 | quiver() |
绘制一个二维箭头场图 |
22 | scatter() |
绘制散点图 |
23 | specgram() |
绘制频谱图 |
24 | stackplot() |
绘制堆积区域图 |
25 | streamplot() |
绘制矢量流的流线型图 |
26 | triplot() |
绘制非结构化三角形网格作为线条图 |
4.操作类的函数
操作不止这些,在这只是举了大部分
序号 | 操作函数(plt.xxx) | 说明 |
---|---|---|
1 | arrow() |
向轴添加箭头 |
2 | axes() |
控制轴的范围 |
3 | axhline() |
在轴上添加水平线 |
4 | axhspan() |
在轴上添加水平跨度(矩形) |
5 | axvline() |
在轴上添加垂直线 |
6 | axvspan() |
在轴上添加垂直跨度(矩形) |
7 | box() |
打开或关闭轴框 |
8 | figlegend() |
在图中放置一个图例 |
9 | figtext() |
添加文字到图 |
10 | grid() |
配置网格线 |
11 | legend() |
在轴上放置图例 |
12 | locator_params() |
控制轴的刻度紧密度。 |
13 | loglog() |
在x轴和y轴上绘制具有对数缩放的绘图 |
14 | margins() |
设置绘图到框的边距 |
15 | minorticks_on() |
在轴上显示次要刻度 |
16 | minorticks_off() |
从轴上移除次要刻度 |
17 | subplot() |
在当前图中添加子图 |
18 | subplot2grid() |
在常规网格内的特定位置创建轴 |
19 | subplots() |
创建一个图形和一组子图 |
20 | subplots_adjust() |
调整子图布局 |
21 | suptitle() |
为图中添加居中标题 |
22 | table() |
将表添加到当前轴 |
23 | text() |
向轴添加文本 |
24 | tick_params() |
更改刻度,刻度标签和网格线的外观 |
25 | title() |
设置轴的标题 |
26 | twinx() |
制作共享x轴的第二个轴 |
27 | twiny() |
制作共享y轴的第二个轴 |
28 | xlabel() |
设置x轴的标签 |
29 | xlim() |
获取或设置当前轴的x限制 |
30 | xscale() |
设置x轴刻度 |
31 | xticks() |
获取或设置当前刻度线位置和x轴标签 |
32 | ylabel() |
设置y轴的标签 |
33 | ylim() |
获取或设置当前轴的y限制 |
34 | yscale() |
设置y轴刻度 |
35 | yticks() |
获取或设置y轴的当前刻度位置和标签 |
5.例子:
(1)源代码
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2)
# 绘图
plt.plot(x, y)
# 显示
plt.show()
(2)显示效果
(三)面向对象式的绘图
1.基本概念
面向对象式的绘图,才是matplotlib绘图最自然的方式,不过需要先了解一些基本的概念。
可参考官方介绍:https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py
下图是matplotlib基本的组成部分
figure(图形)
axes(子图形)
title(标题)
legend(图例)
Major tick(大标尺刻度)
Minor tick(小标尺刻度)
Major tick label(大标尺刻度数值)
Minor tick label(小标尺刻度数值)
Y axis label(y轴指标说明)
X axis label(x轴指标说明)
Line(线型图)
Markers(数据标注点)
Grid(格子)等等
2.基本对象
(1)Figure
- 整个图形即是一个Figure对象,即一个弹出的绘图的窗口,便是一个figure。
- Figure对象至少包含一个子图,也就是Axes对象。
- Figure对象包含一些特殊的Artist对象,如title标题、图例legend。
- Figure对象包含画布canvas对象。 canvas对象一般不可见,通常无需直接操作该对象,matplotlib程序实际绘图时需要调用该对象。
(2)Axes
- 字面上理解,axes是数据轴axis的复数,但它并不是指数据轴,而是子图对象。可以这样理解,每一个子图都有x和y轴,axes则用于代表这两个数据轴所对应的一个子图对象。
- 常用方法set_xlim()以及set_ylim():
- 设置子图x轴和y轴对应的数据范围。
- set_title():设置子图的标题。
- set_xlabel()以及set_ylable():
- 设置子图x轴和y轴指标的描述说明。
(3)Axis
- Axis是数据轴对象,主要用于控制数据轴上刻度位置和显示数值。
- Axis有Locator和Formatter两个子对象,分别用于控制刻度位置和显示数值。
(4)Artist
- 基本上所有的对象都是一个Artist对象,包括Figure对象、Axes对象和Axis对象,可以将Artist理解为一个基本类。
- 当提交代码,图像最终呈现时,所有的artist对象都会绘制于canvas画布上
层级结构图:
(yaxis同样有tick, label和tick label,没有画出)
3.面向对象式绘图的缺优
(1)缺点:
对于新手不友好,感念混淆,不易掌握,上手慢。
(2)优点:
可定制性强,灵活,自然,流畅。
4.例子:
(1)源代码
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 数据
x = np.linspace(0, 2*np.pi, 1000)
y = np.sin(x**2)
# 创建一张图
fig, ax = plt.subplots(1, 1)
plt.plot(x, y)
# 显示
plt.show()
(2)输出效果
[图片上传失败...(image-66cc5e-1552302327631)]
参考网站
【1】python matplotlib画图教程学习:使用介绍https://baijiahao.baidu.com/s?id=1614559225877861604&wfr=spider&for=pc
【2】matplotlib核心剖析:https://blog.csdn.net/zchshhh/article/details/78215646