如何在matplotlib的注释功能中设置箭头和文本之间的距离(填充)?有时文本最终离箭头太近了,我想把它们稍微移开一点。
基本示例:
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()
答案 0 :(得分:2)
您可以在arrowprops
词典中使用shrink
关键字参数,但不幸的是FancyArrowPatch
对象不支持它,因此您必须删除arrowstyle='->'
。
shrink
给出的值是提示/基座将远离xy
和xytext
坐标的百分比。
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()
答案 1 :(得分:1)
对于花式箭头,您可以使用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"
是强制性的),或者箭头将始终粘在框架的边框上,它可能很难看。
HTH
答案 2 :(得分:0)
要完全控制距离,您必须结合 jrjc 和 Ffisegydd 答案。
Bbox 的 pad
属性定义了文本与其包含框之间的距离。箭头的 shrink
属性是箭头末端与框之间的距离,而不是文本本身。
此外,要将 shrink
与 FancyArrowPatch
一起使用,您必须单独定义它: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),
)
示例: