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

Matplotlib箭头未正确对齐(应与直线平行),求问题原因

问题:Matplotlib箭头方向错误,本该与直线平行

你用Matplotlib绘制的箭头方向不符合预期,它本该和绘制的直线平行,但实际指向相反。相关代码及效果如下:

import numpy as np
import matplotlib.pyplot as plt

S1 = np.array([[-0.4,0.4],
               [-0.6,0.5]])
    
y1 = 0.5
y2 = 0.4
x1 = -0.6
x2 = -0.4
n1 = -(y2-y1)
n2 =  (x2-x1)
x, y = S1.T
plt.plot(x,y)
plt.quiver(-0.5, 0.45, (x2-x1), (y2-y1))
plt.show()

箭头方向错误示意图

原因分析

问题核心是向量方向不匹配:

  • 你绘制的直线是按S1中点的顺序,从(-0.4, 0.4)到(-0.6, 0.5),直线的方向向量为(-0.6 - (-0.4), 0.5 - 0.4)即(-0.2, 0.1)
  • 但你传给quiver的向量是(x2-x1, y2-y1),也就是(-0.4 - (-0.6), 0.4 - 0.5)即(0.2, -0.1),和直线方向完全相反,所以箭头指向错误。

修正方案

有两种简单的修正方式:

方式1:反转传入quiver的向量

直接把向量改成和直线方向一致的(x1-x2, y1-y2):

import numpy as np
import matplotlib.pyplot as plt

S1 = np.array([[-0.4,0.4],
               [-0.6,0.5]])
    
y1 = 0.5
y2 = 0.4
x1 = -0.6
x2 = -0.4
x, y = S1.T
plt.plot(x,y)
# 传入和直线方向一致的向量
plt.quiver(-0.5, 0.45, (x1-x2), (y1-y2))
plt.show()

方式2:调整S1中点的顺序

让直线的绘制顺序和你定义的(x1,y1)到(x2,y2)一致:

import numpy as np
import matplotlib.pyplot as plt

# 调整点顺序,直线从(x1,y1)到(x2,y2)
S1 = np.array([[-0.6,0.5],
               [-0.4,0.4]])
    
y1 = 0.5
y2 = 0.4
x1 = -0.6
x2 = -0.4
x, y = S1.T
plt.plot(x,y)
plt.quiver(-0.5, 0.45, (x2-x1), (y2-y1))
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:20:41