1.箱线图
1. 什么是箱线图?
箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。
可显示一组数据的最大值、最小值、中位数、以及四分位数 可以用来反映一组或多组连续型定量数据分布的中心位置和散布范围
四分位数(4-分位数)是3个数据点,把数据分布均匀划分成4部分,每部分包含25%的数据。Q1(称为下四分位数)和Q3(称为上四分位数)分别为数据排序后位于25%和75%位置上的值,Q2是中位数。
IQR=Q3-Q1
上限=Q3+1.5IQR 下限=Q1-1.5IQR
绘制步骤:
(1)计算上四分位数(Q3),中位数,下四分位数(Q1)
(2)计算上四分位数和下四分位数之间的差值,即四分位数差(IQR,interquartile range)Q3-Q1
(3)绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线。
(4)大于上四分位数1.5倍四分位数差的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值(outliers),即Q3+1.5IQR(四分位间距)和Q1-1.5IQR处画两条与中位线一样的线段,这两条线段为异常值截断点,称其为内限;
(5)异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线图的触须。 即在Q3+3IQR和Q1-3IQR处画两条线段,称其为外限。
(6)极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍-3倍四分位数差之间的异常值,用空心点表示。
(7)从矩形盒两端边向外各画一条线段直到不是异常值的最远点,表示该批数据正常值的分布区间。
(8)用“〇”标出温和的异常值,用“*”标出极端的异常值。相同值的数据点并列标出在同一数据线位置上,不同值的数据点标在不同数据线位置上。
(9)为箱线图添加名称,数轴等
参数详解: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:bool类型参数,是否填充箱体的颜色;默认为False
- meanline:bool类型参数,是否用线的形式表示均值,默认为False
- showmeans:bool类型参数,是否显示均值,默认为False
- showcaps:bool类型参数,是否显示箱线图顶端和末端的两条线(即上下须),默认为True
- showbox:bool类型参数,是否显示箱线图的箱体,默认为True
- showfliers:是否显示异常值,默认为True
- boxprops:设置箱体的属性,如边框色,填充色等
- labels:为箱线图添加标签,类似于图例的作用
- filerprops:设置异常值的属性,如异常点的形状、大小、填充色等
- medianprops:设置中位数的属性,如线的类型、粗细等
- meanprops:设置均值的属性,如点的大小、颜色等
- capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等
- whiskerprops:设置须的属性,如颜色、粗细、线的类型等
返回值:result
字典将箱形图的每个组成部分映射到matplotlib.lines.Line2D创建的实例列表。该词典具有以下键(假定垂直框图):
- boxes:箱图的主体,显示四分位数和中位数的置信区间(如果启用)。
- medians:每个框的中间的水平线。
- whiskers:垂直线延伸到最极端的非异常数据点。
- caps:晶须末端的水平线。
- fliers:表示超出晶须(传单)的数据的点。
- means:表示均值的点或线。
实例:
绘制箱线图:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
dp = pd.read_csv('D:Distribution_Data.csv')
sns.boxplot(x=dp['class'],y=dp['value'])
# 添加扰动点
# add stripplot
#ax = sns.stripplot(x=dp['class'], y=dp['value'], data=dp, color="yellow", jitter=0.2, size=4)
# add title
plt.title("Distribution_Data")
plt.show()
参考:https://blog.csdn.net/kevinelstri/article/details/52937236
https://blog.csdn.net/ZengHaihong/article/details/53291372
https://blog.csdn.net/roguesir/article/details/78249864
http://blog.sina.com.cn/s/blog_e126b6140101kvq2.html



