Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib-在注释函数中设置箭头和文本之间的填充_Python_Matplotlib_Scipy - Fatal编程技术网

Python 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

如何在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()

您可以在
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),
    )