有没有一种在matplotlib中绘制标题框的方法?

31

在Matplotlib中是否有一个函数可以绘制图形下方的标题框?我已经在Google上搜索过,但没有找到这样的功能。

Captionbox example

希望能够像图片中显示的那样实现。

2个回答

37

可以使用 pyplot.text。以下是一些示例代码:

from matplotlib import pyplot as plt
import numpy as np

x = np.arange(0,3,.25)
y = np.sin(x)
txt = '''
    Lorem ipsum dolor sit amet, consectetur adipisicing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
    reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
    pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
    culpa qui officia deserunt mollit anim id est laborum.'''

fig = plt.figure()
ax1 = fig.add_axes((.1,.4,.8,.5))
ax1.bar(x,y,.2)
fig.text(.1,.1,txt)
plt.show()

它会生成这个: enter image description here

如果你想要自动的换行,可以看看这篇文章

我不确定我能帮你完全调整对齐。


1
如果您还想使标题的一部分加粗(我希望“图4”以粗体字显示),那么事情就会变得有些棘手。我遵循了这里的建议https://dev59.com/y2sy5IYBdhLWcg3wsQJj,但最终在Ubuntu上需要安装1GB,并且我需要相应地调整所有文本框。相反,我创建了两个图形文本对象,并且花费了很多时间来调整它们的位置,以便将它们放置在我想要的位置。除非您能想出更聪明的方法,否则我建议不要使用粗体。 - joelostblom
2
通常情况下,人们希望在图形坐标系(figtext)中添加标题,而不是在绘图坐标系(text)中添加。 - tom10
4
这对于子图无效,我该怎么做? - Max
@tom10 help(fig.text) 表明此函数将文本放置在图形的“相对0-1坐标”中。我认为您将fig.textax.text混淆了。 - Paul
@Max,“这不起作用”并不是很具体。你遇到了什么错误/行为?这应该在图中的任何一个轴(如果有的话)上放置文本在(.1,.1)。如果您遇到此问题,它不会自动将它们放置在轴下面。您必须使用text() xy参数手动调整文本位置。 - Paul
2
在Matplotlib版本1.5.3中,您可以使用wrap='True'标志来获取文本换行。 - Kaushik Ghose

1

您可以使用legend函数(pylab.legend)。如果您想要它在轴外,您可以传递给它一个特定的位置(loc关键字参数)。

编辑: legend函数接受一个title参数,这可能有助于获得您想要的内容。但是,对于没有任何图例的标题,Paul的答案更合适。


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