python - 当值为零时如何完全删除箭袋箭头

标签 python python-3.x numpy matplotlib

我有一张大图,然后这样做:

test = np.zeros((800,800))
quiver_v = np.zeros((2,800,800))
quiver_v[0, 300,300] = 10

plt.imshow(test)
plt.quiver(quiver_v[0],quiver_v[1], scale_units='xy', angles='xy', scale=0.1, width=0.001, color='red') 

plt.show()

我得到以下 image .

我怎样才能将背景设置为“白色”,或者更确切地说,当值为零时如何避免为箭袋绘制任何东西?

最佳答案

如已删除的答案中所述,您需要过滤掉所有零长度向量。但是,我不计算每个向量的欧几里德长度,而是只检查每个向量分量是否为零,并屏蔽掉所有分量都恰好为零的那些向量。这省去了平方和平方根。然后,您可以使用计算出的掩码来过滤您的 quiver_v 值。但是,此屏蔽过程会返回一维有效值数组,因此为了在正确的位置显示箭袋,您需要为 quiver 命令提供坐标。这同样可以通过首先生成坐标的 meshgrid 来完成,然后可以使用用于 quiver_v 值的相同掩码对其进行过滤。这里是完整的例子:

请注意,imshow 有点棘手,因为它会转动您的 y 轴。如果不需要,您可以使用 ax.pcolormesh(idx_x,idx_y,test) 代替。如果您需要 imshow 的“方形像素”表示,您可以使用 ax.set_aspect('equal') 强制它。

from matplotlib import pyplot as plt
import numpy as np

xdim = 800
ydim = 800
test = np.zeros((xdim,ydim))
quiver_v = np.zeros((2,xdim,ydim))
quiver_v[0, 300,300] = 10

##produce a meshgrid of coordinates
idx_x = np.arange(xdim)
idx_y = np.arange(ydim)
idx_x,idx_y = np.meshgrid(idx_x, idx_y)

##mask out zero-length vectors:
##mask = ~np.logical_and(quiver_v[0] == 0,quiver_v[1] ==0)
mask = np.logical_or(quiver_v[0] != 0,quiver_v[1] !=0) ## <-- corrected: one operation less

##compute positions and lengths of all non-zero vectors
X = idx_x[mask]
Y = idx_y[mask]
U = quiver_v[0][mask]
V = quiver_v[1][mask]

##plot
fig, ax = plt.subplots()
ax.imshow(test)
ax.quiver(X,Y, U, V, scale_units='xy', angles='xy', scale=0.1, width=0.001, color='red') 

plt.show()

结果是这样的:

result of the above code

PS:紫色背景的原因是您使用 imshow 时只有一个常量值。您可以通过省略 imshow 调用轻松检查。

关于python - 当值为零时如何完全删除箭袋箭头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48782677/

相关文章:

python - Scikit 学习 : Logistic Regression model coefficients: Clarification

python - 如何从 qcombobox 获取 itemdata?

python - pytest - 如何知道选择了哪些标记

python - 导入 numpy 数组包装器

python - 使用 Numpy 在空数组中插入行

python - Numpy 高斯来自/dev/urandom

c++ - 使用 Boost.Python 从 DLL 动态加载 python 模块

python - 外语python中的Windows CMD行错误

python - 如何在python中生成具有两个节点之间的长最短路径的有向无环图

python - 统一码编码错误 : 'ascii' codec can't encode character in print function