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

Matplotlib:将绘图代码拆分为多个函数

拆分Matplotlib绘图代码为模块化函数

需求是将单块的Matplotlib绘图代码拆分为多个函数,每个函数负责绘制一组子图,通过传入子图对象(subfig)指定绘图位置,同时修正示例中func3的返回值错误(应返回传入的subfig_br而非subfig_bl)。

原始代码

fig = plt.figure(constrained_layout=True, figsize=(10, 8))

# create top/bottom subfigs
(subfig_t, subfig_b) = fig.subfigures(2, 1, hspace=0.05, height_ratios=[1, 3])

# put ax0 in top subfig
ax0 = subfig_t.subplots()
ax0.set_title('ax0')
subfig_t.supxlabel('xlabel0')

# create left/right subfigs nested in bottom subfig
(subfig_bl, subfig_br) = subfig_b.subfigures(1, 2, wspace=0.1, width_ratios=[3, 1])

# put ax1-ax3 in gridspec of bottom-left subfig
gs = subfig_bl.add_gridspec(nrows=1, ncols=9)
ax1 = subfig_bl.add_subplot(gs[0, :1])
ax2 = subfig_bl.add_subplot(gs[0, 1:6], sharey=ax1)
ax3 = subfig_bl.add_subplot(gs[0, 6:], sharey=ax1)
ax1.set_title('ax1')
ax2.set_title('ax2')
ax3.set_title('ax3')
ax2.get_yaxis().set_visible(False)
ax3.get_yaxis().set_visible(False)
subfig_bl.supxlabel('xlabel1-3')

# put ax4 in bottom-right subfig
ax4 = subfig_br.subplots()
ax4.set_title('ax4')
subfig_br.supxlabel('xlabel4')

修正后的模块化代码

import matplotlib.pyplot as plt

fig = plt.figure(constrained_layout=True, figsize=(10, 8))

# 创建顶部/底部子图容器
(subfig_t, subfig_b) = fig.subfigures(2, 1, hspace=0.05, height_ratios=[1, 3])
# 在底部子图容器内创建左侧/右侧子图容器
(subfig_bl, subfig_br) = subfig_b.subfigures(1, 2, wspace=0.1, width_ratios=[3, 1])

def func1(subfig_t):
    # 在顶部子图容器中绘制ax0
    ax0 = subfig_t.subplots()
    ax0.set_title('ax0')
    subfig_t.supxlabel('xlabel0')
    return subfig_t

def func2(subfig_bl):
    # 在底部左侧子图容器的网格中绘制ax1-ax3
    gs = subfig_bl.add_gridspec(nrows=1, ncols=9)
    ax1 = subfig_bl.add_subplot(gs[0, :1])
    ax2 = subfig_bl.add_subplot(gs[0, 1:6], sharey=ax1)
    ax3 = subfig_bl.add_subplot(gs[0, 6:], sharey=ax1)
    ax1.set_title('ax1')
    ax2.set_title('ax2')
    ax3.set_title('ax3')
    ax2.get_yaxis().set_visible(False)
    ax3.get_yaxis().set_visible(False)
    subfig_bl.supxlabel('xlabel1-3')
    return subfig_bl

def func3(subfig_br):
    # 在底部右侧子图容器中绘制ax4
    ax4 = subfig_br.subplots()
    ax4.set_title('ax4')
    subfig_br.supxlabel('xlabel4')
    # 修正返回值:返回传入的subfig_br而非subfig_bl
    return subfig_br

def func_save(fig, output_path):
    fig.savefig(output_path, dpi=300, format='png', bbox_inches='tight')

# 调用各绘图函数
subfig_t = func1(subfig_t)
subfig_bl = func2(subfig_bl)
subfig_br = func3(subfig_br)

# 保存图像(需提前定义output_path变量,例如output_path = 'output.png')
# func_save(fig, output_path)

关键修正说明

  • 修正func3的返回值:将错误的return subfig_bl改为return subfig_br,保证函数返回传入的目标子图容器
  • 添加中文注释提升代码可读性
  • 补充import matplotlib.pyplot as plt语句,确保代码可独立运行
  • 调整保存函数参数名为output_path,符合Python命名规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:54:41