如何为已创建的Seaborn FacetGrid添加汇总子图并调整轴标签?
解决方案
1. 统一全局轴标签
默认FacetGrid会给每个子图添加独立轴标签,要实现所有子图共享同一行的全局标签,按以下步骤操作:
- 先清空所有子图的本地标签
- 用图表的全局标签方法添加统一的x、y轴标签
import seaborn as sns import matplotlib.pyplot as plt # 生成初始FacetGrid facetgrid = sns.lmplot(data=file_to_plot, col="count", col_wrap=3, x='measured_data', y='y_data') # 清空所有子图的本地轴标签 facetgrid.set(xlabel='', ylabel='') # 添加全局x轴标签(位于所有子图底部中间) facetgrid.fig.supxlabel('measured_data', y=0.02) # 添加全局y轴标签(位于所有子图左侧中间) facetgrid.fig.supylabel('y_data', x=0.08)
2. 在右下角添加汇总子图
col_wrap=3时10组数据会生成4行3列布局(共12个位置,仅前10个被使用),直接利用右下角空白位置(第4行第3列,索引(3,2))添加汇总子图:
- 获取图表的网格布局对象
gridspec - 在目标位置添加新轴对象
- 在新轴上绘制汇总回归曲线
# 获取图表的网格布局 gs = facetgrid.fig.gridspec # 在右下角位置添加轴 ax_summary = facetgrid.fig.add_subplot(gs[3, 2]) # 绘制汇总回归曲线(隐藏散点) sns.regplot(data=file_to_plot, x='measured_data', y='y_data', scatter_kws={"alpha": 0}, ax=ax_summary) # 给汇总子图加标题 ax_summary.set_title('All Data') # 调整布局避免元素重叠 plt.tight_layout() # 保存并关闭图表 plt.savefig(f'{dir}{name}.png') plt.close()
完整整合代码
import seaborn as sns import matplotlib.pyplot as plt # 生成FacetGrid facetgrid = sns.lmplot(data=file_to_plot, col="count", col_wrap=3, x='measured_data', y='y_data') # 统一全局轴标签 facetgrid.set(xlabel='', ylabel='') facetgrid.fig.supxlabel('measured_data', y=0.02) facetgrid.fig.supylabel('y_data', x=0.08) # 添加汇总子图 gs = facetgrid.fig.gridspec ax_summary = facetgrid.fig.add_subplot(gs[3, 2]) sns.regplot(data=file_to_plot, x='measured_data', y='y_data', scatter_kws={"alpha": 0}, ax=ax_summary) ax_summary.set_title('All Data') # 调整布局并保存 plt.tight_layout() plt.savefig(f'{dir}{name}.png') plt.close()
内容的提问来源于stack exchange,提问作者Alexander Mutz
相关产品推荐
相关产品推荐

