Matplotlib中savefig()的figsize参数已弃用,替代方案是什么?
Matplotlib中savefig()的figsize参数已弃用,替代方案是什么?
嗨,我完全理解这个警告有多让人头疼——毕竟之前不管是教程还是技术问答里,到处都能看到用figsize在savefig()里调图大小的例子。不过别担心,解决起来其实很简单,核心就是把设置图表尺寸的步骤提前到创建图表的时候,而不是等到保存阶段。
为什么会出现这个警告?
从Matplotlib 3.3版本开始,官方就不再支持在savefig()中使用figsize参数了,因为这个参数本质上是用来定义图表本身的尺寸,不属于保存操作的配置项,放到保存步骤里本来就不符合设计逻辑,所以后续版本干脆彻底移除了这个用法。
具体的替代方案
这里有两种常用的方法,结合你的代码来演示:
方法1:用plt.figure()提前设置尺寸
在你开始绘图前,先调用plt.figure()指定好图表尺寸,之后的绘图和保存操作保持不变,只需要把savefig()里的figsize参数删掉就行。
修改后的完整代码:
# 先定义图表尺寸 plt.figure(figsize=(16,14)) plt.errorbar(Beta, ME_avg, yerr=error, fmt="o") plt.ylabel('Density averaged kinetic energy ',fontsize=11) plt.xlabel('AV-normalized cooling time',fontsize=12) plt.title('Space & time-averaged final saturated energy') plt.axhline(avg_u,color='red',label = 'Isothermal') plt.legend() plt.loglog() # 保存时移除figsize参数 plt.savefig("Beta-transition-log_ME.png",format='png',dpi=300,bbox_inches='tight',transparent=True) plt.show()
方法2:使用面向对象的绘图方式(更推荐)
如果你想更规范地使用Matplotlib,建议采用面向对象的模式,直接创建Figure和Axes对象,在创建时指定尺寸,后续的绘图操作都基于Axes对象来完成,这种方式在处理复杂图表时会更灵活。
修改后的代码:
# 创建指定尺寸的图表和坐标轴对象 fig, ax = plt.subplots(figsize=(16,14)) ax.errorbar(Beta, ME_avg, yerr=error, fmt="o") ax.set_ylabel('Density averaged kinetic energy ',fontsize=11) ax.set_xlabel('AV-normalized cooling time',fontsize=12) ax.set_title('Space & time-averaged final saturated energy') ax.axhline(avg_u,color='red',label = 'Isothermal') ax.legend() ax.loglog() # 通过fig对象保存图片 fig.savefig("Beta-transition-log_ME.png",format='png',dpi=300,bbox_inches='tight',transparent=True) plt.show()
这样调整后,不仅能消除那个 deprecation warning,还能让你的代码更符合Matplotlib的最佳实践,后续版本升级也不会再遇到类似问题啦。
备注:内容来源于stack exchange,提问作者Pundarikaksha Kavipurapu
相关产品推荐
相关产品推荐

