Matplotlib-沿基本方向指向和指向点的箭头

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

问题:我有一个形状为terrain的数组(N+2,N+2,4)。在最后一个维度中,我们有1或-1,如果该方向上的箭头指向所关注的点,则为-1,如果箭头指向该方向上的点为1,则为1。顺序是北,南,东,西。因此,1,-1,1,1对应于:

enter image description here

我正在尝试使用的代码如下。但这是行不通的,因为它们都是从该点绘制的。我找不到一种方法,可以根据terrain[i,j]中与所讨论方向相对应的位置值,轻松地按所需方向绘制点或从该点绘制图。

import numpy as np
import matplotlib.pyplot as plt
N=3
terrain = np.zeros((N+2,N+2,4))

for i in range(1, N+1):
    for j in range(1, N+1):
        terrain[i,j] = np.random.choice([-1,1],4)

for i in range(N+2):
    for j in range(N+2):
        iterr.append([i,j])

iterr = np.array(iterr)

fig = plt.figure()
ax = fig.add_subplot(111)
plt.quiver(iterr[:,0], iterr[:,1], terrain[:,:,0].reshape(((N+2)**2,1)), np.zeros(((N+2)**2,1)), color='k')
plt.quiver(iterr[:,0], iterr[:,1], terrain[:,:,1].reshape(((N+2)**2,1)), np.zeros(((N+2)**2,1)), color='yellow')
plt.quiver(iterr[:,0], iterr[:,1], np.zeros(((N+2)**2,1)), terrain[:,:,2].reshape(((N+2)**2,1)), color='blue')
plt.quiver(iterr[:,0], iterr[:,1], np.zeros(((N+2)**2,1)), terrain[:,:,3].reshape(((N+2)**2,1)), color='red')
python numpy matplotlib
1个回答
0
投票

可能plt.quiver(X, Y, U, V, C, **kw)不是您情况下最简单的方法。颤抖法将总是绘制箭头矢量(u,v)from(x,y)。

可能更容易遍历数据并使用plt.quiver(X, Y, U, V, C, **kw)绘制箭头。

使用您的数据结构和plt.arrow(x, y, dx, dy, **kwargs),我写了这个,我跳过了plt.arrow(x, y, dx, dy, **kwargs)中的所有0值:

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