如何清除先前绘制的Matplotlib文本框?

22

我可以在matplotlib中创建文本框。但是我不知道如何从渲染的图形中删除它们?似乎在绘制文本框后没有figure.text.clear()figure.text(visible=False)?这该怎么做呢?与图例不同,您似乎无法使它们可拖动?


2
figure.text.remove()? - 101
4个回答

34

文本框就像画家一样,只要你保留对它们的引用,就可以做很多事情。因此,在任何绘图代码中,不要使用

fig.text(0, 0, 'My text')

你可以做

textvar = fig.text(0, 0, 'My text')

如果你丢失了引用,所有的文本对象都可以在texts属性中找到:

fig.texts # is a list of Text objects

在1.3.1版本中,执行textvar.remove()会生成NotImplementedError(显然在1.4中已经修复)。然而,您可以通过将可见性设置为False来在某种程度上避免这种情况。

for txt in fig.texts:
    txt.set_visible(False)

这将使所有的文本框消失。


运行得非常好 - 谢谢 - Tim Carnahan
@tcaswell 我没有想到去检查最新版本,那个版本是1.3.1。太棒了,在1.4中得到了修复! - Ajean
我已经尝试了上述的text.set_visible(False)方法,但每次更新文本值时,文本都会被覆盖。 - vijay
如果你要更新图形的文本,你可能需要考虑将文本设置为空字符串:“” 例如fig.set_texts("")。它会删除当前的文本,但不会删除变量。在进行动画时非常有用。 - Jorge

4
  1. 使用fig.textsax.texts打印在该fig/axes中存在的所有标题列表。
  2. 使用Python的del关键字删除特定的text

考虑以下示例:

print(fig.texts)

输出:

[Text(-0.3, 5, 'Features data distribution'),
 Text(-0.3, 4.5, 'Secondary title')]

假设您需要删除“次级标题”

del fig.texts[1]
print(fig.texts)

输出:

[Text(-0.3, 5, 'Features data distribution')]

在该图中标题将被删除。


3

我尝试使用 Artist.remove() 去除了 text(),效果很好。 我们也可以使用 Artist.set_visible() 来显示/隐藏图形元素。

import matplotlib.pyplot as plt
from matplotlib.artist import Artist

fig, ax = plt.subplots()

frame = plt.text(0.6, 0.7, "hello world!", size=50,
                 ha="center", va="center",
                 )

# To hide the artist
Artist.set_visible(frame, False)
# To show the artist
Artist.set_visible(frame, True)
# To remove the artist
Artist.remove(frame)
plt.show()


1

对于那些想知道如何使用matplotlib.figure.Figure完成此操作的人:

# gca = get current axis
del fig.gca().texts[0]
# Redraw
fig.canvas.draw_idle()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接