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

我有一个对 (a, b)的列表,我想用 python 中的 matplotlib作为实际的 x-y 坐标。目前,它正在制作两个图形,其中列表的索引给出 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 将这些对绘制为 x-y 坐标?


样本数据

# sample data
li = list(zip(range(1, 14), range(14, 27)))


li → [(1, 14), (2, 15), (3, 16), (4, 17), (5, 18), (6, 19), (7, 20), (8, 21), (9, 22), (10, 23), (11, 24), (12, 25), (13, 26)]

错误的情节

plt.plot(li)
plt.title('Incorrect Plot:\nEach index of the tuple plotted as separate lines')

enter image description here

期望的情节

  • 这样就产生了正确的图形,但是对于很多行代码都是用来解包 li的。我需要用一行代码来解压缩和绘图,而不是用多个列表理解。
xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)
plt.title('Correct Plot:\nBut uses to many lines to unpack li')

enter image description here

529795 次浏览

考虑到问题中的 li:

li = list(zip(range(1, 14), range(14, 27)))

要将数据从对中解压缩到列表中,请使用 zip:

x, y = zip(*li)


x → (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
y → (14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26)

一行程序使用 拆箱操作员(*),解压 zip的元组列表,并将 zip对象解压到 plot API 中。

plt.scatter(*zip(*li))

enter image description here

plt.plot(*zip(*li))

enter image description here

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

plt.plot(li[:])


plt.show()

这将绘制一条连接列表中所有对的线,作为从列表开始到结束的笛卡尔平面上的点。 我希望这是你想要的。

如果你有一个数字数组,你可以这样做:

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