【问题标题】:How to draw 2 sides separate arrows by plt.arrow?如何通过 plt.arrow 绘制两侧分开的箭头?
【发布时间】:2019-09-09 15:22:38
【问题描述】:

我正在尝试使用这样的 plt 从 2 个点绘制 2 个对边箭头

现在我可以像这样画出 2 个对边的箭头,但一个在另一个之上

我知道要绘制的代码是

plt.arrow(x_start, y_start, x_length, y_length)

但不知道如何画出这样的 2 个单独的箭头。有什么想法可以计算这两个箭头的起点的偏移量 (x, y) 坐标吗?

【问题讨论】:

  • 你问如何计算偏移量?
  • 是的,我想我会编辑它澄清一下

标签: python python-3.x matplotlib


【解决方案1】:

假设您的 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_deltay_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()

【讨论】:

  • 太棒了。我做的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多