You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python Matplotlib绘图中如何添加两行不同字号的标题?

在Matplotlib中添加两行不同字号的标题

你遇到的问题很常见——连续调用plt.title()确实会覆盖之前的标题,因为这个函数每次都会替换当前坐标轴的标题对象(另外你第二次调用时拼写错了,是plt.title不是plt.tilte,不过即使拼写正确也会被覆盖)。下面给你几个简单实用的解决方案:

方法1:使用suptitle + title组合(最省心)

Matplotlib提供了plt.suptitle()来设置图表的超级标题,它会自动和坐标轴的plt.title()错开位置,不用手动调整坐标:

import matplotlib.pyplot as plt

# 先绘制示例图表
plt.plot([1, 2, 3, 4])

# 设置主标题(字号20)
plt.suptitle('My title', fontsize=20)
# 设置副标题(字号15),会自动出现在主标题下方
plt.title('My subtitle', fontsize=15)

plt.show()

这个方法的好处是Matplotlib会帮你处理排版,不用担心标题重叠或者位置偏移。

方法2:手动用plt.text()定位两行文本

如果你需要更精细的位置控制,可以直接在图表顶部中央添加两个文本元素,使用坐标轴的相对坐标系统:

import matplotlib.pyplot as plt

plt.plot([1, 2, 3, 4])
ax = plt.gca()  # 获取当前坐标轴对象

# 主标题:y坐标稍高于坐标轴顶部(1.02),水平居中
plt.text(0.5, 1.02, 'My title', fontsize=20, ha='center', transform=ax.transAxes)
# 副标题:y坐标略低于主标题,同样水平居中
plt.text(0.5, 0.98, 'My subtitle', fontsize=15, ha='center', transform=ax.transAxes)

plt.show()

这里的transform=ax.transAxes表示使用坐标轴的相对坐标(0到1的范围),不管图表怎么缩放,文本都会保持在顶部中央。你可以调整y参数的值来控制两行标题的间距。

方法3:用LaTeX渲染多行不同字号标题(需LaTeX环境)

如果你的系统安装了LaTeX,可以开启Matplotlib的LaTeX支持,通过LaTeX命令来设置不同字号:

import matplotlib.pyplot as plt

# 开启LaTeX渲染
plt.rcParams['text.usetex'] = True

plt.plot([1, 2, 3, 4])
# 用LaTeX命令分别设置两行的字号
plt.title(r'\fontsize{20}{24}\selectfont My title' + '\n' + r'\fontsize{15}{18}\selectfont My subtitle', ha='center')

plt.show()

这种方法适合需要复杂格式的场景,但依赖LaTeX环境,不如前两种通用。

内容的提问来源于stack exchange,提问作者Elodin

火山引擎 最新活动