使用 matplotlib 进行绘图的 2D 点切片列表

问题描述 投票:0回答:1

我有一个以

numpy
样式数组表示的二维点列表:

lines = np.array([
    [[1,1],  [2,3]],    # line 1 (x,y) -> (x,y)
    [[-1,1], [-2,2]],   # line 2 (x,y) -> (x,y)
    [[1,-1], [2,-7]]    # line 3 (x,y) -> (x,y)
])

我想用

matplotlib
以尽可能简单的形式绘制这些线。 然而,大多数 matplotlib 的方法都期望点以组件方式表示,如
([x1, x2, x3, ...], [y1, y2, y3, ...])
,而不是点方式。

我设法将切片正确用于带有向量的

quiver
类型图:

x = lines[:,0,0]
y = lines[:,0,1]
u = lines[:,1,0]
v = lines[:,1,1]

# quiver([X, Y], U, V, [C], **kwargs)
plt.quiver(x, y, u, v, color=['r','b','g'], scale=1, scale_units='xy', angles='xy')
plt.xticks(np.arange(-10, 10, 1))
plt.yticks(np.arange(-10, 10, 1))
plt.grid()
plt.show()

但我的印象是

quiver
并不是真正适合我的用例的绘图类型。尤其是
scale
scale_units
angles
的争论花了我很长时间才弄清楚。没有它们,矢量会显示“错误”。

我宁愿在这个签名中使用更简单的

plot

plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)

对于要绘制的每条线,需要两个 x 坐标,后跟 y 坐标。

所以对于上面的几行,我们需要

rearranged = [ [1,2],[1,3], [-1,-2],[1,2], [1,2],[-1,-7] ]
#              ^line1       ^line2         ^line3

如果我将这些静态添加到

plot
的调用中,这正是我所需要的。

问题是,如何切片或重新排列我的初始

lines
数组?

到目前为止我所拥有的是

lines[:,[0,0],[0,1]]

但这只给出了每行的 x 坐标:

[[ 1  1]
 [-1  1]
 [ 1 -1]]
python numpy matplotlib numpy-slicing
1个回答
0
投票

您需要将每一行分别传递给

plot

for line in lines:    # Loop through the first dimension of the array
    x = line[:,  0]
    y = line[:, 1]
    plt.plot(x, y)

plt.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.