我有点迷路了,需要帮助。
我试图通过文本添加一个文本到轴。我知道你可以用ax.text,ax.annotate,但我需要使用文本。不要问我为什么:)下面是我的简单代码。
import matplotlib.pyplot as plt
from matplotlib.text import Text
txt1 = Text(text='Dude', x=0.5, y=0.5)
fig, ax = plt.subplots()
ax.add_artist(txt1)
在Matplotlib文档中,它指出对于没有add_方法的艺术家,可以使用add_artist。所以我就这么做了。但是,当您添加文本时,它是否应该在ax.texts容器中可用?
我跑的时候,
ax.texts
它返回一个空列表。但是,当您使用ax.annotate或ax.text时,ax.texts容器没有问题。
有人能解释一下为什么吗?我怎么才能用Text艺术家来纠正它呢?
发布于 2018-01-22 18:12:22
matplotlib内部向轴添加Text
的方式(如果调用ax.text
)是通过调用
ax._add_text(..)
因此,您可以将代码中的行ax.add_artist(txt1)
替换为
ax._add_text(txt1)
这样做,Text
实例将在ax.texts
列表中可用。
import matplotlib.pyplot as plt
from matplotlib.text import Text
txt1 = Text(text='Dude', x=0.5, y=0.5)
fig, ax = plt.subplots()
ax._add_text(txt1)
print(ax.texts)
plt.show()
这个列表中的原因是_add_text
方法直接调用了self.texts.append(txt)
。所以你甚至可以复制_add_text
import matplotlib.pyplot as plt
from matplotlib.text import Text
txt1 = Text(text='Dude', x=0.5, y=0.5)
fig, ax = plt.subplots()
ax._set_artist_props(txt1)
ax.texts.append(txt1)
txt1._remove_method = lambda h: ax.texts.remove(h)
ax.stale = True
print(ax.texts)
plt.show()
https://stackoverflow.com/questions/48387480
复制相似问题