如何解决Matplotlib 箭袋图矢量不垂直于轮廓
我想创建函数 f(x,y) = x + 0.1xy 的等高线图,并在顶部绘制其梯度场。 问题:当函数的变量范围不同时,梯度向量不垂直于轮廓。
功能:
def f(x,y):
return x + 0.1 * x * y
渐变:
def grad_f(x,y,norm=True):
dfdx = 1 + 0.1 * y
dfdy = 0.1 * x
if norm:
norm = np.linalg.norm((dfdx,dfdy),axis=0)
dfdx /= norm
dfdy /= norm
return dfdx,dfdy
这里一切正常:
x = np.linspace(0,10,10)
y = np.linspace(0,10)
X,Y = np.meshgrid(x,y)
Z = f(X,Y)
dfdx,dfdy = grad_f(X,Y)
ax.contour(X,Y,Z,levels=np.arange(1,20,2))
ax.quiver(X,dfdx,dfdy,Z)
但是假设我想绘制具有不同范围的变量。然后梯度向量不再垂直于轮廓出现。
x = np.linspace(0,5,10) # Range of x is [0,5]
y = np.linspace(0,10)
X,Z)
我试过了:
- 使用
set_xlim
和set_ylim
来限制绘图区域(而不是在调用np.linspace
时使用不同的范围) - 在调用
angles="xy"
时设置units="xy"
和quiver
,每个 this - 尝试使用其他参数,例如
scale_units
这些选项都没有解决问题。似乎有帮助的是:
scale = max(y) / max(x)
ax.quiver(X,dfdy*scale,Z)
但是,我不确定这是否确实是正确的解决方案。当变量具有不同的范围时,绘制箭袋图的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。