matplotlib quiver绘制梯度矢量场时箭头过密过小问题问询
解决方法
你只需要对quiver用到的网格坐标、归一化梯度分量做间隔采样,同时调整箭头尺寸参数即可,具体实现如下:
修改后的完整代码
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 #compute gradient,normalized gradient x and y components, as well as gradient raw magnitude gradx,grady=np.gradient(Z) # 加小常量避免除以0的运行警告 grad_norm = np.sqrt(gradx**2 + grady**2 + 1e-8) gradxnorm=gradx/grad_norm gradynorm=grady/grad_norm gradmag=grad_norm # 定义采样步长:N=100时等效N=10的密度,步长设为10 step = N // 10 # 按步长采样网格和矢量分量 X_sample = X[::step, ::step] Y_sample = Y[::step, ::step] gx_sample = gradxnorm[::step, ::step] gy_sample = gradynorm[::step, ::step] #plot plt.pcolor(X, Y, gradmag,cmap='rainbow') plt.colorbar() # 调整quiver参数,放大箭头尺寸 plt.quiver(X_sample, Y_sample, gx_sample, gy_sample, units='xy', scale=5, width=0.15, headwidth=3) plt.show()
参数说明
- 采样步长
step:此处设置为N//10,可以保证不管N取10的多少倍,箭头密度都和N=10时完全一致,无需手动修改参数。如果需要进一步调整疏密,直接修改步长数值即可,步长越大箭头越少。 quiver尺寸调整参数:scale:值越小箭头整体尺寸越大,可根据显示效果微调width:控制箭杆的宽度headwidth:控制箭头头部的宽度比例
内容的提问来源于stack exchange,提问作者hex93
相关产品推荐
相关产品推荐

