我想在maptplotlib中创建一个绘图,其中箭头指向一条线的起点并指向一条直线的终点,以显示一条线的起点和终点(见图)。右侧的上箭头(YYArrow)看起来正确,但应指向远离端点的位置。箭头应在图空间中绘制,而不是在数据空间中绘制。
from matplotlib import pyplot as plt
def testplot():
plt.plot([0, 1], [0, 1], 'r')
plt.plot([0, 1], [0.9, 0.2], 'b-')
plt.gcf().set_facecolor('w')
plt.annotate("",
xy=(0, 0.9), xycoords='data',
xytext=(-25, 7), textcoords='offset points',
size=20, va="center", ha="center",
arrowprops=dict(ec='None',fc='k',
width=1, frac=0.5, headwidth=5,
),
)
plt.annotate("",
xy=(1, 0.2), xycoords='data',
xytext=(25, -7), textcoords='offset points',
size=20, va="center", ha="center",
arrowprops=dict(ec='None',fc='k',
width=1, frac=0.5, headwidth=5,
),
)
plt.annotate("",
xy=(1, 0.1), xycoords='data',
xytext=(25, -7), textcoords='offset points',
size=20, va="center", ha="center",
arrowprops=dict(arrowstyle="<|-,head_length=0.5,head_width=0.1",
connectionstyle="arc3,rad=-0.0",
fc='k'
),
)
plt.show()
if __name__ == '__main__':
testplot()
问题:我想指定一个数据点和一个屏幕/图形偏移,这样箭头看起来总是一样的,不管图形是如何缩放的。因此,有必要使用textcoords='offset points'
。但是,更好的工作YYArrow
无法逆转(至少我不知道如何)。
arrowstyle="<|-"
正在工作(反转箭头),但是它是较差的(圆角而不是斜角,在交互模式下对于> 50箭头慢得多),可能是因为它必须绘制面和边缘。
所以我正在寻找一种方法来“翻转”YYArrow
或者能够计算(转换?)数据点xy=...
,箭头指向该数据点给出偏移量(以像素为单位),但是我不知道怎么做。