python 在注解功能中设置箭头和文本之间的填充

6l7fqoea  于 2023-05-16  发布在  Python
关注(0)|答案(3)|浏览(257)

如何在matplotlib的annotate函数中设置箭头和文本之间的距离(padding)?有时候文本最后离箭头太近了,我想把它们移得远一点。
基本示例:

import matplotlib.pyplot as plt

plt.annotate('Here it is!',xy=(-1,-1),xytext=(0,0),
             arrowprops=dict(arrowstyle='->',lw=1.5))

plt.xlim(-10,10)
plt.ylim(-10,10)

plt.show()

2ledvvac

2ledvvac1#

对于花哨的箭头,你可以使用bbox属性:

fig, ax = plt.subplots(1, 3, figsize=(7, 3))
pad_val = [-5, 0, 5]
for a,p in zip(ax, pad_val):
    a.annotate('Here it is!\npad={}'.format(p),xy=(-1,-1),xytext=(1,1),
                arrowprops=dict(arrowstyle='-|>', fc="k", ec="k", lw=1.5),
                bbox=dict(pad=p, facecolor="none", edgecolor="none"))
    a.set_xlim(-10,10)
    a.set_ylim(-10,10)

这里的缺点是你不能在注解后面添加颜色(facecolor="none"是强制性的),否则箭头将总是粘在框架的边界上,它可能会很难看。
高温加热

qnakjoqk

qnakjoqk2#

您可以在arrowprops字典中使用shrink关键字参数,但不幸的是FancyArrowPatch对象不支持它,因此您必须删除arrowstyle='->'
shrink给出的值是尖端/底部将远离xyxytext坐标的百分比。

import matplotlib.pyplot as plt

plt.annotate('Here it is!',xy=(-1,-1),xytext=(0,0),
             arrowprops=dict(lw=1.5, shrink=0.15))

plt.xlim(-10,10)
plt.ylim(-10,10)

plt.show()
zvokhttg

zvokhttg3#

要完全控制距离,必须合并jrjcFfisegydd答案。
Bbox的pad属性定义了文本与其包含框之间的距离。箭头的shrink属性是箭头末端与框之间的距离,而不是文本本身。
此外,要将shrinkFancyArrowPatch一起使用,必须单独定义它:shrinkA表示起点(箭头的末端靠近文本),shrinkB表示终点。从demo in Matplotlib's website

ax.annotate("",
             xy=(x1, y1), xycoords='data',
             xytext=(x2, y2), textcoords='data',
             arrowprops=dict(arrowstyle="->", color="0.5",
                             shrinkA=5, shrinkB=5,
                             patchA=None, patchB=None,
                             connectionstyle=connectionstyle,
                             ),
             )

所以完整的答案是两者皆有:

plt.annotate('Example text',
             xy=(-1,-1), xytext=(0,0),
             arrowprops=dict(arrowstyle='->', shrinkA=0.15),
             bbox=dict(pad=0),
    )

示例:

相关问题