我有一个以
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]]