问题:我有一个形状为terrain
的数组(N+2,N+2,4)
。在最后一个维度中,我们有1或-1,如果该方向上的箭头指向所关注的点,则为-1,如果箭头指向该方向上的点为1,则为1。顺序是北,南,东,西。因此,1,-1,1,1
对应于:
我正在尝试使用的代码如下。但这是行不通的,因为它们都是从该点绘制的。我找不到一种方法,可以根据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')
可能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