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

如何在Matplotlib箱线图中为离群点(Fliers/Outliers)添加标注

箱线图离群点标注实现方案

该需求完全可以实现。Matplotlib没有提供开箱即用的离群点自动标注接口,但可以通过提取箱线图返回的离群点对象,手动添加标注,实现逻辑非常简单。

实现核心逻辑

调用ax.boxplot()绘制箱线图时,方法会返回一个包含所有绘图元素的字典,其中键fliers对应的值就是所有离群点的图形对象,我们只需要从对象中提取每个离群点的横、纵坐标,循环调用ax.annotate()即可给每个点加上自定义标注。

可直接运行的示例代码

import matplotlib.pyplot as plt
import numpy as np

# 生成测试用模拟数据
np.random.seed(42)
dataset = [np.random.normal(0, std, 100) for std in range(1, 4)]
# 手动构造明显离群点方便验证效果
dataset[0][0] = 5.2
dataset[1][5] = -6.8
dataset[2][10] = 7.9

fig, ax = plt.subplots(figsize=(8, 5))
# 绘制箱线图,保存返回的元素集合
boxplot_elements = ax.boxplot(dataset, patch_artist=True)

# 遍历每个分组对应的离群点
for group_idx, flier_group in enumerate(boxplot_elements['fliers']):
    # 提取当前分组下所有离群点的坐标
    x_coords = flier_group.get_xdata()
    y_coords = flier_group.get_ydata()
    # 逐点添加标注
    for x, y in zip(x_coords, y_coords):
        ax.annotate(
            f'值: {y:.2f}', # 这里可以自定义标注内容,比如样本ID、具体数值等
            xy=(x, y),
            xytext=(5, 5), # 标注相对于离群点的偏移,避免遮挡点本身
            textcoords='offset points',
            fontsize=9
        )

ax.set_xticklabels(['分组A', '分组B', '分组C'])
plt.show()

适配其他绘图场景的说明

  • 如果使用pandas.DataFrame.boxplot()绘图,逻辑完全一致,该方法同样返回包含fliers键的元素字典。
  • 如果使用seaborn绘制箱线图,可以在绘图完成后遍历坐标轴的子元素,筛选出代表离群点的PathCollection对象,再调用get_offsets()方法提取离群点坐标,后续添加标注的逻辑和上面的示例完全相同。
  • 标注样式可以自由调整:需要箭头指向离群点时,给annotate()传入arrowprops参数配置箭头样式即可,也可以自定义标注的字体、颜色、背景等属性。

参考效果如下:
箱线图离群点标注参考示例

内容的提问来源于stack exchange,提问作者SlushP22

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:36:36