You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 16:06:02