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

plt.gcf()无法保存独立绘图实例,如何分别保存不同阶段绘图对象?

解决Matplotlib保存独立绘图实例的问题

这个问题我之前也踩过坑!你遇到的核心问题是:两次调用plt.gcf()获取的其实是同一个Figure对象。因为Matplotlib默认会在同一个画布上叠加绘图,你没有创建新的独立figure,所以fig1和fig2本质上是同一个对象的引用,后面添加的红色曲线会叠加在同一个画布上,自然调用两者时显示的内容完全一致。

正确的解决方案

方法1:每次绘图前创建新的Figure

通过plt.figure()手动生成新的空白画布,这样后续的绘图操作就会在新的figure上进行,保存的fig实例也会是独立的:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)

# 生成第一个独立画布,绘制蓝色直线
plt.figure()
plt.plot(x, y1, linewidth=1, color='deepskyblue')
fig1 = plt.gcf()

# 生成第二个独立画布,先画蓝线再画红线
plt.figure()
plt.plot(x, y1, linewidth=1, color='deepskyblue')
plt.plot(x, y2, linewidth=1, color='red')
fig2 = plt.gcf()

# 按需显示绘图
fig1.show()  # 仅显示蓝色直线
fig2.show()  # 显示两条曲线

方法2:使用面向对象API(推荐)

Matplotlib官方更推荐用面向对象的方式操作,这种方式能更精准地控制每个figure和axes,避免全局状态的干扰:

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 10, 0.1)
y1 = x
y2 = np.sin(x)

# 创建第一个figure和对应的axes,绘制蓝色直线
fig1, ax1 = plt.subplots()
ax1.plot(x, y1, linewidth=1, color='deepskyblue')

# 创建第二个figure和对应的axes,绘制两条曲线
fig2, ax2 = plt.subplots()
ax2.plot(x, y1, linewidth=1, color='deepskyblue')
ax2.plot(x, y2, linewidth=1, color='red')

# 按需显示
fig1.show()
fig2.show()

额外说明

  • 如果是在Jupyter Notebook环境中,记得先运行%matplotlib inline(用于静态显示)或者%matplotlib notebook(交互式显示),否则可能需要调用plt.show()来触发显示。
  • 面向对象的方式不仅能解决你的问题,后续修改绘图元素(比如添加坐标轴标签、调整图例、设置刻度)时,也能更清晰地定位到对应的绘图实例,避免混乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:11:05