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
相关产品推荐
相关产品推荐

