首页 > 解决方案 > 如何在一个窗口上绘制多个 FacetGrid?

问题描述

在下面的代码中,我可以将两个简单的 seaborn 图放在一个窗口中,ax=ax[i]方法是向每个图传递参数,但不适用于FacetGrid(). 类似的问题已经在这里提出,想知道是否有人知道如何做到这一点。谢谢!

import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

df = sns.load_dataset('tips')

########################
# Works :)
########################
fig,ax = plt.subplots(nrows=2)
sns.regplot(x='total_bill', y='tip', data=df, ax=ax[0])         # plot #1
sns.boxplot(x='day', y='total_bill', data=df, ax=ax[1])         # plot #2
plt.show()

########################
# Does not work :(
########################
fig,ax = plt.subplots(nrows=2)
g = sns.FacetGrid(df, col="time", ax=ax[0])                             # FacetGrid #1
g.map(plt.hist, "tip")

g = sns.FacetGrid(df, col="sex", hue="smoker", col_wrap=2, ax=ax[1])    # FacetGird #2
g.map(plt.scatter, "total_bill", "tip", alpha=.7)
g.axes[-1].legend() 
plt.show()

标签: pythonmatplotlibseaborn

解决方案


这是因为 FacetGrid 本身会产生子图并创建单个图形。FacetGrid 不允许使用子图。唯一的解决方案是将您的 FacetGrid 合并在一起以创建一个图 - 但是,除非您的轴相同,否则这并非易事。

如此处所述的解决方法是可能的: 将不同的 seaborn facet 网格组合成单个图


推荐阅读