【发布时间】:2021-11-10 12:50:14
【问题描述】:
我在网格网格上创建了一个 100x100 单位的矢量场,如下所示。我在 X 和 Y 网格中的每个点组合上评估一些函数。
import numpy as np
import matplotlib.pyplot as plt
N=100 # of points
#set arrays of n, m and td_50 to try
n_array=np.linspace(0.01,1,N)
td50_array=np.linspace(1,100,N)
X,Y=np.meshgrid(n_array,td50_array)
Z=X*Y
我现在正在尝试绘制 Z 梯度的矢量场,所以我这样做了
#compute gradient,normalized gradient x and y components, as well as gradient raw magnitude
gradx,grady=np.gradient(Z)
gradxnorm=gradx/np.sqrt(gradx**2+grady**2)
gradynorm=grady/np.sqrt(gradx**2+grady**2)
gradmag=np.sqrt(gradx**2+grady**2)
#plot
plt.pcolor(X, Y, gradmag,cmap='rainbow')
plt.colorbar()
plt.quiver(X, Y, gradxnorm , gradynorm,units='xy')
plt.show()
我想用梯度方向(具有统一值)绘制梯度幅度叠加图
如果我设置 N=10,那么我会得到一个看起来像这样的干净的图。这正是我想要的
但是,我想在每个方向上评估不止 10 个点,但如果我设置 N=100,我会得到一个像这样的图,而不是箭头太小太频繁,无法用渐变。
我可以看到这只是因为我有更多的点,但是是否有可能使第二个图上的箭头看起来更像第一个图上的箭头?我不需要网格中的每个点都有一个箭头,所以我希望更少的箭头实际上更大,而不是每个像素上都有一个小箭头。
【问题讨论】:
-
不要绘制太多箭头并更改比例参数:matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.quiver.html
标签: python matplotlib vector gradient