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
相关产品推荐
相关产品推荐

