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

