我正在使用matplotlib python库绘制两个列表。有两个数组 x 和 y 在绘制时看起来像这样 -
Click here for plot (sorry don't have enough reputation to post pictures here)
使用的代码是 -
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)
但是它也错误地连接了这些点。如果有人能指出我为什么会发生这种情况以及可以采取哪些措施来解决它,我真的很感激。
谢谢!
答案 0 :(得分:3)
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()
那会给你你想要的东西,如下所示: