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

Matplotlib调用plt.plot仅一次却重复绘图(图例重复)求助

解决Matplotlib线条重复绘制、图例重复的问题

这种重复绘图的坑我之前踩过好几次,咱们从最常见的原因开始排查:

1. 代码重复执行/绘图语句重复

最可能的情况是你不小心重复调用了绘图代码——比如在Jupyter环境里重复运行了绘图单元格,或者代码里不小心复制粘贴了plt.plot()语句,甚至是循环逻辑出错导致plot被执行了两次。

解决办法:

  • 先清空所有存在的画布:在绘图代码开头加plt.close('all'),确保之前的绘图残留被清除
  • 检查代码,确保每个plt.plot()(或者ax.plot())只被调用一次,比如把所有绘图逻辑放在一个代码块里,避免重复执行

2. 图例被重复添加

如果你的代码里每次调用plot后都加了plt.legend(),或者在所有plot之后又重复调用了legend,就会导致图例每个条目显示两次。

正确的做法是:

  • 给每个plot指定label参数,然后只调用一次图例生成语句,比如:
# 每条线指定label
plt.plot(x, y1, label='线条1')
plt.plot(x, y2, label='线条2')
plt.plot(x, y3, label='线条3')

# 只调用一次legend
plt.legend()

3. 画布对象重复创建

如果你的代码里多次执行了fig, ax = plt.subplots(),会生成多个画布,新的绘图会叠加在旧画布上,看起来线条重复。

解决办法:

  • 确保只创建一次画布对象,或者在创建新画布前关闭旧的:plt.close('all')
  • 推荐使用面向对象的写法(用ax.plot()而不是直接plt.plot()),这样更清晰可控,示例:
import matplotlib.pyplot as plt
import numpy as np

plt.close('all') # 清空旧画布

x = np.linspace(0, 10, 100)
fig, ax = plt.subplots() # 只创建一次画布和轴

ax.plot(x, np.sin(x), label='正弦线')
ax.plot(x, np.cos(x), label='余弦线')
ax.plot(x, np.sin(x)*np.cos(x), label='乘积线')

ax.legend()
plt.show()

4. 交互式环境的残留问题

如果是在IPython、Jupyter这类交互式环境里,之前的绘图会话没被清空,新的绘图会默认添加到当前画布,导致重复。这时候重启内核或者执行plt.close('all')就能解决。

你可以先试试在代码最开头加plt.close('all'),然后重新运行绘图代码,应该就能解决重复线条和图例的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:22:09