Matplotlib boxplot()创建箱型图(非常详细)
箱形图也称为箱线图或盒须图,主要用于展示数据的分布情况并找出异常数据。
箱形图是根据以下几个统计值绘制出来的:上限(最大值)、下限(最小值)、中位数、上四分位数、下四分位数和异常值。除了异常值之外,其他 5 个值将箱形图分割为 4 个部分,如下图所示:

图 1 箱形图的结构
如需创建箱形图,可以使用 pyplot 模块中的 boxplot() 函数或 Axes 对象的 boxplot() 方法。
下面的代码是使用 Axes 对象的 boxplot() 方法创建下图所示的箱形图:

图 2 为一组数据创建箱形图
下面的代码是创建下图所示的箱形图,为每组数据都创建一个箱子:

图 3 为多组数据创建箱形图

图 4 带有异常值的箱形图
如果不想在箱形图中显示异常值,则可以在 boxplot() 函数或 boxplot() 方法中指定 showfliers 参数,并将其值设置为 False,将隐藏箱形图中的所有异常值。
下面的代码将隐藏上面示例中的异常值:

图 5 隐藏异常值
下面的代码是创建下图所示的箱形图,将箱子水平放置。

图 6 将箱子水平放置
更改异常点的样式与设置散点图中点的样式所使用的参数相同,使用 marker 参数设置异常点的形状,使用 markersize 参数设置异常点的大小,使用 markerfacecolor 参数设置异常点的颜色。
不过在箱形图中需要将这些参数以字典的形式设置为 flierprops 参数的值,flierprops 是 boxplot() 函数或 boxplot() 方法的一个关键字参数。
下面的代码将异常点的形状改为三角形,并将其放大显示:

图 7 设置异常点的样式
与设置异常点样式的 flierprops 参数的用法类似,使用 boxplot() 函数或 boxplot() 方法的 boxprops 参数,可以设置箱子的样式,该参数的值也是一个字典对象。为了使该参数生效,必须指定另一个参数 patch_artist,并将该参数的值设置为 True。
下面的代码分别设置箱子的内部填充色和外边框颜色:

图 8 设置箱子的样式
创建的箱形图的 x 轴的标签默认为 1、2 之类的数字,可以使用 labels 参数自定义标签的内容。
下面的代码将两个箱子下方的数字 1 和 2 改为“第一组”和“第二组”:

图 9 自定义标签
箱形图是根据以下几个统计值绘制出来的:上限(最大值)、下限(最小值)、中位数、上四分位数、下四分位数和异常值。除了异常值之外,其他 5 个值将箱形图分割为 4 个部分,如下图所示:

图 1 箱形图的结构
如需创建箱形图,可以使用 pyplot 模块中的 boxplot() 函数或 Axes 对象的 boxplot() 方法。
为一组数据创建箱形图
boxplot() 函数或 boxplot() 方法的第一个参数 x 表示要创建箱形图的数据,创建箱形图时必须指定该参数,其他参数都是关键字参数。下面的代码是使用 Axes 对象的 boxplot() 方法创建下图所示的箱形图:

图 2 为一组数据创建箱形图
import matplotlib.pyplot as plt x = [5, 7, 3, 9, 11] fig, ax = plt.subplots() ax.boxplot(x) plt.show()从图 2 中可以看出,本例数据的上限是 9,下限是 1,中位数是 5,上四分位数是 7,下四分位数是 3。
为多组数据创建箱形图
使用 boxplot() 函数或 boxplot() 方法也可以为多组数据创建箱形图,此时需要将第一个参数 x 设置为一个嵌套列表,其中的每个子列表在箱形图中都有一个对应的箱子。下面的代码是创建下图所示的箱形图,为每组数据都创建一个箱子:

图 3 为多组数据创建箱形图
import matplotlib.pyplot as plt x1 = [5, 7, 3, 9, 1, 6] x2 = [10, 15, 16, 12, 20, 13] fig, ax = plt.subplots() ax.boxplot([x1, x2]) plt.show()
隐藏异常值
异常数据在箱形图中显示为圆圈。下面的代码是创建带有一个异常值的箱形图,右侧箱子上方的圆圈就是异常值,其值为 30,它是变量 x2 引用的列表中 30 这个数据:import matplotlib.pyplot as plt x1 = [5, 7, 3, 9, 1, 6] x2 = [10, 15, 16, 12, 20, 30] fig, ax = plt.subplots() ax.boxplot([x1, x2]) plt.show()如下图所示:

图 4 带有异常值的箱形图
如果不想在箱形图中显示异常值,则可以在 boxplot() 函数或 boxplot() 方法中指定 showfliers 参数,并将其值设置为 False,将隐藏箱形图中的所有异常值。
下面的代码将隐藏上面示例中的异常值:
import matplotlib.pyplot as plt x1 = [5, 7, 3, 9, 1, 6] x2 = [10, 15, 16, 12, 20, 30] fig, ax = plt.subplots() ax.boxplot([x1, x2], showfliers=False) plt.show()如下图所示:

图 5 隐藏异常值
创建水平方向的箱形图
箱形图中的箱子默认都是垂直显示的,如需将它们改为水平方向,可以在 boxplot() 函数或 boxplot() 方法中指定 vert 参数,并将其值设置为 False。下面的代码是创建下图所示的箱形图,将箱子水平放置。

图 6 将箱子水平放置
import matplotlib.pyplot as plt x1 = [5, 7, 3, 9, 1, 6] fig, ax = plt.subplots() ax.boxplot(x1, vert=False) plt.show()
更改箱形图的样式
通过设置箱形图中的箱子和异常点的样式,以及箱形图的标签,可以更改箱形图的外观。更改异常点的样式与设置散点图中点的样式所使用的参数相同,使用 marker 参数设置异常点的形状,使用 markersize 参数设置异常点的大小,使用 markerfacecolor 参数设置异常点的颜色。
不过在箱形图中需要将这些参数以字典的形式设置为 flierprops 参数的值,flierprops 是 boxplot() 函数或 boxplot() 方法的一个关键字参数。
下面的代码将异常点的形状改为三角形,并将其放大显示:
import matplotlib.pyplot as plt x1 = [5, 7, 3, 9, 1, 6] x2 = [10, 15, 16, 12, 20, 30] fliersty = dict(marker='^', markersize=12) fig, ax = plt.subplots() ax.boxplot([x1, x2], flierprops=fliersty) plt.show()如下图所示:

图 7 设置异常点的样式
与设置异常点样式的 flierprops 参数的用法类似,使用 boxplot() 函数或 boxplot() 方法的 boxprops 参数,可以设置箱子的样式,该参数的值也是一个字典对象。为了使该参数生效,必须指定另一个参数 patch_artist,并将该参数的值设置为 True。
下面的代码分别设置箱子的内部填充色和外边框颜色:
import matplotlib.pyplot as plt x1 = [5, 7, 3, 9, 1, 6] x2 = [10, 15, 16, 12, 20, 30] boxsty = dict(facecolor='b', edgecolor='r') fig, ax = plt.subplots() ax.boxplot([x1, x2], patch_artist=True, boxprops=boxsty) plt.show()如下图所示:

图 8 设置箱子的样式
创建的箱形图的 x 轴的标签默认为 1、2 之类的数字,可以使用 labels 参数自定义标签的内容。
下面的代码将两个箱子下方的数字 1 和 2 改为“第一组”和“第二组”:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' x1 = [5, 7, 3, 9, 1, 6] x2 = [10, 15, 16, 12, 20, 13] fig, ax = plt.subplots() ax.boxplot([x1, x2], labels=['第一组', '第二组']) plt.show()如下图所示:

图 9 自定义标签