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

Posted

技术标签:

【中文标题】在 python matplotlib 中绘制 (x, y) 坐标列表【英文标题】:Plotting a list of (x, y) coordinates in python matplotlib 【发布时间】:2014-02-26 10:59:03 【问题描述】:

我有一个对 (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 坐标?

【问题讨论】:

【参考方案1】:

根据this example:

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

【讨论】:

对于一个 2 列的 numpy 数组,plt.scatter( * xy.T ) 有效:对于 x, y = xy.T; plt.scatter( x, y ) 来说,简短而晦涩 x, y = zip(*li) 真是优雅的python代码!我一直在做更直接的两行代码,每行都有一个列表压缩(就像原始问题一样) 随机plt.scatter 示例与问题的关系有点令人困惑。【参考方案2】:

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

【讨论】:

因此没有办法拥有data=np.array([[x1,y1],[x2,y2],etc.])np.array 并使用plt.plot(data)。我总是要给出两个数组而不是数组数组? @MaxCoplan,没错,但你可以使用plt.plot(*data.T),它的作用与上述相同,但会跳过中间步骤。【参考方案3】:

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

plt.plot(li[:])

plt.show()

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

【讨论】:

他不想绘制单行,他想用“单行”(单行代码)进行绘制。他正在寻找的答案(并在 3 年前得到)是使用 scatter() 既然这个答案说明了它的工作条件,即“如果你想绘制一条连接列表中所有点的线”,它真的值得投反对票吗? @Gathide:是的,它值得一票否决,因为它根本不起作用,也不符合描述。 plt.plot(li) 就像 plt.plot(li[:])。它只是绘制 2 条线,将它们用作 (y1, y2) 而不是 (x1, y1)

以上是关于在 python matplotlib 中绘制 (x, y) 坐标列表的主要内容,如果未能解决你的问题,请参考以下文章

使用matplotlib在python中绘制曲线决策边界

python 使用matplotlib在Python中绘制Boxplot

如何使用matplotlib在python中绘制向量

Python中使用matplotlib 如何绘制折线图?

python Matplotlib绘制线性图

Python中matplotlib绘制折线图方法总结