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

Seaborn子图图例布局与标题字号调整问题求助

Seaborn并排子图:图例布局与字体大小调整解决方案

嘿,我来帮你搞定这两个并排子图的问题!咱们一个个捋清楚:

一、图例位置异常的修复

你当前用plt.legend()设置图例,但在子图布局下,全局的plt.legend()容易和子图的轴对象冲突,导致图例位置混乱。正确的做法是针对每个子图的轴对象单独配置图例:

  • 调用sns.boxplot()时会返回对应的轴对象(ax),直接用这个对象调用legend()方法
  • 通过bbox_to_anchor参数把图例放到子图右侧的外部区域,同时调整plt.subplots_adjust的right参数,给图例留出足够显示空间

二、标题与坐标轴字体大小的调整

之前字体设置无效,是因为你没直接绑定子图的轴对象进行配置。可以通过两种方式实现:

  1. 给set_title()、tick_params()方法传入字体大小参数,精准控制标题和刻度字体
  2. 使用fontdict字典一次性设置标题的字体样式(比如大小、粗细)

如果想统一所有子图的字体风格,也可以先通过plt.rcParams做全局设置。

三、关于子图创建方式的疑问

你用plt.subplots(1, 2)创建并排子图的方式完全正确!问题不是出在子图创建上,而是后续的图例和字体设置用了全局的plt方法,没有绑定到对应的子图轴对象,才导致效果不符合预期。

修改后的完整代码

import matplotlib.pyplot as plt
import seaborn as sns

# 可选:全局统一字体大小,让所有元素风格一致
plt.rcParams['font.size'] = 12

# 创建1行2列的子图,提前设置画布大小让布局更合理
f, axes = plt.subplots(1, 2, figsize=(12, 6))

# 第一个子图:性别内自我认知排名
ax1 = sns.boxplot(
    x='Treatment', y='Believed Rank within own Gender',
    data=df_fig, hue="sex", palette='vlag_r', ax=axes[0]
)
ax1.set_title("Beliefed Rank within own Gender", fontsize=14)  # 设置标题字体大小
ax1.tick_params(axis='both', labelsize=10)  # 设置坐标轴刻度字体大小
# 把图例放到子图右侧外部
ax1.legend(title="Sex", bbox_to_anchor=(1.02, 1), loc=2, borderaxespad=0., fancybox=True)

# 第二个子图:组内自我认知排名
ax2 = sns.boxplot(
    x='Treatment', y='Believed Rank',
    data=df_fig[df_fig["Period"]==4], hue="sex", palette='vlag_r', ax=axes[1]
)
ax2.set_title("Beliefed Rank within own Group", fontsize=14)
ax2.tick_params(axis='both', labelsize=10)
# 同样把图例放到子图右侧外部
ax2.legend(title="Sex", bbox_to_anchor=(1.02, 1), loc=2, borderaxespad=0., fancybox=True)

# 调整子图间距,给右侧图例留出足够空间
plt.subplots_adjust(left=0.08, bottom=0.15, right=0.85, top=0.9, wspace=0.3)

plt.show()

代码说明

  • 每个子图用单独的轴对象(ax1、ax2)操作,避免全局方法的冲突
  • bbox_to_anchor=(1.02, 1)精准把图例定位到子图右上角的外部区域
  • set_title()和tick_params()分别控制标题和刻度的字体大小,确保在子图布局下生效
  • 调整了subplots_adjust的参数,让整体布局更美观,同时给图例留出足够显示空间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 03:47:38