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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:08:13