如何用Seaborn绘制仅含抖动异常值的Boxplot?
如何绘制仅含抖动异常值的箱线图(隐藏非异常值)
我需要绘制仅包含抖动异常值的箱线图,要求完全隐藏非异常值。网上常用的sns.boxplot()搭配sns.swarmplot()的方案存在两个明显问题:
- 异常值会被重复绘制(箱线图默认的红色异常点与swarmplot的绿色抖动点重叠)
- 会展示所有非异常值,不符合需求
目前Seaborn暂无内置解决方案,我已向上游提交特性请求。以下是复现该问题的最小可执行代码:
#!/usr/bin/env python3 import random import pandas import seaborn as sns import matplotlib.pyplot as plt sns.set_theme() random.seed(0) # 生成非异常值数据集 df = pandas.DataFrame({ 'Vals': random.choices(range(200), k=200)}) # 生成异常值数据集 df_outliers = pandas.DataFrame({ 'Vals': random.choices(range(400, 700), k=20)}) # 合并数据 df = pandas.concat([df, df_outliers], axis=0) # 自定义箱线图异常点样式 flierprops = { 'marker': 'o', 'markeredgecolor': 'red', 'markerfacecolor': 'none' } # 绘制常规箱线图 ax = sns.boxplot(y='Vals', data=df, flierprops=flierprops) # 添加抖动点(但会包含非异常值且重复绘制异常点) ax = sns.swarmplot(y='Vals', data=df, linewidth=.75, color='none', edgecolor='green') plt.show()
内容的提问来源于stack exchange,提问作者buhtz
相关产品推荐
相关产品推荐

