matplotlib绘制多y值对应单x值数据出现锯齿折线怎么解决
问题原因
matplotlib的plot函数绘制折线时,会严格按照传入数据点的先后顺序依次连线,你当前的x列数值是乱序排列的,点的位置来回跳动,自然会出现折返的锯齿效果。仅单独对x值做排序会破坏x和y的对应关系,无法解决问题。
解决方法
先对整个DataFrame按照x列(第0列)排序,保留x和y的对应关系后再绘图即可,修正代码如下:
import pandas as pd import matplotlib.pyplot as plt data = {0: [0.9991008043, 0.7186818868, 0.5990678817, 0.000260249999, -0.0002838699947, 0.9982619435, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.5990678817, 0.9987124801, 0.9983241558, 0.9979358315, 0.9975475073], 1: [0.141599882, -0.0239639965, -0.8235306015, -0.5624349256, 0.9576566094, 0.1070839175, -0.7615373918, -0.7436025052, -0.7207683284, -0.7181828611, -0.7169656166, -0.7189734963, -0.7248864019, -0.7334572909, -0.7431326927, -0.7535460886, -0.7653977208, -0.7772543193, -0.7850276183, -0.7882964598, -0.788996217, -0.7894645357, -0.7800111345, -0.7680467609, -0.7651210906, -0.7626205455, 0.1662477571, 0.1776703065, 0.178896989, 0.1792297328]} df = pd.DataFrame(data) # 按x列升序排序,保留x与y的对应关系 df_sorted = df.sort_values(by=df.columns[0]) plt.plot(df_sorted.iloc[:,0], df_sorted.iloc[:,1], marker="o", linewidth=2) plt.show()
补充说明
如果存在单个x值对应多个y值的情况,排序后仍可能出现局部上下折返的折线,可根据实际需求选择优化方案:
- 若需要展示整体趋势:可对x做分箱后取y的均值/中位数,或使用多项式拟合、LOESS局部回归等方法生成平滑曲线
- 若需要展示所有数据点的分布:建议改用散点图
plt.scatter绘制,更适配单x对应多y的场景
内容的提问来源于stack exchange,提问作者user13680518
相关产品推荐
相关产品推荐

