一周学会Matplotlib3 Python 数据可视化-绘制箱线图(Box)

发布于:2025-08-15 ⋅ 阅读:(17) ⋅ 点赞:(0)

锋哥原创的Matplotlib3 Python数据可视化视频教程:

2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili

课程介绍

本课程讲解利用python进行数据可视化 科研绘图-Matplotlib,学习Matplotlib图形参数基本设置,绘图参数及主要函数,以及Matplotlib基础绘图,和Matplotlib高级绘图。

绘制箱线图(Box)

箱线图(Box Plot)是一种用于展示数据分布特征的统计图表,能清晰显示数据的中位数、四分位数、异常值等关键统计量。它特别适合比较多个数据集分布情况。 箱线图组成要素:

  1. 箱体 (Box)

    • 下边界:第一四分位数 (Q1, 25%)

    • 上边界:第三四分位数 (Q3, 75%)

    • 箱内横线:中位数 (Q2, 50%)

  2. 须 (Whiskers)

    • 上限:Q3 + 1.5×IQR

    • 下限:Q1 - 1.5×IQR

    • IQR = Q3 - Q1(四分位距)

  3. 异常值 (Outliers)

    • 超出上下须范围的数据点

plt.boxplot() 是 Matplotlib 中用于绘制箱线图的核心函数,用于展示数据的分布特征(如中位数、四分位数、异常值等)。以下是详细解析:

plt.boxplot(
    x,                         # 输入数据(数组或序列的序列)
    notch=None,                # 是否绘制缺口箱线图(显示中位数置信区间)
    sym=None,                  # 异常值的标记符号
    vert=None,                 # 是否垂直放置(True为垂直,False为水平)
    whis=None,                 # 定义须的位置(默认1.5倍IQR)
    positions=None,            # 箱线图的位置
    widths=None,               # 箱体的宽度
    patch_artist=None,         # 是否填充箱体颜色
    bootstrap=None,            # 缺口箱线图的置信区间计算方法
    usermedians=None,          # 用户指定的中位数
    conf_intervals=None,       # 用户指定的置信区间
    meanline=False,            # 是否用线表示均值
    showmeans=False,           # 是否显示均值
    showcaps=True,             # 是否显示箱线图顶端的横线
    showbox=True,              # 是否显示箱体
    showfliers=True,           # 是否显示异常值
    boxprops=None,             # 箱体属性
    whiskerprops=None,         # 须的属性
    capprops=None,             # 顶端横线的属性
    medianprops=None,          # 中位线属性
    meanprops=None,            # 均值属性
    flierprops=None,           # 异常值属性
    manage_ticks=True,         # 是否自动管理刻度
    autorange=False,           # 是否自动调整范围
    zorder=None                # 绘图顺序
)

三、核心参数详解

  1. 数据输入 (x)

  • 一维数组:单组数据

  • 列表的列表/数组的数组:多组数据(每组数据绘制一个箱体)

  • 字典:键为标签,值为数据

  1. 箱体样式控制

  • notch:是否绘制缺口箱线图(显示中位数置信区间)

  • patch_artist:True时可用boxprops填充颜色

  • widths:箱体宽度(默认0.5)

  1. 异常值处理

  • showfliers:是否显示异常值

  • sym:异常值标记符号(默认'o')

  • whis:须的长度(默认1.5,可设为[5,95]表示百分位数)

  1. 统计量显示

  • showmeans:显示均值(默认False)

  • meanline:True时用横线表示均值,False时用点表示

  1. 样式属性

  • boxprops:箱体属性(如dict(color='red', facecolor='blue')

  • whiskerprops:须的属性(如dict(linestyle='--', color='green')

  • medianprops:中位线属性(如dict(color='black', linewidth=2)

  • flierprops:异常值属性(如dict(marker='x', markersize=8)

我们来看一个示例:

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
​
# 设置matplotlib使用黑体显示中文
matplotlib.rcParams['font.family'] = 'Microsoft YaHei'
​
# 创建示例数据
np.random.seed(42)
data = [np.random.normal(0, std, 100) for std in range(1, 5)]
# 创建箱线图
plt.figure(figsize=(10, 6))
​
# 绘制箱线图
box = plt.boxplot(data,
                  vert=True,  # 垂直方向
                  patch_artist=True,  # 填充颜色
                  tick_labels=['组1', '组2', '组3', '组4'])
​
# 设置箱子颜色
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']
for patch, color in zip(box['boxes'], colors):
    patch.set_facecolor(color)
    patch.set_alpha(0.7)  # 设置透明度
​
# 设置须线和异常点样式
plt.setp(box['whiskers'], color='red', linestyle='-')  # 箱线图的“须”部分,即从箱子延伸出去的两条线(上须和下须),表示数据的范围(通常是1.5倍IQR内的数据)。
plt.setp(box['caps'], color='yellow')  # 箱线图须线末端的横线,称为“帽”。每个须有两个帽(上须的上帽和下须的下帽)。
plt.setp(box['fliers'], marker='o', markersize=8,
         markerfacecolor='none', markeredgecolor='blue')  # 箱线图中的异常值点,即超出1.5倍IQR范围的数据点。
plt.setp(box['medians'], color='gray', linewidth=2)  # 箱线图中的中位数线,即箱子中间的横线。
​
# 添加标题和标签
plt.title('基本箱形图示例', fontsize=14)
plt.xlabel('数据组', fontsize=12)
plt.ylabel('值', fontsize=12)
plt.grid(axis='y', linestyle='--', alpha=0.7)
​
plt.tight_layout()
plt.show()