如何为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
相关产品推荐
相关产品推荐

