Matplotlib 布局与配置函数
布局函数控制子图间距和排列,配置函数管理 Matplotlib 全局参数。
函数一览
布局函数
| 函数 | 功能 |
|---|---|
| subplots_adjust() | 手动调整子图间距 |
| tight_layout() | 自动紧凑布局 |
| margins() | 设置数据边距(坐标轴两端的留白) |
| subplot_tool() | 启动交互式子图调整工具 |
配置函数
| 函数 | 功能 |
|---|---|
| rc() | 设置 rc 参数(支持批量设置) |
| rc_context() | 临时设置 rc 参数的上下文管理器 |
| rcdefaults() | 恢复所有 rc 参数为默认值 |
颜色映射函数
| 函数 | 功能 |
|---|---|
| clim() | 设置颜色映射的数据范围 |
| get_cmap() | 获取指定名称的 colormap |
| set_cmap() | 设置默认 colormap |
| gci() | 获取当前可映射颜色的对象 |
| sci() | 设置当前可映射颜色的对象 |
| imread() | 从文件读取图像到数组 |
| imsave() | 将数组保存为图像文件 |
输出与交互函数
| 函数 | 功能 |
|---|---|
| show() | 显示所有打开的 Figure |
| draw() | 强制重新渲染当前 Figure |
| draw_if_interactive() | 交互模式下渲染 Figure |
| pause() | 暂停指定秒数(期间处理 GUI 事件) |
| ion() / ioff() | 开启/关闭交互模式 |
| isinteractive() | 检查是否处于交互模式 |
| install_repl_displayhook() | 安装 REPL 显示钩子 |
| uninstall_repl_displayhook() | 卸载 REPL 显示钩子 |
| switch_backend() | 切换 Matplotlib 后端 |
布局函数示例
subplots_adjust() / tight_layout() / margins()
matplotlib.pyplot.subplots_adjust(left=None, bottom=None, right=None,
top=None, wspace=None, hspace=None)
matplotlib.pyplot.tight_layout(*, pad=1.08, h_pad=None, w_pad=None,
rect=None)
matplotlib.pyplot.margins(*margins, x=None, y=None, tight=True)
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# subplots_adjust 手动控制
fig.subplots_adjust(left=0.1, right=0.95,
top=0.9, bottom=0.1,
hspace=0.4, wspace=0.3)
for i, ax in enumerate(axes.flatten()):
ax.plot(x, np.sin(x + i))
ax.set_title(f'Plot {i+1}')
ax.set_xlabel('A long x label')
ax.set_ylabel('A long y label')
# 设置边距
ax.margins(x=0.1, y=0.15)
fig.suptitle('subplots_adjust() + margins()', fontsize=14)
plt.show()
print("runoob: layout example")
import numpy as np
x = np.linspace(0, 10, 100)
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# subplots_adjust 手动控制
fig.subplots_adjust(left=0.1, right=0.95,
top=0.9, bottom=0.1,
hspace=0.4, wspace=0.3)
for i, ax in enumerate(axes.flatten()):
ax.plot(x, np.sin(x + i))
ax.set_title(f'Plot {i+1}')
ax.set_xlabel('A long x label')
ax.set_ylabel('A long y label')
# 设置边距
ax.margins(x=0.1, y=0.15)
fig.suptitle('subplots_adjust() + margins()', fontsize=14)
plt.show()
print("runoob: layout example")
配置函数示例
rc() / rc_context() / rcdefaults()
matplotlib.pyplot.rc(group, **kwargs) matplotlib.pyplot.rc_context(rc=None, fname=None) matplotlib.pyplot.rcdefaults()
实例
import matplotlib.pyplot as plt
import numpy as np
# 方法1:全局设置 rcParams
plt.rcParams['font.size'] = 12
plt.rcParams['axes.grid'] = True
# 方法2:用 rc() 批量设置
plt.rc('lines', linewidth=2, color='steelblue')
plt.rc('axes', titlesize=14, grid=True)
x = np.linspace(0, 10, 50)
# rc_context 临时设置(仅在 with 块内有效)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
layout='constrained')
# ax1 使用全局 rc 设置
ax1.plot(x, np.sin(x))
ax1.set_title('Global rc settings')
# ax2 使用临时样式覆盖
with plt.rc_context({'lines.color': 'coral',
'lines.linestyle': '--',
'axes.facecolor': '#f0f0f0'}):
ax2.plot(x, np.cos(x))
ax2.set_title('rc_context() overrides')
plt.show()
# 恢复默认
plt.rcdefaults()
print("runoob: rc settings restored to defaults")
import numpy as np
# 方法1:全局设置 rcParams
plt.rcParams['font.size'] = 12
plt.rcParams['axes.grid'] = True
# 方法2:用 rc() 批量设置
plt.rc('lines', linewidth=2, color='steelblue')
plt.rc('axes', titlesize=14, grid=True)
x = np.linspace(0, 10, 50)
# rc_context 临时设置(仅在 with 块内有效)
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4),
layout='constrained')
# ax1 使用全局 rc 设置
ax1.plot(x, np.sin(x))
ax1.set_title('Global rc settings')
# ax2 使用临时样式覆盖
with plt.rc_context({'lines.color': 'coral',
'lines.linestyle': '--',
'axes.facecolor': '#f0f0f0'}):
ax2.plot(x, np.cos(x))
ax2.set_title('rc_context() overrides')
plt.show()
# 恢复默认
plt.rcdefaults()
print("runoob: rc settings restored to defaults")
颜色映射函数示例
clim() / get_cmap() / set_cmap()
matplotlib.pyplot.clim(vmin=None, vmax=None) matplotlib.pyplot.get_cmap(name=None, lut=None) matplotlib.pyplot.set_cmap(cmap)
实例
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(10, 10)
# 查看当前默认 colormap
print('Default cmap:', plt.rcParams['image.cmap'])
# 获取特定 colormap
cmap = plt.get_cmap('plasma')
print('Got cmap:', cmap.name)
fig, ax = plt.subplots(figsize=(5, 4), layout='constrained')
im = ax.imshow(data, cmap='hot', vmin=0.2, vmax=0.8)
# clim() 也可用于修改范围
plt.clim(0.1, 0.9)
fig.colorbar(im, ax=ax, label='Value')
ax.set_title('imshow with clim()')
plt.show()
# 设置全局默认 colormap
plt.set_cmap('Blues')
print('New default cmap:', plt.rcParams['image.cmap'])
import numpy as np
data = np.random.rand(10, 10)
# 查看当前默认 colormap
print('Default cmap:', plt.rcParams['image.cmap'])
# 获取特定 colormap
cmap = plt.get_cmap('plasma')
print('Got cmap:', cmap.name)
fig, ax = plt.subplots(figsize=(5, 4), layout='constrained')
im = ax.imshow(data, cmap='hot', vmin=0.2, vmax=0.8)
# clim() 也可用于修改范围
plt.clim(0.1, 0.9)
fig.colorbar(im, ax=ax, label='Value')
ax.set_title('imshow with clim()')
plt.show()
# 设置全局默认 colormap
plt.set_cmap('Blues')
print('New default cmap:', plt.rcParams['image.cmap'])
Default cmap: viridis Got cmap: plasma New default cmap: Blues
imread() / imsave()
matplotlib.pyplot.imread(fname, format=None) matplotlib.pyplot.imsave(fname, arr, **kwargs)
实例
import matplotlib.pyplot as plt
import numpy as np
# 创建图像数据
img = np.random.rand(50, 50)
# 保存为 PNG(无需 Figure)
plt.imsave('runoob_temp_image.png', img,
cmap='viridis')
print("runoob: image saved via imsave()")
# 读取回来
loaded = plt.imread('runoob_temp_image.png')
print("Loaded shape:", loaded.shape)
print("runoob: image loaded via imread()")
import numpy as np
# 创建图像数据
img = np.random.rand(50, 50)
# 保存为 PNG(无需 Figure)
plt.imsave('runoob_temp_image.png', img,
cmap='viridis')
print("runoob: image saved via imsave()")
# 读取回来
loaded = plt.imread('runoob_temp_image.png')
print("Loaded shape:", loaded.shape)
print("runoob: image loaded via imread()")
Loaded shape: (50, 50, 4)
输出与交互函数示例
ion() / ioff() / pause() / draw()
matplotlib.pyplot.ion() # 开启交互模式 matplotlib.pyplot.ioff() # 关闭交互模式 matplotlib.pyplot.isinteractive() # 检查状态 matplotlib.pyplot.pause(interval) # 暂停并处理事件 matplotlib.pyplot.draw() # 强制重绘
实例
import matplotlib.pyplot as plt
import numpy as np
# 交互模式示例(在支持交互的环境中运行)
print('Interactive mode:', plt.isinteractive())
# 非交互模式下手动控制渲染
plt.ioff()
fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)
for i in range(3):
ax.clear()
ax.plot(x, np.sin(x + i * 0.5))
ax.set_title(f'Frame {i+1}')
plt.draw() # 手动渲染
plt.pause(0.5) # 暂停 0.5 秒
plt.show()
print("runoob: animation complete")
import numpy as np
# 交互模式示例(在支持交互的环境中运行)
print('Interactive mode:', plt.isinteractive())
# 非交互模式下手动控制渲染
plt.ioff()
fig, ax = plt.subplots()
x = np.linspace(0, 10, 100)
for i in range(3):
ax.clear()
ax.plot(x, np.sin(x + i * 0.5))
ax.set_title(f'Frame {i+1}')
plt.draw() # 手动渲染
plt.pause(0.5) # 暂停 0.5 秒
plt.show()
print("runoob: animation complete")
switch_backend()
matplotlib.pyplot.switch_backend(newbackend)
switch_backend() 只能在 pyplot 第一次导入后、创建任何 Figure 之前调用。创建 Figure 后切换后端需要使用实验性的
matplotlib.use()。

Matplotlib 参考文档