Python Matplotlib-在注释函数中设置箭头和文本之间的填充
如何在matplotlib的注释函数中设置箭头和文本之间的距离(填充)?有时候,文本会离箭头太近,我想把它们分开一点 基本示例:Python Matplotlib-在注释函数中设置箭头和文本之间的填充,python,matplotlib,scipy,Python,Matplotlib,Scipy,如何在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.sho
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()
您可以在arrowprops
字典中使用关键字参数,但不幸的是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()
对于花式箭头,您可以使用
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要完全控制距离,您必须组合和回答 Bbox的
pad
属性定义文本与其包含框之间的距离。箭头的收缩
属性是箭头末端与框之间的距离,而不是文本本身
此外,要将shrink
与FancyArrowPatch
一起使用,您必须单独定义它:shrinkA
用于原点(靠近文本的箭头末端),而shrinkB
用于目标。
从a:
因此,完整的答案是:
plt.annotate('Example text',
xy=(-1,-1), xytext=(0,0),
arrowprops=dict(arrowstyle='->', shrinkA=0.15),
bbox=dict(pad=0),
)
示例:
谢谢,这就是我要找的!但是没有为花式箭工作?我更喜欢'->'式的箭。我不这么认为。您得到了一个
属性错误:“FancyArrowPatch”对象没有属性“set\u shrink”
。@DanHickstein看到了我的答案,可以解决这个奇特的箭头问题。这似乎很有效!(不知道你为什么被否决…)。对于那些不想实际看到边界框的人,可以在bbox dict中传递facecolor='none',edgecolor='none'
。我将其更改为可接受的答案,因为它与我最初发布的示例代码一起工作,其中使用了FancyArrow。@DanHickstein对于'none'
,fc=None
无效。我将据此进行编辑。
plt.annotate('Example text',
xy=(-1,-1), xytext=(0,0),
arrowprops=dict(arrowstyle='->', shrinkA=0.15),
bbox=dict(pad=0),
)