【问题标题】:Python annotation arrows with same headlength具有相同头长的 Python 注释箭头
【发布时间】:2014-12-05 17:22:46
【问题描述】:

我正在使用 matplotlib 创建带箭头的注释。

from matplotlib import pyplot as plt
plt.figure()
plt.annotate('Text1', xy=(1, 0), xytext=(1, 1), arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10))
plt.annotate('Text2', xy=(3, 0), xytext=(3, 3), arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10))
plt.annotate('Text3', xy=(6, 0), xytext=(6, 6), arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10))
plt.annotate('Text4', xy=(9, 0), xytext=(9, 9), arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10))
plt.xlim((0, 10))
plt.ylim(0, 10)
plt.show()

可以看出,箭头的长度受线长的影响,并且在箭头之间变化。

我正在寻找一种方法来创建线长不同但箭头头长相等的箭头。 尽管注释手册页上列出了许多选项,但我无法产生所需的结果。

作为一种替代方法,我尝试使用 plt.arrow 单独绘制箭头。在这种情况下,箭头看起来像期望的那样,但是当使用透明度时,额外的线条变得可见。

最好的问候,zinjaai

【问题讨论】:

    标签: python matplotlib annotations


    【解决方案1】:

    arrowprops 中,您不能指定头部的长度,但frac 的争论将头部的长度指定为箭头长度的一部分。由于您知道xyxytext,因此您可以计算出所需头部长度的必要分数。

    对于您提供的示例(头部长度为0.5),我没有很快理解。

    from matplotlib import pyplot as plt
    plt.figure()
    plt.annotate('Text1', xy=(1, 0), xytext=(1, 1), 
            arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10, frac=0.5/1))
    plt.annotate('Text2', xy=(3, 0), xytext=(3, 3), 
            arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10, frac=0.5/3))
    plt.annotate('Text3', xy=(6, 0), xytext=(6, 6), 
            arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10, frac=0.5/6))
    plt.annotate('Text4', xy=(9, 0), xytext=(9, 9), 
            arrowprops=dict(alpha=0.5, fc='r', ec='r', headwidth=10, frac=0.5/9))
    plt.xlim((0, 10))
    plt.ylim(0, 10)
    plt.show()
    

    结果:

    您可以将其包装在一个函数中,该函数计算箭头的长度(给定 xyxytext),然后将其传递给 plt.annotate

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多