You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 02:06:01