如何调整Matplotlib箭头图(Quiver Plot)中的向量长度?
调整Matplotlib Quiver图中向量长度的简单方法
我使用以下代码绘制曲线的切线向量,但图中的向量显示过小,想修改这些向量的长度,最简单的实现方法是什么?
我的代码:
fig, ax = plt.subplots(figsize=(4, 4)) t, dt = np.linspace(-4, 4, 10, retstep=True) x = t y = t**3 - 9*t xy = np.stack((x, y), axis=1) n = len(xy) d1ydx1 = np.apply_along_axis(np.gradient, axis=0, arr=xy) ######################## # Normalize all tangents ######################## f = lambda m : m / np.linalg.norm(m) T = np.apply_along_axis(f, axis=1, arr=d1ydx1) for idx in range(n): ax.quiver(xy[idx][0],xy[idx][1],T[idx][0],T[idx][1], color="green") plt.show()
绘制结果:

最简单的两种实现方法:
方法1:直接缩放归一化后的向量
因为你已经将切线向量归一化为单位长度,只需给T乘以一个自定义的缩放因子,就能精确控制向量显示长度:
# 修改T的定义,乘以缩放因子(比如2,可根据需求调整) f = lambda m : m / np.linalg.norm(m) T = np.apply_along_axis(f, axis=1, arr=d1ydx1) * 2 # 这里的2就是缩放系数 for idx in range(n): ax.quiver(xy[idx][0],xy[idx][1],T[idx][0],T[idx][1], color="green")
方法2:使用quiver的scale参数
在ax.quiver()调用中添加scale参数,减小该值会让向量显示得更大(默认scale值是根据数据范围自动计算的):
for idx in range(n): ax.quiver(xy[idx][0],xy[idx][1],T[idx][0],T[idx][1], color="green", scale=0.5)
如果想要向量长度和坐标轴单位完全对应,可以配合angles='xy'和scale_units='xy':
for idx in range(n): ax.quiver(xy[idx][0],xy[idx][1],T[idx][0],T[idx][1], color="green", angles='xy', scale_units='xy', scale=1)
其中方法1最为直观,因为能直接通过缩放因子控制向量的绝对长度,适合你的归一化场景。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

