Matplotlib中suptitle设置不同字体大小的实现方法
解决Matplotlib多标题不同字号的问题
嘿,这个需求太常见了!不用启用LaTeX也能完美实现,给你分享两种简单直接的方法,完全不会改动全局字体样式,还能轻松插入变量:
方法一:用fig.text()手动添加第二个标题
这是最灵活的方式,你可以分别控制两个标题的字体大小、位置和样式,完全独立设置。
示例代码
import matplotlib.pyplot as plt # 创建子图布局 fig, axes = plt.subplots(1, 3, figsize=(10, 4)) # 给每个子图设置标题 sub_titles = ["D2/E", "D3/E", "D4/E"] for ax, title in zip(axes, sub_titles): ax.set_title(title) # 替换成你自己的绘图逻辑就行 ax.plot([1, 2, 3], [4, 5, 6]) # 添加第一个全局标题(大字号) fig.suptitle("标题1", fontsize=16, y=1.05) # 定义你要插入的变量 my_variable = "实验数据V1.0" # 添加第二个全局标题(小字号),水平居中,位置在第一个标题下方 fig.text( x=0.5, y=1.01, s=f"标题2(包含变量:{my_variable})", fontsize=12, ha="center" # 水平居中对齐 ) # 自动调整布局,避免标题被裁剪 plt.tight_layout() plt.show()
关键说明
fig.text()的x和y参数是相对整个画布的坐标(范围0-1,左下角为(0,0)),调整y值可以控制两个标题的间距ha="center"确保第二个标题和第一个标题水平对齐- 变量插入用Python常规的f-string或者
format()方法就行,完全不受LaTeX限制 - 字体大小直接通过
fontsize参数设置,想设多大就多大
方法二:复用主标题位置的进阶技巧
如果你不想手动调坐标,也可以先获取suptitle的返回对象,复用它的水平位置来添加第二个标题,确保对齐更精准:
import matplotlib.pyplot as plt fig, axes = plt.subplots(1, 3, figsize=(10, 4)) for ax, title in zip(axes, ["D2/E", "D3/E", "D4/E"]): ax.set_title(title) ax.plot([1,2,3], [4,5,6]) # 添加主标题并获取其对象 main_title = fig.suptitle("标题1", fontsize=16, y=1.05) # 复用主标题的x坐标,在其下方添加第二个标题 fig.text( main_title.get_position()[0], 1.01, "标题2(变量:{})".format("测试值"), fontsize=12, ha="center" ) plt.tight_layout() plt.show()
两种方法都不需要启用LaTeX,完全保留你原来的字体样式,变量插入也和平时写Python字符串一样简单,试试就知道有多好用啦!
内容的提问来源于stack exchange,提问作者Yohann L.
相关产品推荐
相关产品推荐

