Matplotlib boxplot() 函数


Matplotlib 参考文档 Matplotlib 参考文档

boxplot() 用于绘制箱线图,直观展示数据的五数概括:最小值、第一四分位数、中位数、第三四分位数、最大值,以及可能的异常值。

箱线图是数据探索分析的核心工具,适合对比多组数据的分布特征。

函数定义

matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None,
    whis=None, positions=None, widths=None, patch_artist=None,
    bootstrap=None, usermedians=None, conf_intervals=None,
    meanline=None, showmeans=None, showcaps=None, showbox=None,
    showfliers=None, boxprops=None, labels=None, flierprops=None,
    medianprops=None, meanprops=None, capprops=None,
    whiskerprops=None, manage_ticks=True, autorange=False,
    zorder=None, capwidths=None, **kwargs)

参数说明

参数类型说明
xarray 或 array 序列输入数据,一维数组绘制一个箱线,二维数组序列绘制多个
notchbool是否绘制缺口箱线图(缺口用于中位数置信区间),默认 False
vertboolTrue=垂直(默认),False=水平
whisfloat 或 (float, float)须线长度(IQR 的倍数),默认 1.5。如 (5, 95) 表示第 5 和 95 百分位
symstr 或 None异常值的标记样式,None 表示不显示异常值
widthsfloat 或 array-like每个箱线的宽度
patch_artistbool若为 True,箱子用填充色(可用 facecolor 自定义)
showmeansbool是否显示均值点,默认 False
showfliersbool是否显示异常值,默认 True
labelslist每个箱线的标签
boxprops / flierprops / medianprops / meanpropsdict分别控制箱子/异常值/中位线/均值的外观属性

箱线图的结构:箱子从 Q1 到 Q3,中间线是中位数。须线延伸至 Q1-1.5*IQR 到 Q3+1.5*IQR 范围内最远的数据点。超出须线的值为异常值。


使用示例

示例 1:基本箱线图

实例

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)

# 三组不同分布的数据
data = [
    np.random.normal(0, 1, 100),     # 标准正态
    np.random.normal(2, 1.5, 100),   # 均值=2, 标准差=1.5
    np.random.normal(-1, 0.5, 100),  # 均值=-1, 标准差=0.5
]

fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')

bp = ax.boxplot(data, labels=['Group A', 'Group B', 'Group C'],
                patch_artist=True)

# 自定义颜色
colors = ['#3498db', '#e74c3c', '#2ecc71']
for patch, color in zip(bp['boxes'], colors):
    patch.set_facecolor(color)

ax.set_title('Box Plot: Comparing Three Groups')
ax.set_ylabel('Value')
ax.grid(axis='y', alpha=0.3)
plt.show()

示例 2:缺口箱线图 + 显示均值

实例

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
data = [
    np.random.normal(0, 1, 100),
    np.random.normal(0, 1.2, 100),
    np.random.normal(0.3, 1, 100),
]

fig, ax = plt.subplots(figsize=(7, 5), layout='constrained')

bp = ax.boxplot(data,
                notch=True,            # 缺口(中位数置信区间)
                showmeans=True,        # 显示均值
                meanprops=dict(marker='D', markerfacecolor='red',
                               markersize=8),
                patch_artist=True,
                labels=['Control', 'Test A', 'Test B'])

colors = ['#bdc3c7', '#3498db', '#2ecc71']
for patch, color in zip(bp['boxes'], colors):
    patch.set_facecolor(color)

ax.set_title('Notched Box Plot with Means')
ax.set_ylabel('Measurement')
ax.grid(axis='y', alpha=0.3)
plt.show()

示例 3:水平箱线图

实例

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(42)
data = [np.random.exponential(scale=s, size=100) for s in [1, 2, 3, 4]]
labels = ['Scale=1', 'Scale=2', 'Scale=3', 'Scale=4']

fig, ax = plt.subplots(figsize=(8, 5), layout='constrained')

bp = ax.boxplot(data, labels=labels,
                vert=False,                # 水平方向
                patch_artist=True)

colors = ['#e74c3c', '#f39c12', '#2ecc71', '#3498db']
for patch, color in zip(bp['boxes'], colors):
    patch.set_facecolor(color)
    patch.set_alpha(0.7)

ax.set_title('Horizontal Box Plot')
ax.set_xlabel('Value')
ax.grid(axis='x', alpha=0.3)
plt.show()

常见问题

箱线图各部分的含义?

箱子:Q1(25%)到 Q3(75%)的 IQR(四分位距)。

中位线:箱子中间的线 = Q2(50%)。

须线:延伸到 Q1-1.5*IQR 和 Q3+1.5*IQR 内最远的数据点。

异常值:须线范围之外的独立数据点。


Matplotlib 参考文档 Matplotlib 参考文档