Python matplotlib连接线图中的错误点

Python matplotlib连接线图中的错误点,python,matplotlib,Python,Matplotlib,我正在使用matplotlib python库绘制两个列表。有两个数组x和y,它们在绘制时是这样的- 使用的代码如下所示- import matplotlib.pyplot as plt plt.plot(x,y,"bo") plt.fill(x,y,'#99d8cp') 它绘制点,然后使用直线连接点。但问题是它没有正确地连接这些点。x轴上的点0和2连接错误,而不是1和2。同样,在另一端,它连接点17到19,而不是18到19。我还尝试使用- plt.plot(x,y)

我正在使用matplotlib python库绘制两个列表。有两个数组xy,它们在绘制时是这样的-

使用的代码如下所示-

import matplotlib.pyplot as plt
plt.plot(x,y,"bo")
plt.fill(x,y,'#99d8cp')
它绘制点,然后使用直线连接点。但问题是它没有正确地连接这些点。x轴上的点0和2连接错误,而不是1和2。同样,在另一端,它连接点17到19,而不是18到19。我还尝试使用-

plt.plot(x,y)
但它也错误地连接了这些点。如果有人能为我指明正确的方向,告诉我为什么会发生这种情况,以及如何解决它,我将不胜感激


谢谢

matplotlib的线条要求坐标是有序的,因此您以一种“奇怪”的方式连接点(尽管与您告诉matplotlib的方式完全相同,例如从(0,1)到(3,2))。只需在打印前对数据进行排序即可解决此问题

#! /usr/bin/env python
import matplotlib.pyplot as plt
x = [20, 21, 22, 23, 1, 0, 3, 2, 5, 4, 7, 6, 9, 8, 11, 10, 13, 12, 15, 14, 17, 16, 19, 18]
y = [ 1,  1,  1,  1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2,  2,  2,  2,  2,  2,  2,  2,  2,  1,  1]

x2,y2 = zip(*sorted(zip(x,y),key=lambda x: x[0]))

plt.plot(x2,y2)
plt.show()
这会给你想要的,如下所示:


你可以自己用这些x和yx的值来测试这个问题[20,21,22,23,1,0,3,2,5,4,7,6,9,8,11,10,13,12,15,14,17,16,19,18]y=[1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1]我不知道你认为它应该是什么样子的?你想让它有一条从(1,1)到(2,2)的线路吗?是的,我想让它连接从(1,1)到(2,2)