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

oxiaedzo  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(97)

我有一个(a, b)对的列表,我想在python中用matplotlib作为实际的x-y坐标来绘制。目前,它正在绘制两个图,其中列表的索引给出了x坐标,第一个图的y值是对中的a s,第二个图的y值是对中的b s。
为了澄清,我的数据看起来像这样: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)]

Plot错误

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


x1c 0d1x的数据

期望出图

这产生了正确的图,但是很多行代码被用来解包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')


9nvpjoqh

9nvpjoqh1#

在问题中给出li

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

字符串
使用zip将数据从pairs解压缩到列表中:

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)


这个一行程序使用unpacking operator (*)解包zip的元组列表,并将zip对象解包到plot API中。

plt.scatter(*zip(*li))


的数据

plt.plot(*zip(*li))


goucqfw6

goucqfw62#

如果你有一个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()

字符串

6ovsh4lw

6ovsh4lw3#

如果要绘制连接列表中所有点的单线,

plt.plot(li[:])

plt.show()

字符串
这将绘制一条线,将列表中的所有对连接为笛卡尔平面上从列表开始到结束的点。

相关问题