翻转箭头matplotlib

时间:2014-05-19 14:02:40

标签: python matplotlib

我想在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=...,箭头指向该数据点给出偏移量(以像素为单位),但是我不知道怎么做。

Sample for YYArrows

0 个答案:

没有答案