Python 具有未排序数据的相交matplotlib图

Python 具有未排序数据的相交matplotlib图,python,numpy,matplotlib,plot,Python,Numpy,Matplotlib,Plot,使用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.figur

使用
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的映射。

您可以使用numpy函数来维护顺序

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()

太好了,谢谢。我的猜测正确吗,因为x VAL未排序,所以图表看起来很奇怪?啊,是的,这是正确的。Matplotlib将按照您提供的顺序在每一对之间绘制线。您也可以使用类似的方法来进行排序(zip(desc_x,rmse_desc)),但我更喜欢numpy方式我无法理解创建weired graph的原因。我有一个分类变量(月;x)和故障数(y)。两者都被排序了,但我得到了相同的weired图。在
desc\u x
rmse\u desc
之间有函数关系吗?