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

Matplotlib plt.plot绘图异常:折线连接不符合预期问题排查

问题原因及解决方案

嘿,我一眼就看出问题所在啦!你遇到的绘图异常,根源是你的x列表中的数值并不是严格按递增顺序排列的——看一下你的x数组,在9000之后居然又出现了1000,而matplotlib的plot函数是严格按照你提供的列表索引顺序来连接点的,不是按照x值的大小顺序。这就导致绘图时,程序会从9000对应的点直接跳回1000对应的点,自然就出现了不符合预期的连线。

要解决这个问题,只需要先把x和y的配对数据按x值从小到大排序,再用排序后的数组绘图即可。具体代码如下:

import matplotlib.pyplot as plt

x = [1, 10, 50, 100, 250, 500, 750, 900, 950, 1000, 1500, 2000, 3500, 5000, 6500, 8000, 9000, 1000, 11000, 12000, 14000]
y = [0.8980629181861878, 0.10853165966272355, 0.08126119875907897, 0.06252053439617157, 0.06377455067634583, 0.06653642201423646, 0.059822401523590085, 0.062289491295814514, 0.05231357836723328, 0.05339253479242325, 0.05086378312110901, 0.05312803852558136, 0.059300369888544084, 0.05587265187501907, 0.06438382065296173, 0.059782819837331774, 0.08129128956794739, 0.05339253479242325, 0.08861093366146088, 0.0757862297296524, 0.10072390681505203]

# 将x和y配对后按x值升序排序
sorted_data = sorted(zip(x, y), key=lambda item: item[0])
x_sorted, y_sorted = zip(*sorted_data)

# 使用排序后的数据绘图
plt.plot(x_sorted, y_sorted, marker='D')
plt.xlabel("x")
plt.ylabel("y")
plt.show()

这段代码的核心逻辑是:

  • 用zip(x, y)把每个x值和对应的y值打包成元组
  • 用sorted()函数按元组中的第一个元素(也就是x值)排序
  • 再用zip(*sorted_data)把排序后的元组重新拆分成x和y的列表

这样处理后,所有点会按照x值从小到大的顺序排列,plot函数就会依次连接x轴上相邻的点,完全符合你的预期啦。另外,你x列表里重复的1000值也会被放在一起,正常显示对应的连线,如果你需要对重复值做特殊处理(比如取平均值),可以在排序后额外添加逻辑,但如果只是要正常连线的话,上面的代码就足够了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:43:12