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
相关产品推荐
相关产品推荐

