1. matplotlib 两种接口
matplotlib 有两种接口:基于 MATLAB 的和基于面向对象的。基于 MATLAB 的是 pyplot 提供的,比较简单,但容易混乱;基于面向对象的方法结构清晰,是matplotlib 的精髓。
-
基于 MATLAB 的:自动创建和管理图和坐标系,用 pyplot 函数作图
-
基于面向对象的:显示创建图和坐标系,再调用对象的方法来作图
Python中,万物皆对象,为了高效作图,我们首先需要做的就是学习使用面向对象的接口:
-
容器类:画布(figure)、坐标系(axes)、坐标轴(axis)
-
基础类:线(line)、文本(text)、图例(legend)
-
可设置的样式:刻度(ticker)、点(marker)、网格(grid)、标题(title)
简单来说,figure 是画布,axes 是画布上一个个区域,所有线、点、文字等基础类元素都是寄生在容器类元素上的。
官网也贴心地给出了这些对象的关系,一目了然:

使用面向对象接口时,正确的作图流程应该是:
- 创建
Figure实例 - 在
Figure上创建Axes - 在
Axes上添加基础类对象
或者简化为:
- 创建
Figure对象和Axes对象; - 为每个容器类元素添加基础类元素。
再浓缩成指导思想就是:
- 先找对象
- 再解决问题
打个比方,画图时你需要拿出一张素描纸,这就是创建画布,然后在这张纸上你想画碧海、蓝天、凉亭,你肯定事先会设计在哪个地方画这些内容,你决定的每个元素的放置位置就是在划分子图,而你决定好在哪画之后其实等价于在该子图位置创建了坐标系。后面就容易理解了,你的绘图等价于在子图的坐标系上绘图、添加图例、添加标题等。最后,对于坐标轴的样式(是否显示、刻度范围、刻度标签等),可以通过坐标系对象的方法,得到坐标轴对象,通过坐标轴对象的方法设置。
2. Figure 对象
这个函数是最基本的创建画布的函数,后面创建多子图的画布时,每个子图内部调用的也是这个函数
import matplotlib.pyplot as plt
fig = plt.figure(
num=1, # 图形的唯一标识符,一般用不到
figsize=(6, 6), # 画布大小, (Width, height),单位:inches
dpi=300, # 图像分辨率
facecolor='w', # 背景色,是画布底下图层的颜色,默认白色
linewidth=0, # 画布边框的宽度,默认 0,无边框
edgecolor='w', # 边框颜色,要设置 linewidth 较大时才能看见,默认白色
frameon=True, # 默认值 True 为绘制边框,如果为 False 则不绘制边框
)
matplotlib官方并没有很好地分离pyplot函数和面向对象的函数,创建画布还是要用pyplot的函数
Figure 对象 fig 的常用方法
| 方法 | 功能 |
|---|---|
fig.get_axes() | 返回该画布中所有子图坐标系对象的列表 |
fig.gca() | 获取当前的坐标系,当有多个子图时,画图时切换到一个个子图画的,该函数就返回当时所在的坐标系对象 |
fig.colorbar(mappable, cax, ax) | mappable:cm.ScalarMappable(cmap='jet')cax:colorbar 画在哪个坐标系中ax:针对哪个坐标系匹配的 colorbar该函数返回一个 matplotlib.colorbar.Colorbar 对象 |
fig.legend() | 给整个画布插入统一的图例,返回一个 matplotlib.legend.Legend 对象 |
fig.show() | 类似 plt.show(),将画布显示出来 |
fig.add_subplot(122) | 插入一张子图,位置在将画布划分为 1 行 2 列后的第 2 个位置,也可以指定 GridSpec 对象的切片位置返回当前子图的 Axes 对象 |
fig.subplots(nrows=2,ncols=2) | 创建 2 行 2 列的子图,返回每个子图 Axes 对象的数组 |
fig.suptitle("视图名称") | 给整个画布添加统一的图名,居中显示 |
fig.text(x, y, s) | 在画布的指定位置添加文本,x,y 在 0−10-10−1 之间分别表示 width 和 height 的百分比长度,相对于原点 |
fig.add_gridspec(nrows, ncols) | 返回一个基于 fig 划分的 nrows行 ncols 列的 GridSpec 对象 |
3. Axes 对象
Axes 对象 axes 的常用属性和方法如下:
Plotting
-
Basic
各种基本的画图函数,很简单,官网自取使用方式
-
Spans
-
xes.axhline(y, xmin, xmax)画一条水平线,(xmin,y)(xmin,y)(xmin,y) 到 (xmax,y)(xmax,y)(xmax,y)
xmin、xmax都是百分比长度 -
axes.axvline(x, ymin, ymax)画一条垂直线,(x,ymin)(x,ymin)(x,ymin) 到 (x,ymax)(x,ymax)(x,ymax)
ymin、ymax都是百分比长度 -
axes.axhspan(ymin, ymax, xmin, xmax)画一个水平的矩形覆盖范围,y 是实际坐标,x 是百分比坐标
-
axes.axvspan(xmin, xmax, ymin, ymax)画一个垂直的矩形覆盖范围,x 是实际坐标,y 是百分比坐标
-
axes.axline(xy1, xy2, slope=1)或一条直线,第一个点
xy1必须,第二个点坐标xy2或者斜率slope任意给一个即可xy1和xy2都是tuple,第一个元素是横坐标,第二个元素是纵坐标
-
-
Contours
axes.contourf():该方法根据给定数据画出等高线并填充
-
Array
axes.imshow():可视化图片,单通道、三通道、四通道
-
Text and Annotations
-
axes.annotate(text, xy)用
text注释点xy,xy是元组,详细用法需要时查官网手册 -
axes.text(x, y, s)在该
axes所在子图指定位置添加文本 -
axes.table()画表格的方法,目前没用过,可以查官网手册
-
axes.arrow(x, y, dx, dy)画起点 (x,y)(x, y)(x,y) 终点 (x+dx,y+dy)(x+dx, y+dy)(x+dx,y+dy) 的箭头
-
Axes.inset_axes()不确定要不得到,功能如图:

-
-
Fields
-
axes.barbs()
-
axes.quiver():

-
Appearance
-
axes.axis()axes.axis('off'):关闭坐标轴显示,其上刻度标签、刻度线这些都会隐藏,等价于axes.set_axis_off()axes.axis('on'):打开关闭内容,等价于axes.set_axis_on()
-
axes.set_frame_on(True)设置坐标系的上下左右四个轴是否显示,如隐藏,标签刻度仍然会显示
-
axes.get_frame_on(True)返回四个轴是否显示
-
axes.grid(b, which='major', axis='both')b:bool类型,表示是否显示网格线which:major、minor、both,显示哪些刻度的网格线axis:x、y、both,显示哪些轴的网格线 -
axes.set_facecolor(color)设置坐标系四个轴围起来区域的背景色
-
axes.get_facecolor()返回坐标系的背景色,rgba 格式
Axis / limits
💥axes.get_xaxis():返回一个 XAxis 实例
💥axes.get_yaxis():返回一个 YAxis 实例
-
Axis limits and direction
-
axes.invert_xaxis()逆置 x 轴
-
axes.invert_yaxis()逆置 y 轴
-
axes.set_xlim(left, right)设置 x 轴显示范围
-
axes.set_ylim(left, right)设置 y 轴显示范围
-
-
Axis labels, title, and legend
-
axes.set_xlabel(label)给 x 轴设置名称
-
axes.set_ylabel(label)给 y 轴设置名称
-
axes.set_title(title)给当前坐标系的子图设置图名
-
axes.legend()给当前坐标系添加图例
-
-
Ticks and tick labels
-
axes.set_xticks(ticks_list)和axes.set_yticks(ticks_list)设置要显示的主要刻度
-
axes.set_xticklabels(labels)和axes.set_yticklabels(labels)替换显示的主刻度的标签,比如原来是 1~20,我替换成 20~40 显示
-
axes.minorticks_off()和axes.minorticks_on()坐标系(不)显示 minor 刻度
-
axes.tick_params(args)更改刻度线,刻度线标签和网格线的外观
-
-
Twinning
-
axes.twinx()和axes.twiny()创建一个新的坐标系,该坐标系的 x 轴不可见,而独立的 y 轴与原始轴相反(即在右侧)
创建一个新的坐标系,该坐标系的 y 轴不可见,而独立的 x 轴与原始轴相反(即在上侧)
此类方法返回新的
Axes对象
-
4. Axis 对象
Axis 对象 axis 的常用属性和方法如下:
-
Formatters and Locators
axis.set_major_locator()axis.set_major_formatter()axis.set_minor_locator()axis.set_minor_formatter()axis.set_tick_params():设置刻度的位置等axis.set_ticks_position():设置刻度线出现的位置(上下左右)
设置主次刻度及其标签的格式的,需要时查这里的用法
-
Grid
axis.grid():只在该轴显示网格线
Axis对象一般都是修改坐标轴的样式
5. 常用的公用属性
这些属性可以用在多个函数的参数中,含义是一样的,都是用来调整样式
5.1 line 相关属性
-
linestyle或ls线型

-
linewidth或lw设置线宽,浮点数值
5.2 marker 相关属性
-
marker标记样式

特别地,标记有 mathtext 模式,可以通过 latex 公式输入指定的图案

-
markersize或msmarker 的大小
-
fillstylemarker 填充样式

-
markeredgecolor或mecmarker 的边缘颜色
-
markeredgewidth或mewmarker 的边缘宽度
-
markerfacecolor或mfcmarker 的填充颜色
5.3 color 相关属性
-
color或cb或blue:蓝色g或green:绿色r或red:红色c或cyan:蓝绿色m或magenta:洋红y或yellow:黄色k或black:黑色w或white:白色
也可以用十六进制 RGB 表示,如
"#AE2323" -
alpha透明度,0-1 之间
5.4 text 相关属性
-
fontfamily或family设置文本字体名称,如
‘serif’、‘sans-serif’、‘Microsoft YaHei’ -
fontsize或size字体大小
-
fontstyle或style设置字体样式
normal:正常显示italic:斜体oblique:倾斜
-
fontweight或weight设置字体粗细,如
‘normal’、‘bold’等 -
horizontalalignment或ha水平方向对齐方式:
'center'、'right'、'left' -
color文本颜色
-
backgroundcolor文本区域的背景色
-
position(x,y)的元组 -
rotation文本的旋转,传一个在数学上为正的方向(逆时针)的旋转角度(以度为单位)。“水平”等于0,“垂直”等于90。
6 正确显示中文和负号
plt.rcParams[‘font.sans-serif’] = [‘SimHei’] # 用来正常显示中文标签
plt.rcParams[‘axes.unicode_minus’] = False # 用来正常显示负号
429

被折叠的 条评论
为什么被折叠?



