在图像上使用箭头说明渐变时,箭头非常密集。我如何显示总趋势而不是每个箭头?
例如,在此图像中显示渐变的箭头箭头:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
image = Image.open('test.png')
array = np.array(image)
array = array[:,:,1]
array = array.astype(float)
dy, dx = np.gradient(array)
plt.figure(figsize=(10, 10))
plt.imshow(array)
plt.quiver(dx, -dy)
plt.show()
添加
Y, X = np.mgrid[0:50:5, 0:50:5]
plt.quiver(X, Y, dx[::5, ::5], -dy[::5, ::5])
产生奇怪的结果
答案 0 :(得分:1)
quiver
图有一个参数scale
。来自♦the documentation:
比例:[无|漂浮]
每箭头长度单位的数据单位,例如每个绘图宽度的m / s;较小的比例参数使箭头更长。如果为None,则使用简单的自动缩放算法,基于平均向量长度和向量的数量。
将此比例设置为合理的值,也可让图表显得更好。另请查看其他参数,例如scale_units
和units
。
import numpy as np
import matplotlib.pyplot as plt
f = lambda x,y, x0,y0, sig: np.exp((-(x-x0)**2- (y-y0)**2)/sig**2)
X,Y = np.meshgrid(np.arange(50), np.arange(50))
array = f(X,Y, 24,24,7.)
dy, dx = np.gradient(array)
n = 3
plt.figure(figsize=(7, 7))
plt.imshow(array)
plt.quiver(X[::n,::n],Y[::n,::n],dx[::n,::n], -dy[::n,::n],
np.sqrt(dx[::n,::n]**2+dy[::n,::n]**2),
units="xy", scale=0.04, cmap="Reds")
plt.show()