python - 如何使用 sns.catplot 在箱线图顶部叠加散点图?
问题描述
可以通过简单地连续调用它们来组合轴级绘图函数:
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
为分类参数的每个值容纳不同轴的a time
。在第二遍中,这FacetGrid
被重新用于覆盖散点图(sns.stripplot
或替代地,sns.swarmplot
)。上面使用方法map_dataframe()
是因为它是一个带有命名列data
的熊猫。DataFrame
(或者,map()
也可以使用。)设置dodge=True
确保散点图沿每个hue
类别的类别轴移动。最后,请注意,通过调用sns.catplot()
withkind="box"
然后在第二步中覆盖散点图,可以隐式规避重复图例条目的问题。
替代方案(不推荐):也可以先创建一个FacetGrid
对象,然后调用map_dataframe()
两次。虽然这适用于本示例,但在其他情况下,必须确保属性映射在各个方面正确同步(请参阅文档中的警告)。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()
推荐阅读
- c# - C# Parallel Foreach 没有按预期工作,它无异常退出
- javascript - 当第二次从第一个钩子中获取使用数据时,使用多个 React 钩子 useEffect 从 API 中获取数据
- r - 将文本文件导入 R 并更改其格式
- c - 无法解决 Visual Studio 2019 中未处理的异常
- go - Golang 的 base64 实现
- javascript - 使 Vueper-Slides 与 Gridsome 中的 Markdown 前端工作一起使用
- r - 边列表网络图 R
- python - 即使您关闭文件并重新启动计算机,变量也会存储其值?
- sql-server - 将 select 语句的结果作为参数传递给存储过程
- python - 在 Windows 上的 emacs 中运行的 Anaconda Python 中使用 numpy