如何在seaborn figure-level箱线图上叠加数据点
解决方案
你之前出现上下分开展示的原因是两次绘图分别创建了独立的画布/子图对象,没有在同一个子图坐标系内渲染两类图形。
你可以直接调用factorplot(新版本Seaborn已废弃该接口,推荐用catplot,参数逻辑完全一致)返回的FacetGrid对象的map方法,在每个子图的箱线图层上叠加stripplot散点,核心是保证散点和箱线的x轴分类顺序一致,同时设置散点透明度和抖动避免遮挡箱线信息。
首先补全原代码中缺失的依赖导入:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt
然后把绘图部分的代码替换为如下内容即可:
# 绘制箱线图,将返回的FacetGrid对象赋值给g g = sns.catplot(x="week", y="value", col="variable", data=df1, kind="box") # 为每个子图叠加散点 g.map(sns.stripplot, 'week', 'value', color='darkgray', # 散点颜色,避免和箱线颜色冲突 size=3, alpha=0.7, # 半透明避免遮挡 jitter=0.15, # 轻微抖动避免同值点重叠 order=sorted(df1['week'].unique())) # 保证x轴顺序和箱线完全一致 plt.show()
如果你的Seaborn版本较老仍然要使用factorplot,只需要把上面的catplot替换回factorplot即可,其余逻辑完全相同。
内容的提问来源于stack exchange,提问作者an10b3
相关产品推荐
相关产品推荐

