与未排序数据相交的matplotlib图

发布于 2021-01-29 14:09:41

当绘制一些点matplotlib时,在创建图形时遇到一些奇怪的行为。这是产生该图的代码。

import matplotlib.pyplot as plt
desc_x =[4000,3000,2000,2500,2750,2250,2300,2400,2450,2350]
rmse_desc = [.31703 , .31701, .31707, .31700, .31713, .31698, .31697, .31688, .31697, .31699]

fig = plt.figure()
ax = plt.subplot(111)

fig.suptitle('title')
plt.xlabel('x')
plt.ylabel('y')

ax.plot(desc_x, rmse_desc, 'b', label='desc' )
ax.legend()
plt.show()

这是它创建的图形

带线图

如您所见,此图具有相交的线,有些在线图中看不到。当我隔离点并且不画线时,我得到以下结果:

无线图

如您所知,有一种无需交叉线即可连接这些点的方法。

matplotlib为什么要这样做?我想我可以通过不对我的xcolumn不排序来解决它,但是如果我对它进行排序,我将失去从x1到y1的映射。

关注者
0
被浏览
211
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    您可以使用numpy的argsort功能维护订单。

    Argsort“ …沿着给定的轴按排序顺序返回形状与该索引数据相同形状的索引数组。”,因此我们可以使用它来将x和y坐标重新排序在一起。这是完成的过程:

    import matplotlib.pyplot as plt
    import numpy as np
    
    desc_x =[4000,3000,2000,2500,2750,2250,2300,2400,2450,2350]
    rmse_desc = [.31703 , .31701, .31707, .31700, .31713, .31698, .31697, .31688, .31697, .31699]
    
    order = np.argsort(desc_x)
    xs = np.array(desc_x)[order]
    ys = np.array(rmse_desc)[order]
    
    fig = plt.figure()
    ax = plt.subplot(111)
    
    fig.suptitle('title')
    plt.xlabel('x')
    plt.ylabel('y')
    
    ax.plot(xs, ys, 'b', label='desc' )
    ax.legend()
    plt.show()
    

    在此处输入图片说明



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看