You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Matplotlib子图设置全局副标题并调整其字体大小?

解决Matplotlib子图全局主副标题不同字号的问题

刚好我之前也碰到过这个需求——用suptitle换行的方式加主副标题,没法分别控制两者的字体大小对吧?这里有两个实用的方法可以搞定:

方法一:手动添加两个独立文本元素(最直观推荐)

直接用fig.text()在图的顶部区域分别添加主标题和副标题,这样就能单独设置各自的字号、样式了:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(2,2)

# 添加主标题:字号更大、加粗,水平居中
fig.text(0.5, 0.98, 'Global Title', ha='center', fontsize=16, fontweight='bold')
# 添加副标题:字号稍小,位置比主标题低一点,同样水平居中
fig.text(0.5, 0.93, 'Global Subtitle.', ha='center', fontsize=12)

# 调整布局,给顶部的标题留出足够空间,避免子图挡住标题
plt.tight_layout(rect=[0, 0, 1, 0.9])
plt.show()

关键细节说明:

  • fig.text()的前两个参数是归一化坐标(0代表左/底部,1代表右/顶部),0.5的x坐标刚好让文本水平居中
  • ha='center'确保文本在指定x坐标处居中对齐
  • tight_layout的rect参数用来缩小子图区域的顶部边界(最后一个值0.9代表子图只用到从底部到90%高度的区域),给标题预留空间

方法二:使用suptitle配合自定义文本对象进阶操作

如果你偏想用suptitle的形式,也可以通过获取返回的文本对象,手动修改其中的部分内容样式,但这种方法相对复杂,适合有特殊定制需求的场景:

import matplotlib.pyplot as plt
from matplotlib.text import Text

fig, axes = plt.subplots(2,2)

# 添加带换行的全局标题,获取文本对象
title_obj = fig.suptitle('Global Title\nGlobal Subtitle.', ha='center')

# 拆分文本为两行,分别设置字号
title_obj._text = 'Global Title'
subtitle_obj = Text(title_obj.get_x(), title_obj.get_y() - 0.04, 'Global Subtitle.', 
                   ha='center', fontsize=12, fontproperties=title_obj.get_fontproperties())
fig.texts.append(subtitle_obj)
title_obj.set_fontsize(16)

plt.tight_layout(rect=[0, 0, 1, 0.9])
plt.show()

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 01:02:35