我正在使用 matplotlib python 库绘制两个列表。有两个数组x和y绘制时看起来像这样 -
使用的代码是这样的——
import matplotlib.pyplot as plt
plt.plot(x,y,"bo")
plt.fill(x,y,'#99d8cp')
Run Code Online (Sandbox Code Playgroud)
它绘制点,然后使用一条线连接这些点。但问题是它没有正确连接点。x 轴上的点 0 和 2 连接错误,而不是 1 和 2。同样在另一端,它连接点 17 到 19,而不是 18 到 19。我还尝试使用 - 绘制简单的折线图 -
plt.plot(x,y)
Run Code Online (Sandbox Code Playgroud)
但是,它也错误地连接了这些点。如果有人能指出我为什么会发生这种情况以及可以采取哪些措施来解决它,我将不胜感激。
谢谢!!
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()
Run Code Online (Sandbox Code Playgroud)
这应该给你你想要的,如下所示: