如何使用类别轴覆盖条形图上的数据点
问题描述
目标:我正在尝试使用Seborn在带有多个分组条形图的图表中显示单个数据点。
问题:我尝试使用条形图的猫图和单个数据点的另一个猫图来完成此操作。但是,这会生成两个数字:一个数字带有条形图,另一个带有单个数据点。
问题:是否有办法使用Seborn将单个数据点与条形图一起显示在同一图形中?
这是我的代码,生成两个独立的数字:
import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.catplot(
x="sex",
y="total_bill",
hue="smoker",
row="time",
data=tips,
kind="bar",
ci = "sd",
edgecolor="black",
errcolor="black",
errwidth=1.5,
capsize = 0.1,
height=4,
aspect=.7,
)
g = sns.catplot(
x="sex",
y="total_bill",
hue="smoker",
row="time",
data=tips,
kind="strip",
height=4,
aspect=.7,
)
输出:
问题:是否有办法使用Seborn将单个数据点与条形图一起显示在同一图形中?
解决方案
- 图形级别绘图(
seaborn.catplot
)不能组合,但是可以将轴级绘图(seaborn.stripplot
)映射到图形级别绘图。- 参见Building structured multi-plot grids
- 这可能是一个变化无常的过程,并且可能仅在映射绘图中使用数据框中的相同列时才起作用。
- 测试于
python 3.8.11
、matplotlib 3.4.3
、seaborn 0.11.2
import seaborn as sns
tips = sns.load_dataset("tips")
g = sns.catplot(
x="sex",
y="total_bill",
hue="smoker",
row="time",
data=tips,
kind="bar",
ci = "sd",
edgecolor="black",
errcolor="black",
errwidth=1.5,
capsize = 0.1,
height=4,
aspect=.7,
alpha=0.5)
# map data to stripplot
g.map(sns.stripplot, 'sex', 'total_bill', 'smoker', hue_order=['Yes', 'No'], order=['Male', 'Female'],
palette=sns.color_palette(), dodge=True, alpha=0.6, ec='k', linewidth=1)
相关文章