Python 如何在matplotlib中标记修补程序

Python 如何在matplotlib中标记修补程序,python,matplotlib,plot,label,patch,Python,Matplotlib,Plot,Label,Patch,我正在以交互模式在matplotlib中绘制矩形面片。我想为每个补丁添加文本。我不想注释它们,因为这样会降低速度。我正在使用补丁的“标签”属性,但它不起作用。Ayone知道如何向修补程序添加1个字符串 import matplotlib.pyplot as plt import matplotlib.patches as patches plt.ion() plt.show() x = y = 0.1 fig1 = plt.figure() ax1 = fig1.add_subplot(11

我正在以交互模式在matplotlib中绘制矩形面片。我想为每个补丁添加文本。我不想注释它们,因为这样会降低速度。我正在使用补丁的“标签”属性,但它不起作用。Ayone知道如何向修补程序添加1个字符串

import matplotlib.pyplot as plt
import matplotlib.patches as patches

plt.ion()
plt.show()

x = y = 0.1
fig1 = plt.figure()
ax1 = fig1.add_subplot(111, aspect='equal')
patch = ax1.add_patch(patches.Rectangle((x, y), 0.5, 0.5,
    alpha=0.1,facecolor='red',label='Label'))

plt.pause(0)
plt.close()

您已经知道面片的位置,因此可以计算中心的位置并在那里添加一些文本:

import matplotlib.pyplot as plt
import matplotlib.patches as patches

x=y=0.1
fig1 = plt.figure()
ax1 = fig1.add_subplot(111, aspect='equal')
patch= ax1.add_patch(patches.Rectangle((x, y), 0.5, 0.5,
    alpha=0.1,facecolor='red',label='Label'))

centerx = centery = x + 0.5/2 # obviously use a different formula for different shapes

plt.text(centerx, centery,'lalala')
plt.show()


plt.text
的坐标确定了文本的起始位置,因此您可以在x方向稍微移动它,使文本更加居中,例如
centerx-0.05
。显然,@JoeKington的建议是实现这一点的正确方法

如果您希望显示标签,则需要调用
plt.legend()
。您可能希望它向您展示如何在补丁中的各个点添加文本。如果确实要在图例中显示所有现有标签,请参见
plt.legend()
Patches是任意艺术家对象,因此
plt.legend()
不是您想要的。如果要在对象上显示可见文本,请使用
plt.text()
plt.annotate()
。在matplotlib中,
label
不是一个可见的文本标签,它是一个内部“句柄”,用于使用
plt.findobj()
查找子类Artister的对象,但这似乎不适用于修补程序。
annotate
为这类事情提供了一个更强大的API。您通常需要指定
horizontalalignment=“center”
(或者更紧凑地说,
ha=“center”
)将文本居中,而不是轻推坐标。我显然应该知道…相应地确认!@areuexperience,谢谢你的回答。我正在打印来自传感器的数据,因此打印处于无限循环中。如果我添加文本/注释对象,它会降低速度。我想使用补丁的标签属性,就像本文中解释的那样链接,但我无法理解。@Luqman,在您发布的示例中,
label
只是一个调用
plt.text
的函数,因此它与我所展示的相同。传递到正在制作的补丁的
label
参数不同,这与
plt.legend
有关。