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

如何调整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()

绘制结果:

quiver_plot


最简单的两种实现方法:

方法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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 02:52:15