首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从matplotlib获取文本句柄?

从matplotlib获取文本句柄?
EN

Stack Overflow用户
提问于 2022-10-03 20:59:31
回答 1查看 63关注 0票数 0

我试图从matplotlib中的对象获取文本句柄。以下是一个有点摇摇欲坠的问题:“有人知道如何在图中找到文本,以便可以更改文本的属性吗?”这个问题的起因是,这个图显示得很好,但是它需要对savefig命令进行一些调整,因为文本与形状的颜色相同。深入到库中,文本将按预期创建,文本如下:

代码语言:javascript
运行
复制
cax.text(x, y, metadata['name'], color=color, size=fs, horizontalalignment='center', verticalalignment='center')

我在“Z”中有一些形状的物体,我用这样的方式绘制它们:

代码语言:javascript
运行
复制
fig = plt.figure(1, figsize=(10,10), dpi=90)
cax = fig.add_subplot(111)
Z.plot(cax)
plt.axis('equal')
plt.draw()

结果是这张照片,我想得到“爱达荷州”的文字。

我选择“爱达荷州”是因为它认为它很容易找到,但我一直无法在物体中找到它。

问题是:有人知道如何在图中找到文本,这样就可以更改文本的属性了吗?

我似乎无法从文档中看出这一点。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-03 21:08:49

matplotlib中的所有Artist对象都应该有一个findobj方法来递归地搜索其子对象,以寻找满足某种条件的其他Artists

在本例中,您希望找到所有具有文本"idaho""idaho"对象。所以一个例子会是这样..。

代码语言:javascript
运行
复制
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.text(.5, .5, s='idaho')

from matplotlib.text import Text
matches = ax.findobj(
    lambda artist: isinstance(artist, Text) and artist.get_text() == 'idaho'
)

print(matches) # Note that `ax.findobj` always returns a list
[Text(0.5, 0.5, 'idaho')]

应用于您的代码时,您应该能够:

代码语言:javascript
运行
复制
from matplotlib.text import Text

matches = cax.findobj(
    lambda artist: isinstance(artist, Text) and artist.get_text() == 'idaho'
)
text_handle = matches[0]

作为一个完整的例子:

代码语言:javascript
运行
复制
>>> fig, ax = plt.subplots()
>>> ax.text(.5, .5, s='idaho')
Text(0.5, 0.5, 'idaho')
>>> from matplotlib.text import Text
>>> text_handle = ax.findobj(lambda artist: isinstance(artist, Text) and artist.get_text() == 'idaho')[0]
>>> text_handle.set_text('IDAHO!!')
>>> plt.show()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73940771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档