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

如何去除matplotlib绘图中y=0位置出现的多余水平直线?

图示:y=0处存在未显示在图例中的水平直线

问题根因

多余水平线是plt.legend()的调用位置错误导致的:

  • 你把图例渲染逻辑写在了绘图的for循环内部,第一次进入循环时,还没有执行plt.plot()生成任何带有效标签的线条对象,此时matplotlib会初始化一个无标签的默认线条锚定在y=0位置。
  • 后续循环中反复调用plt.legend()不会清除这个初始生成的无效线条,该线条因为没有绑定label属性,所以不会出现在图例列表中,就呈现为你看到的“不属于数据集的多余水平线”。
  • 循环内反复调用plt.legend()属于冗余操作,除了引发这类渲染异常,还会不必要地消耗绘图资源。

修复方案

将plt.legend()移动到for循环外部,等所有折线全部绘制完成后,仅调用一次图例渲染即可。修正后的可运行代码如下:

datelist2 = [str(x) for x in datelist]
x = [dt.datetime.strptime(d,'%m/%d/%Y').date() for d in datelist2]

plt.figure(figsize=(10,8), dpi=150)
ax = plt.gca()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y'))
ax.xaxis.set_major_locator(mdates.DayLocator(interval=5))

for i in range(1, 10):
    y = pushdf.iloc[:, i]
    plt.plot(x, y, label=pushdf.columns[i])

# 所有线条绘制完成后统一添加图例
plt.legend(loc='best')
plt.xlabel("Date")
plt.ylabel("Weight (lb)")
plt.title("Push Progression")
plt.gcf().autofmt_xdate()
plt.show()

补充排查

如果调整位置后依然存在异常线条,检查两个点:

  • 确认pushdf的列索引是否正确,range(1,10)有没有误取到全为0/空值的列,未设置label的列绘制出的线条也不会出现在图例中
  • 确认没有在其他代码段提前调用过plt.axhline(y=0)这类绘制水平参考线的接口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:23