箱线图法详解及matplotlib画箱线图以及boxplot参数详解

箱线图法是一种检测异常值的常用方法,由于其对数据分布没有任何假设,便使得它能够适用于几乎任何的异常值检测场景。

1977年,美国著名数学家JohnW. Tukey首先在他的著作《ExploratoryDataAnalysis》中介绍了箱形图。其相关定义如下:
(1) 四分位距(Inter quartile range,简记IQR)指的是下四分位数(Q1)和上四分位数(Q3)之间的距离。
(2) Inner feces指的是落在区间[Q1-1.5*IQR, Q3+1.5*IQR]内部的区域。
(3) Outer fences指的是落在区间[Q1-3*IQR, Q3+3*IQR]外部的区域。通常落在Inner fences和Ourer fences之间的点可能是异常点,落在Outer fences之外的极值点是异常值点。实际情况中异常值大多数都是少数,对上下四分位数的扰动比较小,因此这两个统计量十分健壮,此方法数据分布没有任何假设,因此适用性十分广泛,对极值点更加稳健。

箱线图原理还是挺简单的,想画出好看的箱线图还是需要费点心思的。
话不多说贴上代码:

# coding:utf-8
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False  # 正常显示负号

data = np.array([1,3,4,5,10,15,30])

fig = plt.figure(figsize=(5, 5), dpi=100)  # 调整画布大小,清晰度
fig = fig.add_subplot(111)  # 画布1
fig.boxplot((data, data), # 数据
            positions=[1, 4],  # 放置在x轴的位置 
            widths=1.5,  # 指定箱线图的宽度
            notch=False, # 是否是凹口的形式展现箱线图,默认非凹口
            vert=True, # 是否需要将箱线图垂直摆放,默认垂直摆放
            meanline=True,  # 是否用线的形式表示均值,默认用点来表示
            patch_artist=True,  # 是否填充箱体
            showmeans=True, # 是否显示均值
            showcaps=True, # 是否显示箱线图顶端和末端的两条线,默认显示
            showfliers=True,  # 是否显示异常值
            showbox=True, # 是否显示箱线图的箱体,默认显示
            meanprops = {"color": "black", "linewidth": 1.5}, # 设置平均线的属性,如线的类型、粗细等
            medianprops={"color": "red", "linewidth": 0.5},  # 设置中位数的属性,如线的类型、粗细等
            boxprops={"facecolor": "C0", "edgecolor": "black","linewidth": 0.5, "alpha":0.4},  # 设置箱体的属性,如边框色,填充色等
            whiskerprops={"color": "black", "linewidth": 1.5, "alpha":0.8}, # 设置须的属性,如颜色、粗细、线的类型等
            capprops={"color": "C0", "linewidth": 1.5}, # 设置箱线图顶端和末端线条的属性,如颜色、粗细等
            sym="+",  # 异常点的形状
                )

fig.set_xticks([1, 4])  # 对应坐标1 4的位置换成下面的标签
fig.set_xticklabels(["箱线图", "箱线图2"])
plt.show()

许多的参数都直接放在代码里面解释了,可以好好看看,调试调试应该就懂了。
配上运行图:
箱线图法详解及matplotlib画箱线图以及boxplot参数详解_第1张图片
这图不是很好看,但是调整那些参数可以让好看变成一种可能。

你可能感兴趣的:(可视化,箱线图,matplotlib,异常检测,可视化)