使用Matplotlib绘图时为何出现一个x对应多个y的现象?
问题原因及解决办法
你的图像出现异常的核心原因是x列表里的数值量级差异极大:前三个和最后一个x值都是10^-7量级(也就是0.0000003到0.0000005左右),但第四个x值是0.9999997,几乎等于1,和其他值差了近1000万倍。
Matplotlib的plt.plot()是严格按照你给的x、y列表的原始顺序依次连接点的,所以绘制时会先连前三个小x值的点,然后突然跳到x≈1的位置,再跳回x≈5e-7的位置,这就形成了图像里横跨整个x轴的两条竖线,看起来很奇怪。
解决办法
- 按x值排序后再绘制:把x和y配对成元组,按x从小到大排序,再拆分回x、y列表,这样折线会按x的递增顺序连接,能正常展示趋势:
import matplotlib.pyplot as plt x = [3.0589998800678586e-07, 3.575999869553925e-07, 4.17199998992146e-07, 0.9999997019767761, 5.364000230656529e-07] y = [1509, 108, 99, 88, 85] # 配对并按x排序 sorted_pairs = sorted(zip(x, y), key=lambda p: p[0]) sorted_x, sorted_y = zip(*sorted_pairs) plt.plot(sorted_x, sorted_y) plt.save("./frequency.png") # 先保存再调用show,避免画布被清空 plt.show()
另外注意你的原代码有个小问题:plt.show()会弹出窗口并清空当前画布,之后再调用plt.save()会得到空白图,所以要先执行plt.save()再执行plt.show()。
- 剔除异常值:如果那个x≈1的值是数据错误或者不需要的异常点,直接删掉对应的x和y值即可。
内容的提问来源于stack exchange,提问作者liangyubo
相关产品推荐
相关产品推荐

