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 一轴多个箱线图