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

Matplotlib Quiver图原点设为(0,0)时绘制失败的问题咨询

关于Matplotlib Quiver绘制原点出发多箭头的问题解答

这是预期行为吗?

这不属于用户预期的合理行为,而是Matplotlib的quiver函数处理所有起点完全重合的数组时的边界计算异常。当传入全0的X/Y数组时,quiver内部会计算相邻箭头起点的间距,结果为0,除以极小值eps后产生无效值(NaN/无穷大),导致渲染逻辑出错,最终只显示一个箭头并抛出警告。

如何绘制原点为(0,0)的Quiver图?

有两种简单有效的解决方法:

方法一:利用标量起点的广播机制

直接传入标量0作为起点,Matplotlib会自动将标量广播为与U/V同形状的数组,每个向量都会从(0,0)出发,且不会触发内部计算异常:

import matplotlib.pyplot as plt
import numpy as np

angles = np.linspace(0, 2*np.pi, 8, endpoint=False)
U = np.cos(angles)
V = np.sin(angles)
fig, ax = plt.subplots()
# 传入标量0作为起点,自动适配多向量
p = ax.quiver(0, 0, U, V, angles='xy', headlength=2)
plt.axis('equal')
plt.show()

方法二:给起点添加极小偏移

如果必须使用数组形式的起点,可以给X/Y数组添加极小偏移量(如1e-10),视觉上完全看不出差异,但能避免除以0的计算问题:

import matplotlib.pyplot as plt
import numpy as np

angles = np.linspace(0, 2*np.pi, 8, endpoint=False)
# 添加极小偏移,避免全0数组的计算异常
X = np.zeros_like(angles) + 1e-10
Y = np.zeros_like(angles) + 1e-10
U = np.cos(angles)
V = np.sin(angles)
fig, ax = plt.subplots()
p = ax.quiver(X, Y, U, V, angles='xy', headlength=2)
plt.axis('equal')
plt.show()

内容的提问来源于stack exchange,提问作者PrinceKajuku

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:52:47