Matplotlib boxplot():绘制箱线图(附带实例)
相较散点图和折线图,柱状图、饼图、箱线图(箱型图)是另外 3 种数据分析常用的图形,主要用于分析数据内部的分布状态或分散状态。其中箱线图(箱型图)的主要作用是发现数据内部整体的分布分散情况,包括上下限、各分位数、异常值。
Matplotlib 中绘制箱线图的函数为 boxplot(),函数的格式为:
【实例】利用 plt.boxplot() 函数绘制各种类型的箱线图。

图 1 各种类型箱线图

图 2 一轴多个箱线图
Matplotlib 中绘制箱线图的函数为 boxplot(),函数的格式为:
plt.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=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)其中各个参数的含义如下表所示:
| 参数名称 | 描述 |
|---|---|
| x | 指定要绘制箱线图的数据。 |
| notch | 表示是否以凹口的形式展现箱线图,默认非凹口。 |
| sym | 指定异常点的形状,默认为 + 号显示。 |
| vert | 表示是否需要将箱线图垂直摆放,默认垂直摆放。 |
| whis | 指定上下须与上下四分位的距离,默认为 1.5 倍的四分位差。 |
| positions | 指定箱线图的位置,默认为 [0,1,2,…]。 |
| widths | 指定箱线图的宽度,默认为 0.5。 |
| patch_artist | 表示是否填充箱体的颜色。 |
| meanline | 表示是否用线的形式表示均值,默认用点来表示。 |
| showmeans | 表示是否显示均值,默认不显示。 |
| showcaps | 表示是否显示箱线图顶端和末端的两条线,默认显示。 |
| showbox | 表示是否显示箱线图的箱体,默认显示。 |
| showfliers | 表示是否显示异常值,默认显示。 |
| boxprops | 设置箱体的属性,如边框色、填充色等。 |
| labels | 为箱线图添加标签,类似于图例的作用。 |
| flierprops | 设置异常值的属性,如异常点的形状、大小、填充色等。 |
| medianprops | 设置中位数的属性,如线的类型、粗细等。 |
| meanprops | 设置均值的属性,如点的大小、颜色等。 |
| capprops | 设置箱线图顶端和末端线条的属性,如颜色、粗细等。 |
| whiskerprops | 设置须的属性,如颜色、粗细、线的类型等。 |
【实例】利用 plt.boxplot() 函数绘制各种类型的箱线图。
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
# 固定随机状态以实现再现性
np.random.seed(19680801)
# 给定数据
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
fig, axs = plt.subplots(2, 3)
# 基本绘图
axs[0, 0].boxplot(data)
axs[0, 0].set_title('基本绘图')
# 缺口图
axs[0, 1].boxplot(data, 1)
axs[0, 1].set_title('缺口图')
# 更改异常点符号
axs[0, 2].boxplot(data, 0, 'gD')
axs[0, 2].set_title('更改异常点符号')
# 不显示异常点
axs[1, 0].boxplot(data, 0, '')
axs[1, 0].set_title("不显示异常点")
# 水平箱线图
axs[1, 1].boxplot(data, 0, 'rs', 0)
axs[1, 1].set_title('水平箱线图')
# 改变 whisker 长度
axs[1, 2].boxplot(data, 'rs', 0, 0.75)
axs[1, 2].set_title('改变 whisker 长度')
fig.subplots_adjust(left=0.08, right=0.98, bottom=0.05, top=0.9, hspace=0.4, wspace=0.3)
# 创建更多数据
spread = np.random.rand(50) * 100
center = np.ones(25) * 40
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
d2 = np.concatenate((spread, center, flier_high, flier_low))
data.shape = (-1, 1)
d2.shape = (-1, 1)
# 制作二维数组仅在所有列长度相同时才有效。如果不是,则使用列表代替
data = [data, d2, d2[:, :2, 0]]
# 一个轴上多个箱线图
fig, ax = plt.subplots()
ax.boxplot(data)
plt.show()
运行程序,效果如下图所示:
图 1 各种类型箱线图

图 2 一轴多个箱线图
ICP备案:
公安联网备案: