在数据可视化领域,箱线图Box Plot)是一种强大的工具,用于展示数据的分布特征集中趋势以及异常值

它不仅能够快速揭示数据的偏态离散程度,还能帮助我们识别潜在的数据问题

本文将从基础绘制到业务实战,系统讲解如何用 Plotly 构建交互式箱线图,并掌握其在异常值检测、多组对比分析中的核心应用。

1. 基础绘制

箱线图是一种用于展示一组数据的五数概括(最小值第一四分位数中位数第三四分位数最大值)的图表。

它的几何形态主要由以下几个部分构成:

  • 中位数Median):位于箱体中间的横线,表示数据的中间值,将数据分为上下两部分。
  • 四分位数Quartiles):第一四分位数(Q1)位于箱体下边缘,表示数据中有 25% 的值低于此数;第三四分位数(Q3)位于箱体上边缘,表示数据中有 75% 的值低于此数。
  • 箱体Box):由 Q1 和 Q3 构成,其高度表示数据的中间 50% 的分布范围,反映了数据的集中趋势和离散程度。
  • 触须Whiskers):从箱体延伸出的两条线,通常表示数据的正常范围。其长度一般为 1.5 倍的四分位距(IQR = Q3 - Q1),超出此范围的数据点被视为异常值。
  • 异常值Outliers):用单独的点标记,表示那些偏离正常范围的数据点,可能需要进一步分析其成因

箱线图的几何形态与数据分布有着密切的关系。例如,

  • 箱体越窄,说明数据的集中程度越高;
  • 触须越短,说明数据的离散程度越小;
  • 异常值的分布情况则可以提示数据中是否存在异常情况或特殊规律。

下面的示例,我们构造一组学生成绩的数据,然后用箱线图来展示成绩的分布情况。

import plotly.graph_objects as go
import numpy as np # 生成示例数据
np.random.seed(10)
scores = np.random.randint(1, 100, 100) # 绘制单变量箱线图
fig = go.Figure(
data=[
go.Box(
y=scores,
boxpoints="outliers",
)
]
)
fig.update_layout(title="学生考试成绩箱线图", yaxis_title="成绩")
fig.show()

上图中,箱体范围:从 Q1 到 Q3,表示数据的中间 50% 的分布范围。箱体的高度越小,说明数据越集中。

如果有异常值的话,会用蓝色的圆点标记,表示超出正常范围的数据点。

这些异常值可能是数据录入错误、特殊事件影响或其他原因导致的。

比如,我们给变量scores中添加一些异常的数值,再看看箱线图的变化。

scores = np.append(scores, [-100, 200])

图中多了2个蓝色的圆点,就是后面添加的两个异常值

2. 分析应用

2.1. 异常值识别

异常值是数据分析中需要特别关注的部分。它们可能会影响统计分析的结果,甚至误导决策。


箱线图提供了一种直观且有效的方法来识别异常值。

异常值通常是通过四分位距(IQR)来判定的。具体规则如下:

  • 小于$ Q1 - 1.5 \times IQR $的数据点被视为下异常值
  • 大于$ Q3 + 1.5 \times IQR $的数据点被视为上异常值

Plotly的交互式功能可以让我们更方便地分析异常值。

通过设置boxpoints='all',我们可以将所有数据点显示出来,并通过颜色或其他样式来区分正常值和异常值。

import plotly.graph_objects as go
import numpy as np # 生成示例数据
np.random.seed(10)
scores = np.random.randint(1, 100, 100)
scores = np.append(scores, [-100, 200]) fig = go.Figure(
data=[
go.Box(
y=scores,
boxpoints="all",
jitter=0.3,
pointpos=-1.8,
marker_color="rgba(0, 0, 255, 0.7)",
line_color="black",
notched=True,
)
]
)
fig.update_layout(title="学生考试成绩箱线图(高亮异常值)", yaxis_title="成绩")
fig.show()

在上述代码中, jitter参数用于调整数据点的抖动程度,避免数据点重叠;

pointpos参数用于控制数据点的水平位置。

通过这种方式,我们可以清晰地看到哪些数据点是异常值。

在识别出异常值后,一般需要根据具体情况选择合适的处理方法:

  • 删除:如果异常值是由于数据录入错误或不可信的测量结果导致的,可以直接将其删除。
  • 修正:如果异常值可能是真实存在的,但数值有误,可以根据业务逻辑或参考其他数据进行修正。
  • 保留:在某些情况下,异常值可能具有重要的业务意义,如特殊事件的影响,此时应保留异常值并进行进一步分析。

2.2. 多组数据箱线图

箱线图不仅可以用于单变量的分析,还可以用于多组数据的对比分析。

通过将不同组的数据绘制在同一张箱线图上,我们可以直观地比较它们的分布特征和差异。

假设我们有一组包含多个分类变量的数据,例如不同班级学生的考试成绩。

# 示例数据:不同班级学生的考试成绩
data = {
"Class A": [85, 90, 78, 92, 88, 76, 89, 95, 67, 83],
"Class B": [82, 87, 79, 91, 85, 75, 88, 93, 77, 84],
"Class C": [88, 93, 81, 95, 86, 78, 90, 94, 82, 87],
} fig = go.Figure()
colors = ["blue", "green", "red"]
for class_name, scores in data.items():
fig.add_trace(
go.Box(
y=scores,
name=class_name,
boxpoints="outliers",
line_color="black",
fillcolor=colors.pop(),
)
) fig.update_layout(
title="不同班级学生考试成绩对比",
yaxis_title="成绩",
xaxis_title="班级",
boxgap=0.3,
) # 调整箱线图之间的间距
fig.show()

通过分析分组箱线图,我们可以发现不同班级学生成绩的差异情况。

3. 总结

箱线图作为探索性数据分析中的重要工具,不仅能够帮助我们快速把握数据的分布特征,还能有效识别异常值,促进数据清洗与预处理。

在实际应用中,建议:

  • 优先清洗数据中的极端异常值,避免误导分析结论。
  • 在业务报告中,充分利用箱线图的直观性,传递数据分布与组间差异信息,辅助决策制定。

『Plotly实战指南』--箱线图绘制与应用的更多相关文章

  1. R语言学习 - 箱线图(小提琴图、抖动图、区域散点图)

    箱线图 箱线图是能同时反映数据统计量和整体分布,又很漂亮的展示图.在2014年的Nature Method上有2篇Correspondence论述了使用箱线图的好处和一个在线绘制箱线图的工具.就这样都 ...

  2. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  3. Matlab boxplot for Multiple Groups(多组数据的箱线图)

    在画之前首先介绍一下Matlab boxplot,下面这段说明内容来自http://www.plob.org/2012/06/10/2153.html   由于matlab具有强大的计算功能,用其统计 ...

  4. 第六篇:R语言数据可视化之数据分布图(直方图、密度曲线、箱线图、等高线、2D密度图)

    数据分布图简介 中医上讲看病四诊法为:望闻问切.而数据分析师分析数据的过程也有点相似,我们需要望:看看数据长什么样:闻:仔细分析数据是否合理:问:针对前两步工作搜集到的问题与业务方交流:切:结合业务方 ...

  5. 箱线图(boxplot)简介与举例

    简述:   盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的.它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(m ...

  6. matplotlib箱线图与柱状图比较

    代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 16:37:47 2018 @author: zhen &qu ...

  7. 箱线图boxplot

    箱线图boxplot--展示数据的分布 图表作用: 1.反映一组数据的分布特征,如:分布是否对称,是否存在离群点 2.对多组数据的分布特征进行比较 3.如果只有一个定量变量,很少用箱线图去看数据的分布 ...

  8. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  9. R语言绘图:箱线图

    使用ggplot2绘制箱线图 ######*****绘制箱线图代码*****####### data1$学区房 <- factor(data1$school, levels = 0:1, lab ...

  10. python3绘图示例4(基于matplotlib:箱线图、散点图等)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from matplotlib.pyplot import * x=[1,2,3,4]y=[5,4,3,2] # ...

随机推荐

  1. Java内存模型深度剖析

    为什么要有内存模型  在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情.要说计算机的内存模型,就要说一下一段古老的历史,看 ...

  2. java代码之美(3)

    Map中的computeIfAbsent方法 Map接口的实现类如HashMap,ConcurrentHashMap,HashTable等继承了此方法,通过此方法可以在特定需求下,让你的代码更加简洁. ...

  3. EXCEL VSTO插件开发(一)-FuTools Excel

    Excel VSTO插件开发之旅:我与FuTools Excel的共同成长在踏入Excel VSTO插件开发的领域之前,我不过是一名普通的Excel用户,对数据的处理和分析充满好奇却时常感到力不从心. ...

  4. Linux下本地yum源配置及局域网yum配置

    1.Linux下本地yum源配置 本地yum源依赖于python解析,首先要确保系统的python和yum源安装完成 1.1.本地yum源配置及挂载 上传ISO镜像或使用本机镜像,使用mount命令挂 ...

  5. 【保姆级教程】DeepSeek R1+RAG,基于开源三件套10分钟构建本地AI知识库(文末附笔记及材料)

    一.总体方案 目前在使用 DeepSeek 在线环境时,页面经常显示"服务器繁忙,请稍后再试",以 DeepSeek R1 现在的火爆程度,这个状况可能还会持续一段时间,所以这里给 ...

  6. 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?

    你好呀,我是歪歪. 事情是这样的,前几天有一个读者给我发消息,说他面试的时候遇到一个奇形怪状的面试题. 歪师傅纵横面试界多年,最喜欢的是奇形怪状的面试题. 可以说是见过大场面的人,所以让他描述一下具体 ...

  7. Spark 广播变量(broadcast)更新方法

    Spark 广播变量(broadcast)更新方法更新方法spark 广播变量可以通过unpersist方法删除,然后重新广播 val map = sc.textFile("/test.tx ...

  8. C# .net 压缩文件解压上传及文件压缩下载

    using ICSharpCode.SharpZipLib.Zip; using System; using System.Collections.Generic; using System.IO; ...

  9. C++17 Filesystem 实用教程

    点击查看代码 C++17 标准带来了 std::filesystem库, 提供了强大的工具来处理文件路径, 目录以及其他与文件系统相关的操作. 这篇文章适合 C++ 初学者以及希望掌握 C++17 新 ...

  10. hgame2025-Crypto小记

    hgame2025-Crypto小记 发现积压在文件夹有一段时间了.整理一下发出来. suprimeRSA task.py from Crypto.Util.number import * impor ...