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

Matplotlib绘图重叠求助:新生成的.png图表包含旧图内容

Matplotlib绘图异常问题解决

问题1:新图表带旧图残留

在Spyder里跟着Python教程用Matplotlib绘图,用plt.savefig()直接存成.png时,新画的图总会带上之前的元素(比如粉色标记、旧线条),和教程效果对不上。因为plt.show()加载慢,还得配matplotlib.use('TkAgg')才能跑,所以改用直接存图的方式。

问题2:savefig输出到stdout报错

试了用plt.savefig(stdout,buffer)加sys.stdout.flush(),结果报错:AttributeError: 'TTYOutStream' object has no attribute 'buffer',已经把这段代码弃了。

解决方案

搞定绘图残留

每次绘图前后清理画布,两种方法选一种就行:

  • 绘图前调用plt.figure(),创建全新的空白画布,确保每次都是从零开始画
  • 存完图后调用plt.clf()清空当前画布,或者plt.close()关掉当前图表

示例代码:

import matplotlib.pyplot as plt

# 画第一个图
plt.plot([1,2,3], marker='o', color='hotpink')
plt.savefig('figure51.png')
plt.clf()  # 清空画布

# 画第二个图
plt.plot([1,2,3], linestyle='dotted')
plt.savefig('figure52.png')
plt.clf()

解决stdout输出报错

Spyder的sys.stdout是TTYOutStream类型,没有buffer属性,所以不能直接这么用。要是需要把图片存到内存缓冲区,改用io.BytesIO():

import matplotlib.pyplot as plt
import io

buffer = io.BytesIO()
plt.plot([1,2,3])
plt.savefig(buffer, format='png')
buffer.seek(0)  # 把缓冲区指针移回开头
# 之后可以处理buffer里的数据,比如写文件或者传输
plt.clf()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:20