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

