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




