在 matplotlib 中组合(叠加)两个因子图
Combine (overlay) two factorplots in matplotlib
我需要在 matplotlib 中将 swarmplot
添加到 boxplot
,但我不知道如何使用 factorplot
。我想我可以使用子图进行迭代,但我想学习如何使用 seaborn 和 factorplot 进行迭代。
一个简单的example(使用相同的轴绘制ax
):
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="tip", y="day", data=tips, whis=np.inf)
ax = sns.swarmplot(x="tip", y="day", data=tips, color=".2")
结果:
在我的例子中,我需要叠加群因子图:
g = sns.factorplot(x="sex", y="total_bill",
hue="smoker", col="time",
data=tips, kind="swarm",
size=4, aspect=.7);
和箱线图
我不知道如何使用轴(摘自 g
)?
类似于:
g = sns.factorplot(x="sex", y="total_bill",
hue="smoker", col="time",
data=tips, kind="box",
size=4, aspect=.7);
我想要这样的东西,但是 factorplot
和 boxplot
而不是 violinplot
与其尝试用单独的箱线图覆盖因子图的两个子图(这是可能的,但我不喜欢它),不如单独创建两个子图。
然后您将循环遍历组和轴,为每个绘制一对框图和群图。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
fig, axes = plt.subplots(ncols=2, sharex=True, sharey=True)
for ax, (n,grp) in zip(axes, tips.groupby("time")):
sns.boxplot(x="sex", y="total_bill", data=grp, whis=np.inf, ax=ax)
sns.swarmplot(x="sex", y="total_bill", hue="smoker", data=grp,
palette=["crimson","indigo"], ax=ax)
ax.set_title(n)
axes[-1].get_legend().remove()
plt.show()
我需要在 matplotlib 中将 swarmplot
添加到 boxplot
,但我不知道如何使用 factorplot
。我想我可以使用子图进行迭代,但我想学习如何使用 seaborn 和 factorplot 进行迭代。
一个简单的example(使用相同的轴绘制ax
):
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.boxplot(x="tip", y="day", data=tips, whis=np.inf)
ax = sns.swarmplot(x="tip", y="day", data=tips, color=".2")
结果:
在我的例子中,我需要叠加群因子图:
g = sns.factorplot(x="sex", y="total_bill",
hue="smoker", col="time",
data=tips, kind="swarm",
size=4, aspect=.7);
和箱线图
我不知道如何使用轴(摘自 g
)?
类似于:
g = sns.factorplot(x="sex", y="total_bill",
hue="smoker", col="time",
data=tips, kind="box",
size=4, aspect=.7);
我想要这样的东西,但是 factorplot
和 boxplot
而不是 violinplot
与其尝试用单独的箱线图覆盖因子图的两个子图(这是可能的,但我不喜欢它),不如单独创建两个子图。
然后您将循环遍历组和轴,为每个绘制一对框图和群图。
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
tips = sns.load_dataset("tips")
fig, axes = plt.subplots(ncols=2, sharex=True, sharey=True)
for ax, (n,grp) in zip(axes, tips.groupby("time")):
sns.boxplot(x="sex", y="total_bill", data=grp, whis=np.inf, ax=ax)
sns.swarmplot(x="sex", y="total_bill", hue="smoker", data=grp,
palette=["crimson","indigo"], ax=ax)
ax.set_title(n)
axes[-1].get_legend().remove()
plt.show()