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

Cod*_*lus 91 python plot matplotlib coordinates

我有一个对列表(a, b),我想matplotlib在python中作为实际的xy坐标绘制.目前,它正在制作两个图,其中列表的索引给出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)
Run Code Online (Sandbox Code Playgroud)
  • 如何让matplotlib将这些对绘制为xy坐标?

感谢您的帮助!

sas*_*llo 150

根据这个例子:

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()
Run Code Online (Sandbox Code Playgroud)

将产生:

在此输入图像描述

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

x, y = zip(*li)
Run Code Online (Sandbox Code Playgroud)

所以,单线:

plt.scatter(*zip(*li))
Run Code Online (Sandbox Code Playgroud)

  • 对于一个2列的numpy数组,`plt.scatter(*xy.T)`可以工作:对于`x,y = xy.T,它是短的和模糊的; plt.scatter(x,y)` (4认同)
  • 随机“plt.scatter”示例与问题的关系有点令人困惑。 (4认同)
  • x,y = zip(* li)是非常优雅的python代码!我一直在做更直接的两行代码,每一行都有一个列表压缩(就像原始问题一样) (2认同)

Zwe*_*end 30

如果你有一个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()
Run Code Online (Sandbox Code Playgroud)

  • 所以没有办法有一个 `data=np.array([[x1,y1],[x2,y2],etc.])` 的 `np.array` 并使用 `plt.plot(data)`。我总是必须给出两个数组而不是数组数组? (3认同)
  • @MaxCoplan,没错,但是您可以使用 `plt.plot(*data.T)` ,它的作用与上面相同,但跳过中间步骤。 (2认同)

小智 14

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

plt.plot(li[:])

plt.show()
Run Code Online (Sandbox Code Playgroud)

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

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