如何撤销plt.gcf().subplots_adjust设置 绘制多图时恢复默认布局
问题根因
plt.clf() 仅会清空当前画布内的绘图内容,不会重置画布本身的布局配置,你全程复用的是脚本初始化时生成的同一个全局画布实例,因此第一次设置的bottom=0.5参数会一直生效。你之前尝试的sns.set()仅重置seaborn绘图样式,不涉及matplotlib画布布局配置;重新导入plt也不会清除已经创建的全局画布实例,因此都无法解决问题。
可行解决方案
方案1:每个绘图任务创建独立画布(最简单,完全隔离参数)
每次绘图前显式调用plt.figure()创建新画布,或者绘图保存后调用plt.close()关闭当前画布,后续绘图会自动生成带默认配置的新画布。
修改后代码示例:import seaborn as sns import matplotlib.pyplot as plt import numpy as np def box_adj(): plt.figure() # 新建独立画布 tips = sns.load_dataset("tips") ax = sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set3") plt.gcf().subplots_adjust(bottom=0.5) plt.savefig('box.png') plt.close() # 关闭当前画布,避免复用 def dist(): plt.figure() # 新建独立画布,默认布局配置 ax = sns.distplot(np.random.randn(1000), kde=False) plt.savefig('dist.png') plt.close() if __name__ == "__main__": box_adj() dist()方案2:复用画布时手动重置布局参数
如果不想频繁新建画布,可以在绘制第二张图前将布局参数恢复为matplotlib默认值:def dist(): # 重置画布边距为默认值 plt.gcf().subplots_adjust(bottom=0.11, left=0.125, right=0.9, top=0.88, wspace=0.2, hspace=0.2) ax = sns.distplot(np.random.randn(1000), kde=False) plt.savefig('dist.png') plt.clf()方案3:使用面向对象API管理绘图(更规范,适合复杂场景)
显式创建画布和轴对象,所有配置直接绑定到当前画布,完全避免全局状态污染:def box_adj(): fig, ax = plt.subplots() tips = sns.load_dataset("tips") sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, palette="Set3", ax=ax) fig.subplots_adjust(bottom=0.5) fig.savefig('box.png') plt.close(fig) def dist(): fig, ax = plt.subplots() # 新画布自带默认布局 sns.distplot(np.random.randn(1000), kde=False, ax=ax) fig.savefig('dist.png') plt.close(fig)
内容的提问来源于stack exchange,提问作者KT12
相关产品推荐
相关产品推荐

