在学习 Matplotlib 时,初学者往往会先接触几个最常用的绘图函数,例如 plot()、scatter()、bar()。随着使用逐渐深入,又会接触到图形创建、子图布局、标题设置、图例控制、图像保存以及全局样式配置等内容。
因此,有必要把常用函数按功能重新整理,形成一份可检索、可对照、可反复查阅的基础手册。
一、图形创建与布局
这一组函数主要负责创建图形对象、建立绘图区以及安排多个子图的布局。它们解决的问题不是"画什么",而是"图放在哪里画"。
figure()
用于创建一个 Figure 对象,即整个图形画布。通常在需要显式控制图像尺寸、分辨率或背景颜色时使用。
python
plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)
参数说明:
• num:图形编号或名称
• figsize:图形尺寸,形式为 (宽, 高),单位为英寸
• dpi:图像分辨率
• facecolor:图形背景颜色
javascript
'white':白色'black':黑色'gray':灰色'none':不显示颜色(常用于需要透明效果的场景)十六进制颜色,如 '#87ceeb'RGB / RGBA 元组,如 (1, 1, 1)、(1, 1, 1, 0.5)
• edgecolor:图形边框颜色,选项同上
返回值:返回一个 Figure 对象。
示例:
apache
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(6, 4), dpi=120)plt.show()
说明:
在简单绘图中,即使不显式调用 figure(),Matplotlib 也会自动创建默认图形;但在需要控制图像属性时,显式创建 Figure 会更清楚。
subplot()
用于在一个 Figure 中创建并切换到指定位置的子图。
perl
plt.subplot(nrows, ncols, index, **kwargs)
参数说明:
• nrows:子图总行数
• ncols:子图总列数
• index:当前子图编号,从 1 开始
• **kwargs:其它可选参数
返回值:返回一个 Axes 对象。
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)
plt.subplot(1, 2, 1)plt.plot(x, np.sin(x))plt.title("sin(x)")
plt.subplot(1, 2, 2)plt.plot(x, np.cos(x))plt.title("cos(x)")
plt.tight_layout()plt.show()
说明:
subplot() 属于状态式接口,适合较简单的多图布局。若图形结构较复杂,通常更推荐 subplots()。
subplots()
一次性创建 Figure 和一个或多个 Axes 对象,是 Matplotlib 中最常用的面向对象建图方式。
apache
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=None, dpi=None, **kwargs)
参数说明:
• nrows:子图行数
• ncols:子图列数
• figsize:图像尺寸
• dpi:图像分辨率
• **kwargs:其它可选参数
返回值:返回一个二元组:
css
fig:Figure 对象ax:Axes 对象或 Axes 数组
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots(1, 2, figsize=(8, 4))
ax[0].plot(x, np.sin(x))ax[0].set_title("sin(x)")
ax[1].plot(x, np.cos(x))ax[1].set_title("cos(x)")
plt.tight_layout()plt.show()
说明:
这是推荐优先掌握的函数之一。它不仅能创建单图,也能方便地创建规则排列的多子图结构。
add_subplot()
在已有的 Figure 对象上添加一个子图,并返回对应的 Axes 对象。
ini
ax = fig.add_subplot(nrows, ncols, index, **kwargs)
也可写为:
ini
ax = fig.add_subplot(121)
参数说明:
• nrows:子图总行数
• ncols:子图总列数
• index:当前子图编号,从 1 开始
• **kwargs:其它可选参数
返回值:返回一个 Axes 对象。
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)
fig = plt.figure(figsize=(8, 4))
ax1 = fig.add_subplot(1, 2, 1)ax1.plot(x, np.sin(x))ax1.set_title("sin(x)")
ax2 = fig.add_subplot(1, 2, 2)ax2.plot(x, np.cos(x))ax2.set_title("cos(x)")
plt.tight_layout()plt.show()
说明:
add_subplot() 更适合先创建 Figure,再按步骤逐个加入子图的场景。
axes()
用于创建一个 Axes 坐标区域。与规则网格布局不同,axes() 更适合手动指定绘图区位置。
ini
ax = plt.axes()
或:
ini
ax = plt.axes([left, bottom, width, height])
参数说明:
• 当使用列表参数时:
css
left:左边界位置bottom:下边界位置width:宽度height:高度
这些值一般采用相对于整个 Figure 的比例,通常在 0 到 1 之间。
返回值:返回一个 Axes 对象。
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)
plt.figure(figsize=(6, 4))
ax1 = plt.axes([0.1, 0.1, 0.8, 0.8])ax1.plot(x, np.sin(x))ax1.set_title("Main Plot")
ax2 = plt.axes([0.6, 0.55, 0.25, 0.25])ax2.plot(x, np.cos(x))
plt.show()
说明:
当需要嵌入小图或自定义不规则布局时,axes() 很有用。
subplots_adjust()
用于手动调整多个子图在画布中的位置和间距。
sql
plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
或:
sql
fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)
参数说明:
• left:所有子图区域左边界位置,占整个 Figure 宽度的比例
• bottom:所有子图区域下边界位置,占整个 Figure 高度的比例
• right:所有子图区域右边界位置,占整个 Figure 宽度的比例
• top:所有子图区域上边界位置,占整个 Figure 高度的比例
• wspace:子图之间的水平间距,相对于平均子图宽度的比例
• hspace:子图之间的垂直间距,相对于平均子图高度的比例。
官方文档说明,未设置的参数保持不变,其初始值来自 rcParams["figure.subplot.[name]"]。
返回值:无显式返回值,主要起布局调整作用。
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(0, 10, 100)
fig, ax = plt.subplots(2, 2, figsize=(8, 6))
ax[0, 0].plot(x, np.sin(x))ax[0, 1].plot(x, np.cos(x))ax[1, 0].plot(x, np.tan(x))ax[1, 1].plot(x, x)
plt.subplots_adjust(wspace=0.4, hspace=0.5)plt.show()
说明:
当多个子图之间过于拥挤,或需要更精细地控制四周留白时,subplots_adjust() 比 tight_layout() 更适合手动调整。
二、基础绘图函数
这一组函数直接负责把数据绘制成具体图形,是最核心的一类函数。
plot()
用于绘制二维折线图,也可通过参数控制点样式、线型和颜色。
python
plt.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
常见写法:
css
plt.plot(x, y, fmt)
参数说明:
• x:横坐标数据
• y:纵坐标数据
• fmt:格式字符串,用于简写颜色、标记和线型
• label:图例标签
• linewidth:线宽
• linestyle:线型
• marker:点标记样式
• color:颜色
返回值:返回一个由 Line2D 对象组成的列表。
示例:
javascript
import matplotlib.pyplot as pltimport numpy as np
x = np.arange(0, 10)y = x ** 2
plt.plot(x, y, marker="o", label="y = x^2")plt.legend()plt.show()
说明:
如果只传入一组数据,Matplotlib 会将其视为 y,并自动生成从 0 开始的整数索引作为 x。
scatter()
用于绘制散点图,适合观察两个变量之间的关系。
python
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, **kwargs)
参数说明:
• x:横坐标数据
• y:纵坐标数据
• s:点的大小
• c:点的颜色
• marker:点的形状
• cmap:颜色映射方案
go
viridis:Matplotlib 默认的常用渐变色,颜色层次清楚,适合大多数连续数据plasma:由深紫到亮黄,色彩对比更强inferno:由深色到亮黄,整体偏暖色调magma:由深紫到浅黄,视觉较柔和cividis:对比平稳,适合强调可读性coolwarm:冷暖对比明显,适合表现正负变化或中心对称数据jet:早期较常见,但颜色跳跃较大,一般不作为首选rainbow:彩虹渐变,视觉鲜艳,但不太适合严肃的数据表达
返回值:返回一个 PathCollection 对象。
示例:
apache
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]y = [5, 7, 6, 8, 7]
plt.scatter(x, y, s=80)plt.show()
说明:
如果需要通过颜色或大小再表示额外变量,散点图非常适合做多维信息表达。
bar()
用于绘制柱状图,适合比较不同类别的数据大小。
apache
plt.bar(x, height, width=0.8, bottom=None, align="center", **kwargs)
参数说明:
• x:类别位置或标签
• height:柱子的高度
• width:柱宽
• bottom:柱子起始位置
• align:对齐方式
javascript
'center':以 x 位置作为柱子的中心'edge':以 x 位置作为柱子的左边缘
• color:柱子颜色
• label:图例标签
返回值:返回一个 BarContainer 对象。
示例:
javascript
import matplotlib.pyplot as plt
categories = ["A", "B", "C", "D"]values = [18, 24, 15, 27]
plt.bar(categories, values, color="skyblue")plt.show()
说明:
柱状图主要用于类别比较,不适合表达连续变化趋势。
hist()
用于绘制直方图,展示数据在各个区间中的分布情况。
python
plt.hist(x, bins=None, range=None, density=False, **kwargs)
参数说明:
• x:输入数据
• bins:分箱数量或分箱边界
• range:统计区间
• density:是否归一化为概率密度
• color:颜色
• edgecolor:边框颜色
返回值:通常返回一个三元组:
go
每个箱中的计数值分箱边界数组柱形对象列表
示例:
kotlin
import matplotlib.pyplot as pltimport numpy as np
data = np.random.normal(0, 1, 1000)
plt.hist(data, bins=30, edgecolor="black")plt.show()
说明:
直方图与柱状图外形相似,但前者用于分布统计,后者用于类别比较。
imshow()
用于将二维数组或图像数据显示为图像。它既可以显示灰度图、彩色图,也常用于显示热力矩阵、像素矩阵或二维数值分布。
python
plt.imshow(X, cmap=None, interpolation=None, aspect=None, origin=None, **kwargs)
参数说明:
• X:输入数据,通常为二维数组,或形如 (M, N, 3)、(M, N, 4) 的图像数组
• cmap:颜色映射方案
• interpolation:插值方式
• aspect:控制坐标轴纵横比
• origin:设置原点位置,常见为 'upper' 或 'lower'
• vmin / vmax:颜色映射的取值范围
• alpha:透明度
返回值:返回一个 AxesImage 对象。
示例:
kotlin
import matplotlib.pyplot as pltimport numpy as np
data = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9]])
plt.imshow(data, cmap="viridis")plt.colorbar()plt.show()
说明:
imshow() 并不仅用于照片显示,也常用于可视化矩阵数据。例如相关系数矩阵、混淆矩阵、热力图等,都可以通过它直观呈现。
contour()
用于绘制等高线图。它把二维数值场中取值相同的点连接成线,常用于表现地形高度、温度分布、压力分布以及二维函数的等值区域。
python
plt.contour(X, Y, Z, levels=None, cmap=None, colors=None, linewidths=None, **kwargs)
参数说明:
• X、Y:网格坐标数据
• Z:二维数值矩阵,表示每个坐标点处的函数值
• levels:等高线的层级数量或具体层级值
• cmap:颜色映射方案
• colors:直接指定等高线颜色
• linewidths:线宽
• **kwargs:其它可选参数
返回值:返回一个 QuadContourSet 对象。
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(-3, 3, 100)y = np.linspace(-3, 3, 100)X, Y = np.meshgrid(x, y)Z = X**2 + Y**2
plt.contour(X, Y, Z, levels=8, cmap="viridis")plt.colorbar()plt.show()
说明:
contour() 只绘制等值线,不填充线与线之间的区域,因此更适合强调"轮廓结构"本身。它常用于数学函数可视化,也常见于地理信息、工程分析和科学计算场景。
contourf()
用于绘制填充等高线图。与 contour() 相比,它不仅绘制层级,还会用颜色填充不同层级之间的区域,因此更适合表现连续数值场的整体分布。
python
plt.contourf(X, Y, Z, levels=None, cmap=None, **kwargs)
参数说明:
• X、Y:网格坐标数据
• Z:二维数值矩阵
• levels:填充层级数量或具体层级值
• cmap:颜色映射方案
• **kwargs:其它可选参数
返回值:返回一个 QuadContourSet 对象。
示例:
apache
import matplotlib.pyplot as pltimport numpy as np
x = np.linspace(-3, 3, 100)y = np.linspace(-3, 3, 100)X, Y = np.meshgrid(x, y)Z = np.sin(X) * np.cos(Y)
plt.contourf(X, Y, Z, levels=20, cmap="coolwarm")plt.colorbar()plt.show()
说明:
如果希望更直观地表现数值区域的高低变化,通常 contourf() 比 contour() 更适合。实际使用中,也常把二者叠加:先用 contourf() 填色,再用 contour() 叠加轮廓线,以同时获得层次感与边界感。
errorbar()
用于绘制带误差线的图形。它常用于实验数据、测量数据或统计结果的可视化,以表示某个数据点的不确定性、波动范围或误差区间。
python
plt.errorbar(x, y, yerr=None, xerr=None, fmt='', ecolor=None, elinewidth=None, capsize=None, **kwargs)
参数说明:
• x:横坐标数据
• y:纵坐标数据
• yerr:纵向误差值
• xerr:横向误差值
• fmt:数据点和连线格式
• ecolor:误差线颜色
• elinewidth:误差线宽度
• capsize:误差线端帽长度
• **kwargs:其它可选参数
返回值:返回一个 ErrorbarContainer 对象。
示例:
apache
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]y = [2.0, 2.5, 3.7, 3.9, 5.1]err = [0.2, 0.3, 0.15, 0.25, 0.2]
plt.errorbar(x, y, yerr=err, fmt='o-', capsize=5)plt.show()
说明:
errorbar() 的核心不在于"再画一条线",而在于为数据增加"误差解释层"。在科研图表、统计分析图和实验报告中,它比普通折线图或散点图更能体现数据的可信区间与离散程度。
stem()
用于绘制茎叶图样式的离散序列图。它会从基线出发,为每个离散点绘制一条竖线,并在顶端标出数据点,适合表示脉冲信号、离散时间序列或整数索引上的数值变化。
python
plt.stem(*args, linefmt=None, markerfmt=None, basefmt=None, bottom=0, label=None)
常见写法:
css
plt.stem(x, y)
参数说明:
• x:横坐标数据
• y:纵坐标数据
• linefmt:茎线格式
• markerfmt:顶端标记格式
• basefmt:基线格式
• bottom:基线位置
• label:图例标签
返回值:通常返回一个包含标记线、茎线和基线的容器对象。
示例:
javascript
import matplotlib.pyplot as pltimport numpy as np
x = np.arange(0, 10)y = [1, 3, 2, 5, 4, 6, 3, 2, 4, 1]
plt.stem(x, y)plt.show()
说明:
stem() 与 plot() 的区别在于,它更强调"离散点逐个独立出现"的特征,而不是连续变化趋势。因此在数字信号处理、采样数据展示或离散数学场景中更常见。
pie()
用于绘制饼图,展示各部分占整体的比例。
python
plt.pie(x, explode=None, labels=None, colors=None, autopct=None, startangle=None, **kwargs)
参数说明:
• x:各部分数值
• explode:突出某些扇区
• labels:标签列表
• colors:颜色列表
• autopct:百分比显示格式
makefile
常见格式:autopct='%1.0f%%':整数百分比autopct='%1.1f%%':百分比,保留 1 位小数autopct='%1.2f%%':百分比,保留 2 位小数autopct='%1.3f%%':百分比,保留 3 位小数autopct=None:不显示数值autopct=函数名:用于显示更复杂的内容,如"百分比 + 原始值"
• startangle:起始角度
返回值:通常返回若干绘图对象,例如扇区对象和文本对象。
示例:
javascript
import matplotlib.pyplot as plt
sizes = [30, 40, 30]labels = ["A", "B", "C"]
plt.pie(sizes, labels=labels, autopct="%1.1f%%")plt.show()
说明:
当类别较多或比例差异较小时,饼图的可读性会下降,此时柱状图往往更清晰。
三、图形修饰函数
绘图之后,通常还需要为图形补充解释信息。这一组函数主要用于增强可读性。
1、标题与轴标签
title() / set_title()
用于设置图标题。
python
plt.title(label, fontsize=None, loc=None)ax.set_title(label, fontdict=None, loc=None, pad=None, **kwargs)
参数说明:
• label:标题内容
• fontsize:标题字号,适用于 plt.title()
• fontdict:字体属性字典,适用于 ax.set_title()
• loc:标题位置
javascript
'center':标题居中显示'left':标题靠左显示'right':标题靠右显示
• pad:标题与图形区域之间的间距
• **kwargs:其它文本样式参数,如 color 等
返回值:返回一个 Text 对象。
示例:
javascript
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [2, 4, 3])plt.title("Example Plot", fontsize=14)plt.show()
xlabel() / ylabel()
用于设置当前图形的横轴、纵轴标签。
python
plt.xlabel(xlabel, fontsize=None)plt.ylabel(ylabel, fontsize=None)
参数说明:
• xlabel / ylabel:标签文本
• fontsize:标签字体大小
返回值:返回一个 Text 对象。
示例:
javascript
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [2, 4, 3])plt.xlabel("x")plt.ylabel("y")plt.show()
set_xlabel() / set_ylabel()
用于设置某个 Axes 对象的横轴、纵轴标签。
python
ax.set_xlabel(xlabel, fontdict=None, labelpad=None, **kwargs)ax.set_ylabel(ylabel, fontdict=None, labelpad=None, **kwargs)
参数说明:
• xlabel / ylabel:标签文本
• fontdict:字体属性字典
• labelpad:标签与坐标轴之间的间距
• **kwargs:其它文本样式参数
返回值:返回一个 Text 对象。
示例:
javascript
import matplotlib.pyplot as plt
fig, ax = plt.subplots()ax.plot([1, 2, 3], [2, 4, 3])ax.set_xlabel("x")ax.set_ylabel("y")plt.show()
text()
用于在图中指定位置添加普通文本说明。
python
plt.text(x, y, s, fontdict=None, **kwargs)
或:
python
ax.text(x, y, s, fontdict=None, **kwargs)
参数说明:
• x、y:文本位置
• s:文本内容
• fontdict:字体属性字典
• **kwargs:其它文本样式参数,如 fontsize、color、ha、va
返回值:返回一个 Text 对象。
示例:
javascript
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [2, 4, 3])plt.text(2, 4, "峰值附近")plt.show()
说明:
text() 常用于局部说明、数据标注或补充解释,但它不会自动绘制箭头。
annotate()
用于给图中的某个点添加带箭头的注释,是 text() 的增强形式。
python
plt.annotate(text, xy, xytext=None, arrowprops=None, **kwargs)
或:
python
ax.annotate(text, xy, xytext=None, arrowprops=None, **kwargs)
参数说明:
• text:注释文本
• xy:被注释点的位置
• xytext:注释文本的位置
• arrowprops:箭头样式字典
• **kwargs:其它文本样式参数
返回值:返回一个 Annotation 对象。
示例:
apache
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]y = [2, 5, 3, 4]
plt.plot(x, y)plt.annotate("最高点", xy=(2, 5), xytext=(2.5, 5.5), arrowprops={"arrowstyle": "->"})plt.show()
说明:
当需要强调某个关键点、异常点或极值点时,annotate() 很有用。
2、刻度与范围控制
xticks()
用于获取或设置当前图形 x 轴刻度的位置与标签。
python
plt.xticks(ticks=None, labels=None, *, minor=False, **kwargs)
参数说明:
• ticks:刻度位置列表
• labels:对应的刻度标签列表;只有在提供 ticks 时才能同时传入
• minor:是否设置次刻度,默认为 False
• **kwargs:刻度文本样式参数,如 rotation、fontsize 等。
返回值:不传参数时,通常返回当前 x 轴刻度位置和刻度标签;设置时返回对应刻度与文本对象。
示例:
makefile
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]y = [85, 78, 92, 88]names = ["张老师", "李老师", "王老师", "赵老师"]
plt.bar(x, y)plt.xticks(x, names)plt.show()
说明:
xticks() 常用于把默认的数字刻度替换成更有意义的类别名称,例如姓名、月份、地区等。
yticks()
用于获取或设置当前图形 y 轴刻度的位置与标签,其用法与 xticks() 对应。
python
plt.yticks(ticks=None, labels=None, *, minor=False, **kwargs)
参数说明:
• ticks:刻度位置列表
• labels:对应的刻度标签列表
• minor:是否设置次刻度
• **kwargs:刻度文本样式参数
返回值:不传参数时,通常返回当前 y 轴刻度位置和刻度标签;设置时返回对应刻度与文本对象。
示例:
css
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], [10, 20, 30])plt.yticks([10, 20, 30], ["低", "中", "高"])plt.show()
说明:
当 y 轴数值需要用等级、评分或其它文字说明替换时,yticks() 很有用。
xlim()
用于获取或设置当前坐标轴的 x 轴显示范围。
cs
plt.xlim(*args, **kwargs)
常见写法:
sql
left, right = plt.xlim()plt.xlim((left, right))plt.xlim(left, right)
参数说明:
• left:x 轴左边界
• right:x 轴右边界
返回值:返回新的 x 轴范围,通常是一个包含左右边界的二元组。
示例:
apache
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4, 5], [2, 4, 3, 6, 5])plt.xlim(1, 4)plt.show()
说明:
当希望只关注某一段横轴范围时,可以通过 xlim() 缩小显示区间;设置后通常会关闭该轴的自动缩放。
ylim()
用于获取或设置当前坐标轴的 y 轴显示范围,用法与 xlim() 对应。
cs
plt.ylim(*args, **kwargs)
常见写法:
bash
bottom, top = plt.ylim()plt.ylim((bottom, top))plt.ylim(bottom, top)
参数说明:
• bottom:y 轴下边界
• top:y 轴上边界
返回值:返回新的 y 轴范围,通常是一个包含上下边界的二元组。
示例:
apache
import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4, 5], [2, 4, 3, 6, 5])plt.ylim(0, 8)plt.show()
说明:
当希望统一多张图的纵轴范围,或突出某个数值区间时,ylim() 非常常用。
axis()
用于统一设置或获取当前坐标轴的显示范围、坐标比例以及轴线显示方式。
cs
plt.axis(*args, emit=True, **kwargs)
常见写法:
javascript
plt.axis([xmin, xmax, ymin, ymax])plt.axis("off")plt.axis("equal")plt.axis("tight")
参数说明:
• 当传入四元素列表时:
xmin, xmax, ymin, ymax\] 分别表示横轴最小值、横轴最大值、纵轴最小值、纵轴最大值 • 当传入字符串时,常见选项包括: ```javascript 'on':显示坐标轴'off':关闭坐标轴显示'equal':使 x 轴与 y 轴采用相同比例'scaled':按比例缩放坐标轴'tight':紧贴数据范围'auto':恢复自动缩放 ``` 返回值:通常返回当前坐标轴范围,即 (xmin, xmax, ymin, ymax) 形式的元组。 示例 1:设置显示范围 ```apache import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 2, 5])plt.axis([1, 4, 0, 6])plt.show() ``` 示例 2:关闭坐标轴 ```javascript import matplotlib.pyplot as pltimport numpy as np img = np.random.rand(10, 10)plt.imshow(img, cmap="gray")plt.axis("off")plt.show() ``` 说明: 如果只是分别控制横轴和纵轴范围,通常使用 xlim()、ylim() 更直观;而 axis() 更适合一次性完成整体设置,尤其常与 imshow() 搭配使用。 tick_params() 用于统一调整刻度线、刻度标签以及网格线的显示样式。 ```javascript plt.tick_params(axis='both', **kwargs) ``` 或: ```javascript ax.tick_params(axis='both', **kwargs) ``` 参数说明: • axis:作用对象,可取 'x'、'y'、'both' • which:控制主刻度、次刻度或两者,可取 'major'、'minor'、'both' • direction:刻度线方向,可取 'in'、'out'、'inout' • length:刻度线长度 • width:刻度线宽度 • color:刻度线颜色 • pad:刻度线与标签之间的距离 • labelsize:刻度标签字号 • labelcolor:刻度标签颜色 • reset:是否先恢复默认设置再修改。 返回值:无显式返回值,主要起样式设置作用。 示例: ```javascript import matplotlib.pyplot as plt plt.plot([1, 2, 3], [2, 4, 3])plt.tick_params(axis='both', direction='in', length=6, labelsize=12)plt.show() ``` 说明: 当需要统一调整刻度外观,而不是逐个设置 xticks()、yticks() 的文本样式时,tick_params() 更高效。对于共享坐标轴的多子图,它也常用于重新打开或调整刻度标签显示。 3、图例、文字与颜色说明 legend() 用于显示图例,说明不同图形对象的含义。 ```python plt.legend(loc=None, **kwargs) ``` 或: ```python ax.legend(loc=None, **kwargs) ``` 参数说明: • loc:图例位置 • fontsize:图例字号 • frameon:是否显示边框 返回值:返回一个 Legend 对象。 示例: ```javascript import matplotlib.pyplot as plt plt.plot([1, 2, 3], [2, 4, 3], label="A")plt.plot([1, 2, 3], [1, 3, 2], label="B")plt.legend()plt.show() ``` 说明: 只有绘图对象提供了 label,图例中才会显示对应条目。 grid() 用于控制网格的显示。 ```bash plt.grid(visible=True, which="major", axis="both", **kwargs) ``` 或: ```bash ax.grid(visible=True, which="major", axis="both", **kwargs) ``` 参数说明: • visible:是否显示网格 • which:控制主刻度或次刻度网格 • axis:控制横轴、纵轴或两者 • \*\*kwargs:网格线样式参数,如线型、颜色等 返回值:无显式返回值,主要起设置作用。 示例: ```apache import matplotlib.pyplot as plt plt.plot([1, 2, 3], [2, 4, 3])plt.grid(True)plt.show() ``` colorbar() 用于为颜色映射图形添加颜色条。它常与 imshow()、scatter() 等函数配合使用,用来说明颜色与数值之间的对应关系。 ```python plt.colorbar(mappable=None, ax=None, **kwargs) ``` 参数说明: • mappable:与颜色映射相关的图形对象,如 imshow() 返回的对象 • ax:要附加颜色条的坐标轴 • \*\*kwargs:其它可选参数,如方向、缩放、间距等 返回值:返回一个 Colorbar 对象。 示例: ```kotlin import matplotlib.pyplot as pltimport numpy as np data = np.random.rand(5, 5)img = plt.imshow(data, cmap="viridis")plt.colorbar(img)plt.show() ``` 说明: 当颜色本身承载数值信息时,colorbar() 往往是必不可少的辅助元素,否则读者很难准确理解颜色含义。 4、布局微调 tight_layout() 自动调整子图之间的间距,减少标题、标签和刻度文字之间的重叠。 ```python plt.tight_layout(*, pad=1.08, h_pad=None, w_pad=None, rect=None) ``` 或: ```apache fig.tight_layout(pad=1.08) ``` 参数说明: • pad:整体填充值 • h_pad:子图之间的垂直填充值 • w_pad:子图之间的水平填充值 • rect:限制子图布局所占区域 返回值:无显式返回值,主要起布局调整作用。 示例: ```apache import matplotlib.pyplot as pltimport numpy as np x = np.linspace(0, 10, 100) fig, ax = plt.subplots(1, 2, figsize=(8, 4))ax[0].plot(x, np.sin(x))ax[1].plot(x, np.cos(x)) plt.tight_layout()plt.show() ``` 说明: 当多个子图的标题、轴标签或刻度文字容易重叠时,tight_layout() 往往是最先尝试的自动调整方法。 四、输出与配置函数 这一组函数主要负责图形输出和默认样式控制。 show() 用于显示当前图形。 ```go plt.show() ``` 参数说明: • 一般基础使用中不需要额外参数。 返回值:无返回值。 示例: ```apache import matplotlib.pyplot as plt plt.plot([1, 2, 3], [2, 4, 3])plt.show() ``` 说明: 在脚本环境中,通常需要显式调用 show() 才会弹出图形窗口。 savefig() 用于将当前图形保存为图像文件。 ```python plt.savefig(fname, dpi=None, bbox_inches=None, facecolor="auto", edgecolor="auto", **kwargs) ``` 或: ```python fig.savefig(fname, dpi=None, bbox_inches=None, **kwargs) ``` 参数说明: • fname:文件名 • dpi:分辨率 • bbox_inches:边界裁剪方式 • facecolor:背景颜色 • edgecolor:边框颜色 返回值:无返回值。 示例: ```javascript import matplotlib.pyplot as plt plt.plot([1, 2, 3], [2, 4, 3])plt.savefig("plot.png", dpi=300, bbox_inches="tight")plt.show() ``` 说明: 通常建议先调用 savefig(),再调用 show(),以避免某些环境下得到空白图像。 close() 用于关闭图形窗口或销毁指定图形对象。 ```python plt.close(fig=None) ``` 参数说明: • fig:要关闭的图形,可以是图形编号、图形对象,或 'all' 返回值:无返回值。 示例: ```apache import matplotlib.pyplot as plt plt.figure()plt.plot([1, 2, 3], [2, 4, 3])plt.close() ``` 说明: 在批量生成图片或长时间运行脚本时,及时使用 close() 可以释放资源,避免打开过多图形对象。 clf() 用于清空当前 Figure 中的所有内容,但保留图形窗口本身。 ```go plt.clf() ``` 返回值:无返回值。 示例: ```apache import matplotlib.pyplot as plt plt.figure()plt.plot([1, 2, 3], [2, 4, 3])plt.clf() ``` 说明: clf() 相当于"清空整张画布",适合准备在同一个 Figure 中重新绘图。 cla() 用于清空当前 Axes 中的内容,但不影响同一 Figure 中的其它子图。 ```go plt.cla() ``` 或: ```go ax.cla() ``` 返回值:无返回值。 示例: ```apache import matplotlib.pyplot as plt fig, ax = plt.subplots()ax.plot([1, 2, 3], [2, 4, 3])ax.cla()plt.show() ``` 说明: cla() 相当于"清空当前坐标区域",粒度比 clf() 更细。 matplotlib.use() 用于设置 Matplotlib 当前使用的后端(backend)。后端决定图形是显示在屏幕窗口中,还是输出为 PNG、PDF、SVG 等文件。官方文档将其描述为用于选择"渲染与 GUI 集成所使用的后端"。 ```python import matplotlib matplotlib.use(backend, *, force=True) ``` 参数说明: • backend:后端名称 • force:是否在设置失败时抛出异常 常见后端类型包括两大类: (1)交互式后端 ```go TkAgg:基于 Tk 图形界面工具包的交互式后端,适合在普通桌面环境中弹出绘图窗口并进行基础交互。 QtAgg:基于 Qt 图形界面工具包的交互式后端,常用于功能较完整的桌面应用和较成熟的图形界面环境。 MacOSX:Matplotlib 在 macOS 原生 Cocoa 环境下使用的交互式后端,主要面向 macOS 本机图形显示。 WebAgg:通过浏览器页面显示 Matplotlib 图形的交互式后端,适合将绘图结果通过 Web 方式查看和交互。 nbAgg:面向 Jupyter Notebook 的交互式后端,可在笔记本单元格中显示并交互操作图形。 ``` (2)非交互式后端 ```css Agg:基于 Anti-Grain Geometry 渲染引擎的非交互式后端,主要用于生成高质量的位图图像文件,如 PNG。 pdf:用于输出 PDF 矢量图文件的非交互式后端,适合保存可缩放且适于打印的图形。 svg:用于输出 SVG 矢量图文件的非交互式后端,适合网页展示和后续矢量编辑。 ps:用于输出 PostScript 或 EPS 文件的非交互式后端,常见于传统出版和打印流程。 pgf:基于 PGF 的非交互式后端,适合将图形更自然地整合进 LaTeX 文档排版流程。 ``` 后端名称大小写通常不敏感。官方文档也支持用 module://... 的形式指定自定义后端。 示例: ```javascript import matplotlibmatplotlib.use("Agg") import matplotlib.pyplot as plt plt.plot([1, 2, 3], [2, 4, 3])plt.savefig("plot.png") ``` 说明: matplotlib.use() 通常应尽量写在 import matplotlib.pyplot as plt 之前。 在没有图形界面的环境中,常使用 Agg 后端将图形直接保存为文件。官方文档同时指出,大多数情况下 Matplotlib 会自动选择可用后端,因此并不一定需要手动调用该函数。 matplotlib.get_backend() 用于获取当前 Matplotlib 正在使用的后端名称。 ```javascript import matplotlib matplotlib.get_backend() ``` 参数说明: 该函数不需要额外参数。 返回值:返回当前后端名称,通常为字符串。 示例: ```java import matplotlib print(matplotlib.get_backend()) ``` 说明: 当图形无法正常显示、保存结果异常,或需要确认当前运行环境使用的是哪一种后端时,get_backend() 很有帮助。它常与 matplotlib.use() 配合使用,用于检查配置是否生效。 switch_backend() 用于在 pyplot 接口中切换当前后端。 ```go plt.switch_backend(newbackend) ``` 参数说明: • newbackend:要切换到的新后端名称。 返回值:无。 示例: ```javascript import matplotlib.pyplot as plt plt.switch_backend("Agg")plt.plot([1, 2, 3], [2, 4, 3])plt.savefig("plot.png") ``` 说明: switch_backend() 用于在已经使用 pyplot 的情况下切换后端。 只有在没有启动其它交互式后端事件循环时,才可以切换到另一种交互式后端; 在交互式与非交互式后端之间切换通常是可行的;如果新后端与当前后端不同,那么所有已打开的图形会被关闭。 rcParams 用于设置 Matplotlib 的全局默认参数,例如字体、图像尺寸、分辨率、线宽等。 ```javascript plt.rcParams["参数名"] = 参数值 ``` 常见项目: ```css plt.rcParams["font.sans-serif"]plt.rcParams["axes.unicode_minus"]plt.rcParams["figure.figsize"]plt.rcParams["figure.dpi"] ``` rcParams 本质上是一个配置字典,通过键值方式修改全局设置。 示例: ```apache import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"] = ["SimHei"]plt.rcParams["axes.unicode_minus"] = Falseplt.rcParams["figure.figsize"] = (6, 4)plt.rcParams["figure.dpi"] = 120 ``` 说明: 这些设置会影响当前脚本后续创建的图形,因此属于全局默认配置。 style.use() 用于快速切换 Matplotlib 的整体绘图风格。 ```php plt.style.use(style) ``` 参数说明: • style:样式名称 ```javascript default:恢复 Matplotlib 默认样式classic:旧版 Matplotlib 风格ggplot:模拟 ggplot 风格bmh:适合统计图风格dark_background:深色背景风格grayscale:灰度风格fivethirtyeight:模拟 FiveThirtyEight 风格fast:强调更快渲染的风格seaborn-v0_8:接近 Seaborn 风格的基础样式seaborn-v0_8-darkgrid:带深色网格的 Seaborn 风格seaborn-v0_8-whitegrid:带浅色网格的 Seaborn 风格tableau-colorblind10:强调色盲友好的配色风格 ``` 返回值:无返回值。 示例: ```apache import matplotlib.pyplot as plt plt.style.use("ggplot")plt.plot([1, 2, 3], [2, 4, 3])plt.show() ``` 说明: 该函数适合在不逐项修改细节参数的情况下,快速改变图形的整体视觉风格。 📘 小结 Matplotlib 的常用函数虽然数量不少,但从使用流程上看,大致可以分为四类:先用图形创建与布局函数搭好画布和坐标区域,再用基础绘图函数把数据画出来,随后通过标题、刻度、图例、文字注释、颜色条等函数增强可读性,最后再完成显示、保存以及全局样式配置。按这样的绘图过程来理解各函数,比孤立记忆更容易形成稳定而清晰的知识结构。  **"点赞有美意,赞赏是鼓励"**