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

如何在Python绘制箱线图时仅展示最大和最小异常值?

Python箱线图仅展示最大、最小两个异常值的实现方案

核心思路是不修改原始数据集,先手动按箱线图规则筛选出所有异常值,仅保留最大最小两个后,关闭绘图库默认的异常值展示,再手动把这两个点叠加到图上。

完整可运行代码示例

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 1. 生成模拟偏态数据(替换为你自己的数据集即可)
np.random.seed(42)
# 对数正态分布是典型的右偏分布,会产生大量高侧异常值
data = np.random.lognormal(mean=2, sigma=1.5, size=1000)

# 2. 按箱线图默认规则筛选异常值
q1 = np.percentile(data, 25)
q3 = np.percentile(data, 75)
iqr = q3 - q1
# 箱线图默认异常值判定规则:小于Q1-1.5*IQR 或 大于Q3+1.5*IQR
lower_threshold = q1 - 1.5 * iqr
upper_threshold = q3 + 1.5 * iqr

all_outliers = data[(data < lower_threshold) | (data > upper_threshold)]
# 仅保留最大、最小两个异常值,若异常值不足2个则全保留
target_outliers = np.array([all_outliers.min(), all_outliers.max()]) if len(all_outliers) >= 2 else all_outliers

# 3. 绘图
plt.figure(figsize=(8, 4))
# 绘制箱线图时关闭默认的异常值展示
sns.boxplot(x=data, showfliers=False, color="#87CEEB")
# 手动叠加保留的异常值,y=0对应单组箱线图的纵向位置
plt.scatter(x=target_outliers, y=[0]*len(target_outliers), color="red", s=50, marker="o", label="保留异常值")

plt.legend()
plt.xlabel("数据值")
plt.title("偏态分布箱线图(仅展示最大最小异常值)")
plt.show()

多组数据的适配说明

如果是多组并列箱线图,对每一组数据单独执行上述异常值筛选逻辑,绘制散点时对应修改y坐标即可:每组箱线图的纵向坐标依次为0、1、2……,对应组的顺序。

自定义调整项

  • 异常值判定规则可自行修改,比如把1.5倍IQR改为3倍IQR,仅需调整lower_threshold和upper_threshold的计算系数即可
  • 保留的异常值样式可通过scatter函数的color、s、marker参数调整

内容的提问来源于stack exchange,提问作者김ㅈㅎ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:05