一、pyplot的其他函数
1.1、xlabel
在matplotlib中, plt.xlabel() 函数用于为当前活动的坐标轴(Axes)设置x轴的 标签。当你想要标识x轴代表的数据或单位时,这个函数非常有用。
python
plt.xlabel('xlabel text')
1.2、ylabel
在matplotlib中, plt.ylabel() 函数用于为当前活动的坐标轴(Axes)设置y轴的 标签。当你想要标识y轴代表的数据或单位时,这个函数非常有用。
python
plt.ylabel('ylabel text')
1.3、title
在matplotlib中, title 函数用于为当前活动的坐标轴(Axes)设置图表的标题。 标题通常位于图表的顶部中央,用于简要描述图表的内容。
python
plt.title('Chart Title')
python
import numpy as np
import matplotlib.pyplot as plt
# 计算曲线上的点的x和y坐标
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
# 使用Matplotlib绘制点,并添加fmt和kwargs属性
plt.plot(x, y,
label='Sine Wave', # 图例标签
linewidth=2, # 线宽
linestyle='-', # 线型
color='blue', # 线的颜色
marker='o', # 标记样式
markersize=5, # 标记的大小
markeredgecolor='black', # 标记边缘的颜色
markeredgewidth=1, # 标记边缘的宽度
markerfacecolor='none', # 标记内部的颜色
alpha=0.5 # 透明度
)
# 显示x轴标签
plt.xlabel('x')
plt.ylabel('y')
plt.title('Sine Wave')
# 显示图例
plt.legend()
# 显示图形
plt.show()

1.4、subplot
在 Matplotlib 中, subplot函数用于在一个图形窗口( 局,每个子图布局区域对应一个 Figure)中创建多个子图布 Axes对象,通过该 Axes对象可以进行数据绘制操 作,使用 subplot 可以在网格中安排这些子图。
python
plt.subplot(nrows, ncols, plot_number)
| 名称 | 描述 |
| nrows | 子图的行数 |
| ncols | 子图的列数 |
plot_number | 当前子图的编号,从1开始,从左上角到右下角按行优先顺序递 增。 |
---|
python
import numpy as np
import matplotlib.pyplot as plt
# 创建数据
x = np.arange(0, 3 * np.pi, 0.01)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 在第一个位置创建子图
plt.subplot(2, 2, 1) # 2行1列,第一个子图
plt.plot(x, y_sin)
plt.title('Sine Wave')
plt.xlabel('x')
plt.ylabel('y_sin')
# 在第二个位置创建子图
plt.subplot(2, 2, 2) # 2行1列,第二个子图
plt.plot(x, y_cos)
plt.title('Cosine Wave')
plt.xlabel('x')
plt.ylabel('y_cos')
# 调用 tight_layout 来自动调整子图参数
plt.tight_layout()
# 显示图形
plt.show()

二、Figure的其他函数
2.1、clf
与Figure对象的clear方法的作用类似,但clf归属于pyplot库,而不是Figure对象的方 法。
python
import matplotlib.pyplot as plt
# 创建一个包含多个子图的图形
fig, axs = plt.subplots(2, 2)
# 在每个子图中绘制一些数据
axs[0, 0].plot([1, 2, 3], [1, 2, 3])
axs[0, 1].plot([1, 2, 3], [3, 2, 1])
axs[1, 0].plot([1, 2, 3], [1, 3, 2])
axs[1, 1].plot([1, 2, 3], [2, 1, 3])
# 使用 tight_layout 自动调整子图布局
fig.tight_layout()
# # Axes对象的clear
# axs[0, 0].clear()
# pyplot库下的clf()
plt.clf()
# 显示图形
2.2、gcf
该函数用于返回当前活动的图形(figure)对象。
python
matplotlib.pyplot.gcf()
|------------------------------------------------------------|
| 返回当前活动的 Figure 对象。如果没有活动的图形,这个函数将创建一个新的 图形,并将其作为当前活动的图形返回。 |
使用场景:
1、当你需要在脚本中获取或操作当前图形时, plt.gcf() 非常有用。
2、它允许你访问和修改当前图形的属性,比如大小、标题、背景颜色等。
3、你可以使用返回的 Figure 对象来添加新的子图(axes)、调整布局、保存图形 到文件等。
python
import matplotlib.pyplot as plt
# 创建一个新的图形和子图
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 2, 3])
# 获取当前活动的图形对象
current_fig = plt.gcf()
print(current_fig is fig)
# 设置图形的大小
current_fig.set_size_inches(8, 6)
# 设置图形的标题
current_fig.suptitle('Example Plot')
# 显示图形
plt.show()
2.3、savefig
该函数用于将当前图形保存到文件中。该函数通常在完成图形绘制后调用,以便将图 形输出为图像文件,便于保存或分享。
python
matplotlib.pyplot.savefig(fname, dpi='figure', format=None, metadata=None, bbox_inches=None, pad_inches=0.1, facecolor='auto', edgecolor='auto', backend=None, **kwargs)
| 名称 | 描述 |
| fname | 文件的路径或文件对象, 用于保存图像。如果未指定 format 参数,Matplotlib 会根据文件扩展名推断图 像格式。 |
| dpi | 图像的分辨率,以每英寸点数为单位。如果设置为 'figure',则使用当前图形的分辨率设置。 |
| format | 图像的文件格式,例如 'png', 'pdf', 'svg', 'ps', 'eps' 等。如 果未指定,则从 fname 的扩展名推断。 |
| metadata | 要存储在图像文件中的元数据。 |
| bbox_inches | 图像的边界框。如果设置为 'tight',则 Matplotlib 会尝试紧凑地剪裁图像周围的空白。 |
| pad_inches | 在边界框周围添加额外的空白(英寸)。 |
| facecolor | 图形背景的颜色 |
| edgecolor | 图形边缘的颜色 |
| backend | 用于保存图像的特定后端。这通常不需要设置,除非你 想要覆盖默认的后端 |
kwargs | 其他关键字参数,将传递给底层后端的保存函数。 |
---|
python
import matplotlib.pyplot as plt
# 创建一些数据
x = [0, 1, 2, 3, 4]
y = [0, 1, 4, 9, 16]
# 绘制图形
plt.plot(x, y)
# 保存图形到文件
plt.savefig('plot.png', dpi=200, bbox_inches='tight', facecolor='g')
# 显示图形(可选)
plt.show()
2.4、imshow
该函数可以用来显示二维数据数组,其中每个数组元素对应图像的一个像素。
python
matplotlib.pyplot.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, **kwargs)
| 名称 | 描述 |
| X | 图像数据,通常是二维数组,但也可以是一维数组(在这种情况下,数据将 被解释为线图)。数据类型通常是浮点数或整数。 |
| cmap | 颜色映射(colormap),用于指定图像中数值到颜色的映射。默认是 None,此时将使用默认的 colormap,通常是 viridis。 |
| norm | 用于标准化数据值的归一化对象,可以确保颜色映射是线性的或者使用 其他映射方式 |
| aspect | 控制图像的纵横比。 'auto' 保持宽高比, 'equal' 使每个像素都是 正方形,或者可以是一个数字。 |
| interpolation | 指定图像缩放时的插值方法。常见的选项有 'nearest'(最近 邻插值)、 'bilinear'(双线性插值)、 'bicubic'(双三次插值)等。 |
| alpha | 图像的透明度,取值范围是 [0, 1]。 |
| vmin, vmax | 用于颜色映射的数据值范围。默认情况下,这些值是从数据中自 动推断出来的。 |
| origin | 指定图像的原点, 'upper' 表示原点在左上角,'lower' 表示原点在左下角 |
**kwargs | 其他关键字参数。 |
---|
与plt.show的区别是:
1、imshow 是用于创建图像的函数,而 show 是用于显示图像的函数。
2、你可以在一个脚本中多次调用 imshow 来绘制多个图像,但通常只需要在脚本的 末尾调用一次 show 来显示所有图像。
python
import matplotlib.pyplot as plt
import numpy as np
# 创建两个简单的数据集
data1 = np.random.rand(10, 10)
data2 = np.random.rand(10, 10)
# 创建一个包含两个子图的图形
fig, (ax1, ax2) = plt.subplots(1, 2)
# 在第一个子图上显示第一个图像,并应用 viridis 颜色映射
ax1.imshow(data1, cmap='viridis', aspect='equal', origin='lower')
ax1.set_title('Image 1')
# 在第二个子图上显示第二个图像,并应用 plasma 颜色映射
ax2.imshow(data2, cmap='gray')
ax2.set_title('Image 2')
# 调整子图之间的间距
plt.tight_layout()
# 显示图像
plt.show()
2.5、close
该函数用于关闭一个或多个打开的图形窗口。在 Matplotlib 中,每次调用绘图命令 (如 plt.plot() 或 plt.imshow())时,都会创建一个新的图形(Figure)和一 个或多个子图(Axes)。 close 函数可以用来关闭这些图形窗口,释放资源,并允 许用户清理不再需要的图形。
python
matplotlib.pyplot.close(fig=None)
| 名称 | 描述 |
fig | 指定要关闭的图形。如果是一个 Figure 对 象,则关闭该图形。如果是一个整数,则关闭与该编号对应的图形。如果省略或 为 None,则关闭当前图形。'all'表示关闭所有的图像。 |
---|
python
import matplotlib.pyplot as plt
import time
# 创建并显示第一个图形
plt.figure()
plt.plot([1, 2, 3], [1, 2, 3])
plt.show(block=False)
# 创建并显示第二个图形
plt.figure()
plt.plot([3, 2, 1], [1, 2, 3])
plt.show(block=False)
# # 关闭当前图形
# plt.close(1)
# 创建第三个图形,但不显示
plt.figure()
plt.plot([1, 2, 3], [3, 2, 1])
plt.show(block=False)
time.sleep(2)
# 关闭所有图形
plt.close(fig='all')
time.sleep(2)
print(123)
2.6、pause
用于在动画或交互式绘图过程中暂停一段时间。这个函数在动画制作或者需要在绘图 之间插入延迟时非常有用。
python
matplotlib.pyplot.pause(interval)
| 名称 | 描述 |
interval | 这个参数是一个浮点数,表示暂停的秒数。默认值通常是 0.1 秒。 |
---|
主要作用:
1、暂停执行:当调用 plt.pause(interval) 时,Python 脚本会暂停执行指定的 时间(以秒为单位)。
2、更新显示:如果在绘图之前调用了 plt.pause,它将允许动态更新的图形(例如 动画)在屏幕上显示出来。这对于交互式绘图非常有用,因为它可以让用户看到 图形的更新。
python
import matplotlib.pyplot as plt
import numpy as np
# 创建一个图形和一个子图
fig, ax = plt.subplots()
# 生成一些数据
t = np.arange(0, 10, 0.01)
s = np.sin(t)
# 绘制第一条线
ax.plot(t, s)
# 显示图形
plt.show(block=False)
# 更新线的数据并暂停
for phase in np.arange(0, 2 * np.pi, 0.05):
ax.plot(t + phase, np.sin(t + phase))
plt.pause(0.01)
# 关闭图形
plt.close()

三、GridSpec
GridSpec提供了更灵活的方式来安排子图(subplot)的布局。在 Matplotlib 中,默 认的子图布局是通过 plt.subplot() 或 plt.subplots() 等函数实现的,但这些 函数都是按照行列均匀划分子图的,而GridSpec可以根据具体需求定制每个子图的 位置和大小。
该类处于 matplotlib.gridspec库下。
python
matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)
| 名称 | 描述 |
| nrows | 网格的行数 |
| ncols | 网格的列数 |
| figure | 如果提供,GridSpec将与这个指定的 Figure 实例关联。如果没有提供, GridSpec 将与当前活动的 Figure 关联。 |
| left, bottom, right,top | 这些参数用于指定网格在整个画布中的位 置,它们的值应该在 0 到 1 之间,表示画布宽度和高度的百分比。例如, left=0.1 表示网格左边界距离画布左边界 10% 的位置。 |
| wspace | 子图之间的水平间距,这个值是以画布宽度的百分比来表示的。 |
| hspace | 子图之间的垂直间距,这个值是以画布高度的百分比来表示的。 |
| width_ratios | 可选,指定各列的相对宽度。默认情况下,所有列的宽度都是相 等的。如果提供这个参数,那么每一列的宽度将是其对应值的相对比例。 |
height_ratios | 可选,指定各行的相对高度。默认情况下,所有行的高度都是 相等的。如果提供这个参数,那么每一行的高度将是其对应值的相对比例。 |
---|
python
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
fig = plt.figure(figsize=(8, 4))
# 创建一个 2 行 3 列的 GridSpec
gs = GridSpec(2, 3)
# 添加子图
ax1 = fig.add_subplot(gs[0, 0])
ax2 = fig.add_subplot(gs[0, 1])
ax3 = fig.add_subplot(gs[0, 2])
# ax4 = fig.add_subplot(gs[1, 0])
ax5 = fig.add_subplot(gs[1, :])
# 注意:gs[1, 1:] 表示第二行的第二列和第三列
plt.show()
