现在位置: 首页 > Matplotlib 教程 > 正文

Matplotlib 布局与配置函数


Matplotlib 参考文档 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")

配置函数示例

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")

颜色映射函数示例

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'])
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()")
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")

switch_backend()

matplotlib.pyplot.switch_backend(newbackend)

switch_backend() 只能在 pyplot 第一次导入后、创建任何 Figure 之前调用。创建 Figure 后切换后端需要使用实验性的 matplotlib.use()


Matplotlib 参考文档 Matplotlib 参考文档