在matplotlib中将图形标题分成多行

65 投票
5 回答
131797 浏览
提问于 2025-04-17 08:49

我用matplotlib创建了一个包含4个子图的图形。

我想把其中一个子图的标题分成两行,这样每一行都能在子图中居中显示。

我试过这样做:

import matplotlib.pylab as plt

fig = plt.figure(num=0,figsize=(8.27, 11.69), dpi=300)
ax  = fig.add_subplot(2, 2, 1)
ax.set_title(r'Normalized occupied \\ Neighbors')

但是我发现Neighbors这个词偏向左边了。

我该怎么调整才能让它居中呢?

5 个回答

25

一个更好的解决方案是使用r前缀,这样可以兼容,特别是当你需要使用LaTeX标记的时候。你可以把标题文本分成两部分(或者更多部分),比如:

import matplotlib.pylab as plt

fig = plt.figure()
plt.title('My Title\n' + r'$\alpha - \omega$ are LaTeX Markup')
plt.plot([1,2,3,4])
plt.show()
26

在Matplotlib 3.1.1版本中,plt.title()ax.set_title()这两个函数都可以通过一些额外的参数来设置文本的属性。你可以传入一个叫wrap=True的参数,这样就可以让标题文本自动换行了。

plt.title('My long title that I want to wrap and stay center-aligned', wrap=True)

或者你也可以用另一种方式来实现。

fig, [ax1, ax2] = plt.subplots(2, 1)
ax1.set_title('My long title that I want to wrap and stay center-aligned', wrap=True)
118

我用这种方式格式化字符串时,得到了正确的对齐效果:

import matplotlib.pylab as plt

fig = plt.figure()#num=0,figsize=(8.27, 11.69), dpi=300)
ax  = fig.add_subplot(2, 2, 1)
ax.set_title('Normalized occupied \n Neighbors')

plt.show()

在这里输入图片描述

撰写回答