![在这里插入图片描述](https://img-blog.csdnimg.cn/20210503124920881.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODA3MDMy,size_16,color_FFFFFF,t_70)
1. 箱图含义
箱图是一中用于统计数据分布的统计图,也可以粗略地看出数据是否具有对称性,分布的分散程度等信息。箱图中的信息含义如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210121230720396.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODA3MDMy,size_16,color_FFFFFF,t_70)
最下方的横线表示最小值最上方的横线表示最大值黑色空心圆圈表示异常值黑色实心圆圈表示极端值箱子由下四分位数、中值以及上四分位数组成
异常值又称离群值,指大于1.5倍的四分位数间距的值。处于1.5倍~3倍四分位数间距的值用空心圆圈表示。极端值属于异常值中的一种。 极端值是指大于3倍的四分位数间距的值。
2.计算方法
首先找出一组数据的五个特征值,包括除异常值外的最小值(minimum)和最大值(maximum)、中位数(median)、两个四分位数(上四分位数Q1和下四分位Q3数); 中位数:将所有数值从小到大排列,如果是奇数个数值则取最中间一个值作为中位数,之后最中间的值在计算Q1和Q3时不再使用;偶数个数值则取最中间两个数的平均数作为中位数,这两个数在计算Q1和Q3时继续使用。 Q1:中位数将所有数据分成两部分,最小值到中位数的部分按取中位数的方法取中位数作为Q1。 Q3:同Q1取法,取中位数到最大值的中位数。 IQR(四分位数间距)=Q3-Q1。 所有不在(Q1-1.5IQR,Q3+1.5IQR)的区间内的数为离群值,剩下的值最大的为最大值,最小的为最小值。 特征值(从下到上):最小值、Q1、中位数、Q3、最大值 将五个数值描绘在一个图上,五个特征值在一个直线上,最小值和Q1连接起来,Q1、中位数、Q3分别作平行等长线段, 然后,连接两个四分位数构成箱子。 最后连接两个极值点与箱子,形成箱式图,然后点上离群值即可。
3.绘图
3.1 绘制单个箱图
import matplotlib.pyplot as plt
import numpy as np
#生成data数据
np.random.seed(100)
data = np.random.normal(size=(1000,),loc=0,scale=1)
# 绘图
plt.boxplot(data)
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012212473072.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODA3MDMy,size_16,color_FFFFFF,t_70)
3.2 绘制多个箱图
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(100)
data = np.random.normal(size=(1000,4),loc=0,scale=1)
plt.boxplot(data)
plt.show()
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210122124811996.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODA3MDMy,size_16,color_FFFFFF,t_70)
3.3实战
def plt_box_iamge(df):
"""
snrr的五个范围为[5,10)、[10,15)、[15,20)、[20,30)、[30-),按照五个snrr范围计算对应redchi的箱图
:param df:包含snrr以及redchi的csv数据(dataFrame)。
:return:
"""
# 根据snrr范围对redchi进行筛选。
df1 = df.loc[df['lam_snrr'] >= 5]
redchi_1 = df1.loc[df1['lam_snrr'] = 10]
redchi_2 = df2.loc[df2['lam_snrr'] = 15]
redchi_3 = df3.loc[df3['lam_snrr'] = 20]
redchi_4 = df4.loc[df4['lam_snrr'] = 30].redchi
# 绘图
ax = plt.subplot()
ax.boxplot([redchi_1, redchi_2, redchi_3, redchi_4, redchi_5])
# 设置轴坐标值刻度的标签
ax.set_xticklabels(['5 |