如何解决seaborn绘图中suptitle与子图标题无法居中对齐的问题
问题原因
plt.suptitle 对齐的参考系是整个画布(Figure),而 plt.title(本质是当前子图的set_title方法)对齐的参考系是绘图子图(Axes)。如果子图因为刻度、轴标签等布局调整没有处于画布水平居中位置,两个标题的居中基准就会不一致,自然无法对齐。
解决方案
推荐将主副标题都绑定到子图的坐标系下,统一以子图为基准居中,代码修改如下:
import seaborn as sns from matplotlib import pyplot as plt sns.set_theme(style="darkgrid") # 注意dpi配置要放在创建画布前才会生效 plt.rcParams['figure.dpi'] = 900 X = [1,2,3] y = [.5,.1,.9] fig, ax = plt.subplots(figsize=(8, 5)) sns.scatterplot(x=X, y=y, color='#152238', alpha=0.9, legend = False) # 主副标题都以子图坐标系为基准,x=0.5即代表水平居中 ax.text(x=0.5, y=1.1, s='这是我的主标题', fontsize=18, ha='center', transform=ax.transAxes) ax.text(x=0.5, y=1.02, s='这是副标题', fontsize=14, ha='center', transform=ax.transAxes) # 调整顶部边距避免标题被截断 plt.subplots_adjust(top=0.85) plt.show()
如果你需要保留suptitle的用法,可以手动计算子图的水平中心坐标赋值给suptitle的x参数,实现二者对齐:
# 计算子图水平中心位置 ax_center_x = ax.get_position().x0 + ax.get_position().width / 2 plt.suptitle('这是我的主标题', fontsize = 18, x=ax_center_x) plt.title('这是副标题', fontsize = 14)
内容的提问来源于stack exchange,提问作者Non-Contradiction
相关产品推荐
相关产品推荐

