You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中如何用plt.subplots实现指定布局的多子图排布

matplotlib 非等分布局子图实现方案

你需要的「左列单图占满全高、右列上下排布两个子图、列宽不等」的布局,直接用gridspec配置网格比例即可实现,不需要手动拖拽调整子图位置,还能完全复用你之前写好的单图绘图逻辑。

核心实现代码

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# 总画布尺寸可按需调整,保持纵向比例和你原单图一致即可
fig = plt.figure(figsize=(12, 10))

# 定义2行2列的基础网格,自定义宽高比例
gs = gridspec.GridSpec(
    nrows=2,
    ncols=2,
    width_ratios=[1, 1.3],  # 左右列宽度比,可根据实际效果微调
    height_ratios=[1, 1],   # 右列上下子图等高
    wspace=0.3,  # 左右子图水平间距
    hspace=0.25  # 右列子图垂直间距
)

# 绑定子图对应位置
ax_left = fig.add_subplot(gs[:, 0])       # 左图:覆盖所有行、第一列
ax_right_top = fig.add_subplot(gs[0, 1])  # 右上图:第一行、第二列
ax_right_bottom = fig.add_subplot(gs[1, 1]) # 右下图:第二行、第二列

使用说明

  • 你之前写好的单图绘制逻辑不需要大改,只要把原来ax = fig.gca()获取到的坐标轴对象,替换成上面生成的三个ax对象传入即可,所有绘图样式、标注都会和原来的单图效果一致。
  • 如果你更习惯用plt.subplots初始化画布,也可以先生成空白画布后再挂载gridspec配置分配子图,逻辑和上述方案完全一致,不需要提前生成规整的子图网格。

参数调整提示

  • width_ratios、height_ratios的数值可以根据你的实际出图效果微调,直到和目标布局的比例匹配
  • 如果出现子图标签、标题重叠的问题,适当调大wspace和hspace的数值即可
  • 如果需要给子图加色条、统一坐标轴范围,直接操作对应的ax对象即可,和单图场景的用法没有区别

内容的提问来源于stack exchange,提问作者Atmos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 05:06:18