gpt4 book ai didi

python - 如何使用 sns.catplot 在箱线图上叠加散点图?

转载 作者:行者123 更新时间:2023-12-05 01:30:11 25 4
gpt4 key购买 nike

可以结合axes-level通过简单地连续调用函数来绘制函数:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.set_theme(style="whitegrid")
ax = sns.boxplot(x="day", y="total_bill", data=tips)
ax = sns.stripplot(x="day", y="total_bill", data=tips,
color=".25", alpha=0.7, ax=ax)
plt.show()

如何实现图形级功能sns.catplot() ?连续调用 sns.catplot() 每次都会创建一个新图形,并且无法传递图形句柄。

# This creates two separate figures:
sns.catplot(..., kind="box")
sns.catplot(..., kind="strip")

最佳答案

以下对我适用于 seaborn v0.11:

import seaborn as sns 
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.catplot(x="sex", y="total_bill", hue="smoker", col="time",
data=tips, kind="box",
palette=["#FFA7A0", "#ABEAC9"],
height=4, aspect=.7);
g.map_dataframe(sns.stripplot, x="sex", y="total_bill",
hue="smoker", palette=["#404040"],
alpha=0.6, dodge=True)
# g.map(sns.stripplot, "sex", "total_bill", "smoker",
# palette=["#404040"], alpha=0.6, dodge=True)
plt.show()

说明:在第一步中,箱形图是使用 sns.catplot() 创建的。该函数返回 sns.FacetGrid适应分类参数 time 的每个值的不同轴。在第二遍中,此 FacetGrid 被重新用于覆盖散点图( sns.stripplot ,或者 sns.swarmplot )。以上使用方法 map_dataframe()因为 data 是一个带有命名列的 pandas DataFrame。 (或者,也可以使用 map()。)设置 dodge=True 可确保散点图沿每个 hue 类别的分类轴移动。最后,请注意,通过使用 kind="box" 调用 sns.catplot(),然后在第二步中覆盖散点图,问题 duplicated legend entries被隐式规避。

Resulting figure

备选方案(不推荐):也可以先创建一个FacetGrid 对象,然后调用两次map_dataframe()。虽然这适用于此示例,但在其他情况下,必须确保属性映射在各个方面正确同步(请参阅 docs 中的警告)。 sns.catplot() 会处理这个以及图例。

g = sns.FacetGrid(tips, col="time", height=4, aspect=.7)
g.map_dataframe(sns.boxplot, x="sex", y="total_bill", hue="smoker",
palette=["#FFA7A0", "#ABEAC9"])
g.map_dataframe(sns.stripplot, x="sex", y="total_bill", hue="smoker",
palette=["#404040"], alpha=0.6, dodge=True)
# Note: the default legend is not resulting in the correct entries.
# Some fix-up step is required here...
# g.add_legend()
plt.show()

关于python - 如何使用 sns.catplot 在箱线图上叠加散点图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67309730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com