python - 如何使用 seaborn 制作带有单个数据点的箱线图
问题描述
我有一个使用以下命令创建的箱线图:
sns.boxplot(y='points_per_block', x='block', data=data, hue='habit_trial')
所以不同的颜色代表试验是否是习惯试验(0,1)。我还想绘制我尝试使用以下方法实现的各个数据点:
sns.stripplot(y='points_per_block', x='block', data=data, hue='habit_trial')
结果如下
我希望各个点显示在相应的箱形图上。有没有办法在不以某种方式侵入他们的位置的情况下做到这一点?问题来自这样一个事实,即使用色调分离数据对于条形图和箱形图的工作方式不同,但我原以为这些很容易组合。
提前致谢。
解决方案
处理分类数据的 Seaborn 函数通常有一个dodge=
参数,指示是否应该将不同色调的数据分开一点。对于 a boxplot
,dodge
默认为True
,因为如果不闪避,它通常看起来很糟糕。对于stripplot
默认为dodge=False
.
以下示例还显示了如何更新图例(需要 matplotlib 3.4 HandlerTuple
):
import seaborn as sns
from matplotlib.legend_handler import HandlerTuple
tips = sns.load_dataset("tips")
ax = sns.boxplot(data=tips, x="day", y="total_bill",
hue="smoker", hue_order=['Yes', 'No'], boxprops={'alpha': 0.4})
sns.stripplot(data=tips, x="day", y="total_bill",
hue="smoker", hue_order=['Yes', 'No'], dodge=True, ax=ax)
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles=[(handles[0], handles[2]), (handles[1], handles[3])],
labels=['Smoker', 'Non-smoker'],
loc='upper left', handlelength=4,
handler_map={tuple: HandlerTuple(ndivide=None)})
推荐阅读
- android - 为什么房间表有重复的 id 列?
- php - 如何检查一个项目数组是否只包含这个项目?
- mocking - 当任何值返回固定值时模拟
- docker - 将文件从竹用户/主机复制到 docker 容器
- javascript - React 样式的组件在生产中导致构建错误,但在开发中运行良好
- node.js - 我可以自动知道 aws s3 上的事件上传文件吗?
- rest - 如何使用 REST API 在 OpenTok 会话中获取订阅者数量?
- docker - Docker-机器创建失败
- jquery - HTML表单中的浏览器自动完成属性不起作用
- ember.js - ember-cordova 无法使用 x-file-input 多次上传照片