在python matplotlib中绘制(x,y)坐标列表


110

我有一个列表,(a, b)希望matplotlib在python中绘制为实际的xy坐标。当前,它正在绘制两个图,其中列表的索引给出x坐标,第一个图的y值是对中的as,第二个图的y值是对中的bs。

澄清一下,我的数据看起来像这样:li = [(a,b), (c,d), ... , (t, u)] 我想做一个单行代码,只是调用plt.plot()不正确。如果我不需要单线,我可以轻松地做:

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)

如何获取matplotlib将这些对绘制为xy坐标?

Answers:


180

按照这个例子

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

plt.scatter(x, y)
plt.show()

将产生:

在此处输入图片说明

要将数据从成对的数据包解压缩为列表,请使用zip

x, y = zip(*li)

因此,单线:

plt.scatter(*zip(*li))

7
对于2列的numpy数组,plt.scatter( * xy.T )工作原理:简短而晦涩x, y = xy.T; plt.scatter( x, y )
丹尼斯

2
x, y = zip(*li)真的是优雅的python代码!我一直在做更直接的两行代码,每行都有一个列表压缩(就像原始问题一样)
Trevor Boyd Smith,

1
这有点使随机plt.scatter示例与问题有关。
jamesdlin

36

如果您有一个numpy数组,则可以执行以下操作:

import numpy as np
from matplotlib import pyplot as plt

data = np.array([
    [1, 2],
    [2, 3],
    [3, 6],
])
x, y = data.T
plt.scatter(x,y)
plt.show()

1
因此,有没有办法有一个np.arraydata=np.array([[x1,y1],[x2,y2],etc.])使用plt.plot(data)。我总是要给两个数组而不是数组的数组吗?
Max Coplan

1
@MaxCoplan,是的,但是您可以使用plt.plot(*data.T)与上面相同的方法,但是跳过中间步骤。
Zweedeend

7

如果要绘制一条连接列表中所有点的线

plt . plot ( li [ : ] )

plt . show ( )

这将绘制一条连接列表中所有对的直线,作为从列表起点到终点的笛卡尔平面上的点。我希望这就是您想要的。


3
他不想绘制单行,而是想使用“单线”(单行代码)进行绘制。他一直在寻找(并在3年前得到的)答案scatter()
达特茅斯

8
既然此答案说明了它的工作条件,即“如果您想绘制一条连接列表中所有点的线”,那么它真的值得一票否决吗?
盖德(Gathide)'17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.