使用seaborn的FacetGrid,我想在多个映射调用之间更新'hue'分组参数。具体来说,我最初有一个自定义绘图功能,该功能采用“色相”分组,在此基础上,我想显示整个 组的平均值(因此忽略色相,并汇总所有数据)。>
例如
g = sns.FacetGrid(tips, col="time", hue="smoker")
g = (g.map(plt.scatter, "total_bill", "tip", edgecolor="w").add_legend())
g = (g.map(sns.regplot, "total_bill", "tip").add_legend())
将为每个组创建一条彩色的回归线。如何更新FacetGrid以忽略第二次调用hue
时的map
分组?在此示例中,我要创建两个彩色的散点图,并用一条(黑色)回归线覆盖。
答案 0 :(得分:-1)
FacetGrid
使用色相对输入数据进行分组。它不能仅将其部分分组。
matplotlib解决方案可能看起来像
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips", cache=True)
n = len(tips["time"].unique())
usmoker = tips["smoker"].unique()
fig, axes = plt.subplots(ncols=n, sharex=True, sharey=True)
for ax, (time, grp1) in zip(axes.flat, tips.groupby("time")):
ax.set_title(time)
ax.set_prop_cycle(plt.rcParams["axes.prop_cycle"])
for smoker in usmoker:
grp2 = grp1[grp1["smoker"] == smoker]
sns.regplot("total_bill", "tip", data=grp2, label=str(smoker),
fit_reg=False, ax=ax)
ax.legend(title="Smoker")
for ax, (time, grp1) in zip(axes.flat, tips.groupby("time")):
sns.regplot("total_bill", "tip", data=grp1, ax=ax, scatter=False,
color="k", label="regression line")
plt.show()