如何绘制带箭头的竖直线?

5
我希望在一个图形中加入一个 axvline,该线以特定的数据坐标结束,并带有箭头(可以选择以指向上方的箭头结束或以指向下方的箭头结束,或两者都有)。
例如:
fig, ax = plt.subplots()
ax.plot([1,2,3])
ax.axvline(1.5, arrow_head=[True,False])

要画一个带箭头的垂直线,箭头在底部,但顶部没有箭头(即朝下的箭头),我可以使用ax.arrow()和混合变换(x轴使用数据坐标,y轴使用轴坐标)来实现,但无法直接在axvline中完成。

import matplotlib.pyplot as plt
import matplotlib.transforms as transforms

fig, ax = plt.subplots()
ax.plot([1,2,3],[1,4,9])

mytrans = transforms.blended_transform_factory(ax.transData, ax.transAxes)
ax.arrow(2.5,0,0,1,transform=mytrans,head_width=0.1,length_includes_head=True)

axvline-as-arrow的输出图像

我的问题:
1)有没有更简单/更清晰的方法来做到这一点?
2)你会如何用这种方式制作双头箭头?

1个回答

0

我刚刚遇到了同样的问题,认为使用ax.axvline()ax.arrow()仍然没有直接的方法来解决这个问题。 作为一种解决方法,可以实现双向箭头(以及更多功能)的是:

import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch

fig, ax = plt.subplots()
ax.plot([1, 2, 3], [1, 4, 9])

x = 2.5
y1, y2 = ax.get_ybound()
myArrow = FancyArrowPatch(posA=(x, y1), posB=(x, y2), arrowstyle='<|-|>', color='0.5',
                          mutation_scale=20, shrinkA=0, shrinkB=0)
ax.add_artist(myArrow)
plt.show()

执行后将获得以下输出:
箭头示例


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接