我试图像这样从2个点绘制2个相反的箭头
现在我可以绘制2个相对的箭头,但是像这样在另一个箭头上
我知道要绘制的代码是
plt.arrow(x_start, y_start, x_length, y_length)
但是不知道如何绘制2条这样的独立箭头。有什么想法计算这两个箭头的起点的偏移量(x,y)坐标吗?
答案 0 :(得分:2)
假设您具有如下定义的x值和y值(x_length在这里可能会误导):
import numpy as np
import matplotlib.pyplot as plt
x_start = 0.2
x_delta = 0.7
y_start = 0.2
y_delta = 0.4
基于x_delta
和y_delta
,您可以计算归一化的(长度= 1)正交矢量(与您的箭头正交):
orth_vector = np.array([y_delta, -x_delta])
orth_normalized = orth_vector/np.linalg.norm(orth_vector)
借助正交向量,您可以沿任意方向移动箭头,使其与原始箭头保持平行。例如,在下面的示例中使用offset=0.1
,箭头将移动,因此箭头的距离为0.1
offset = 0.1
x_start_shift = x_start + offset * orth_normalized[0]
y_start_shift = y_start + offset * orth_normalized[1]
绘制所有内容时,将显示已移动的箭头以及原始箭头(注意:您可以保留增量,只需要移动起点)即可:
plt.scatter(x_start, y_start)
plt.scatter(x_start + x_delta, y_start + y_delta)
plt.arrow(x_start,y_start,x_delta,y_delta)
plt.arrow(x_start_shift,y_start_shift,x_delta,y_delta)
plt.ylim(0,1)
plt.xlim(0,1)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()