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

如何调整Seaborn FacetGrid图例位置及下移子图标题

调整Seaborn FacetGrid的子图标题位置与图例位置

我来帮你搞定这个问题,针对你想要下移子图标题、调整图例位置的需求,这里有几个实用的解决方案:

一、下移子图标题的两种方法

你之前尝试遍历axes调整标题位置的思路是对的,但参数设置可以优化,另外还有更简洁的方式:

方法1:直接通过set_titles的y参数控制

Seaborn的FacetGrid.set_titles()方法自带y参数,用来控制标题的垂直相对位置(子图坐标范围是[0,1],顶部为1)。数值越小,标题越靠近子图(向下移动),比如:

g.set_titles("{col_name}", y=0.95)

这个方法不需要单独遍历每个子图,代码更简洁,你可以根据实际效果调整y的数值(比如0.92、0.9都可以)。

方法2:优化你现有的遍历axes代码

如果你还是想用遍历的方式,注意ax.title.set_position()的第二个参数是相对坐标,你之前用的2会把标题放到子图外面上方很远,改成小于1的数值就能把标题下移到子图内:

for ax in g.axes:
    ax.title.set_position([0.5, 0.95])  # 第二个值越小,标题越靠下

二、调整图例位置

如果需要调整图例的位置,直接在add_legend()方法里指定loc和bbox_to_anchor参数即可,举几个常用的例子:

  • 把图例放到整个网格的右下角(不遮挡子图):
    g.add_legend(loc='lower right', bbox_to_anchor=(1.0, -0.1))
    
  • 把图例放到单个子图的右上角内部:
    g.add_legend(loc='upper right')
    

完整优化后的代码

把这些调整整合到你的代码里,最终版本如下:

import seaborn as sns; sns.set(style="ticks", color_codes=True)
import pandas as pd
import matplotlib.pyplot as plt
import warnings; warnings.filterwarnings(action='once')
from scipy import stats
import numpy

df = pd.read_csv("serieA.csv")
df['dxG'] = df['xG'] - df['xGA']
df['dG'] = df['GF'] - df['GA']

sns.set_palette("husl")
g = sns.FacetGrid(df, col="Squadra", hue="Venue", col_wrap=5, hue_order=["Home", "Away"])
g.map(sns.distplot, 'dxG', hist=False, kde=True, kde_kws={'kernel':'gau','shade':'True'})
# 下移子图标题
g.set_titles("{col_name}", y=0.95)
# 调整图例到网格右下角
g.add_legend(loc='lower right', bbox_to_anchor=(1.0, -0.1))

plt.xlim(-6,6)
plt.ylim(0,1)
plt.show()

你可以根据自己的可视化需求,微调y值和图例位置参数,达到最舒服的视觉效果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:52:40