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

Python脚本中多图分存不同PDF文件异常问题咨询

问题根源分析

你的问题本质是没有正确管理Matplotlib的Figure对象。Matplotlib采用状态机模式,默认会在当前活跃的Figure上绘图:

  • 如果不主动创建新的Figure,第二次绘图可能复用了第一张图的Figure(尤其是在plt.show()未销毁旧Figure的环境中),导致两次保存都指向同一张图;
  • 而调用plt.clf()后出现空白,是因为plt.show()关闭窗口后,原Figure已被销毁,plt.clf()没有可操作的对象,后续绘图的状态异常,最终保存了未正确渲染的空画布。

解决方案

下面提供两种可靠的解决方式,按推荐程度排序:

1. 显式创建独立的Figure对象(最推荐)

通过直接创建plt.figure()实例,为每张图分配完全独立的画布,彻底避免状态机的干扰:

import matplotlib.pyplot as plt

# 绘制并保存第一张图
fig1 = plt.figure()
plt.plot([1, 2, 3], label='Graph 1')
plt.legend()
fig1.savefig('graph1.pdf')
plt.show()  # 关闭窗口后fig1会被销毁,但我们已经完成保存

# 绘制并保存第二张图
fig2 = plt.figure()
plt.plot([3, 2, 1], label='Graph 2', color='red')
plt.legend()
fig2.savefig('graph2.pdf')
plt.show()

这种方式逻辑清晰,每张图的画布完全独立,不会出现混淆。

2. 用plt.figure()创建新图替代plt.clf()

如果你不想显式管理Figure对象,在绘制第二张图前调用plt.figure()主动创建新画布,而非用plt.clf()清除旧内容:

import matplotlib.pyplot as plt

# 第一张图
plt.plot([1, 2, 3], label='Graph 1')
plt.legend()
plt.savefig('graph1.pdf')
plt.show()

# 创建新画布,准备绘制第二张图
plt.figure()
plt.plot([3, 2, 1], label='Graph 2', color='red')
plt.legend()
plt.savefig('graph2.pdf')
plt.show()

plt.figure()会强制生成一个新的活跃Figure,确保第二张图绘制在全新的画布上,保存时自然是正确的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:34:03