箱型图解释和使用

箱形图可以用来观察数据整体的分布情况,利用中位数,25/%分位数,75/%分位数,上边界,下边界等统计量来来描述数据的整体分布情况。通过计算这些统计量,生成一个箱体图,箱体包含了大部分的正常数据,而在箱体上边界和下边界之外的,就是异常数据。其中上下边界的计算公式如下:UpperLimit=Q3+1.5IQR=75%分位数+(75%分位数-25%分位数)*1.5,LowerLimit=Q1-1.5IQR=25%分位数-(75%分位数-25%分位数)*1.5(将数据由小到大排序,处于中间的为中位数,即50%分位数,在75%位置的即为75%分位数或四分之三分位数——Q3,在25%位置的即为25%分位数或四分之一分位数——Q1)
在这里插入图片描述

参数说明:

  1. Q1表示下四分位数,即25%分位数;Q3为上四分位数,即75%分位数;IQR表示上下四分位差,系数1.5是一种经过大量分析和经验积累起来的标准,一般情况下不做调整。2. 分位数的参数可根据具体预警结果调整:25%和75%,是比较灵敏的条件,在这种条件下,多达25%的数据可以变得任意远而不会很大地扰动四分位。具体业务中可结合拟合结果自行调整为其他分位。

作者:星星贝
链接:https://www.zhihu.com/question/36172806/answer/76299923
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

matplotlib中的demo
https://matplotlib.org/3.1.1/gallery/pyplots/boxplot_demo_pyplot.html#sphx-glr-gallery-pyplots-boxplot-demo-pyplot-py

语句:boxplot

import numpy as np
import matplotlib.pyplot as plt

# Fixing random state for reproducibility
np.random.seed(19680801)

# fake up some data
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))
fig1, ax1 = plt.subplots()
ax1.set_title('Basic Plot')
ax1.boxplot(data)

在这里插入图片描述
参数的含义,坐标的设置,多图表示等等
https://zhuanlan.zhihu.com/p/38199913
指定在x轴上添加网格线(ax.xaxis.grid(True)),或者在y轴上添加网格线(ax.yaxis.grid(True))
指定 x 轴和 y 轴上的刻度个数(ax.set_xticks([1,2,3]),ax.set_yticks([1,2,3,4,5,6,7,8]))
设置 x 轴名称(ax.set_xlabel(“xlabel”))
设置 y 轴名称(ax.set_xlabel(“ylabel”))

import matplotlib.pyplot as plt
import numpy as np

all_data=[np.random.normal(0,std,100) for std in range(1,4)]

#首先有图(fig),然后有轴(ax)
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(9,4))


bplot1=axes[0].boxplot(all_data,
                       vert=True,
                       patch_artist=True)


bplot2 = axes[1].boxplot(all_data,
                         notch=True,
                         vert=True, 
                         patch_artist=True)



#颜色填充
colors = ['pink', 'lightblue', 'lightgreen']
for bplot in (bplot1, bplot2):
    for patch, color in zip(bplot['boxes'], colors):
        patch.set_facecolor(color)

# 加水平网格线
for ax in axes:
    ax.yaxis.grid(True) #在y轴上添加网格线
    ax.set_xticks([y+1 for y in range(len(all_data))] ) #指定x轴的轴刻度个数
    ## [y+1 for y in range(len(all_data))]运行结果是[1,2,3]
    ax.set_xlabel('xlabel') #设置x轴名称
    ax.set_ylabel('ylabel') #设置y轴名称

# 添加刻度
# 添加刻度名称,我们需要使用 plt.setp() 函数:

# 加刻度名称
plt.setp(axes, xticks=[1,2,3],
         xticklabels=['x1', 'x2', 'x3'])
# 我们的刻度数是哪些,以及我们想要它添加的刻度标签是什么。
        
plt.show()

在这里插入图片描述

import matplotlib.pyplot as plt
import numpy as np

# 添加标题
# 使用 ax.set_title 来设置单个图形主标题,用 fig.suptitle 来设置整张画板的标题:

data=np.random.binomial(n=10,p=0.76,size=(10,3))
labels=list("ABC")
fig,ax=plt.subplots(figsize=(9,6))
ax.boxplot(data,labels=labels,patch_artist=True)
plt.rcParams['font.sans-serif']=['SimHei'] #正确显示中文
plt.rcParams['axes.unicode_minus']=False #用来正确显示负号
ax.set_title("设置 fontsize=15 的标题",fontsize=15) #设置字体大小为15号字体
fig.suptitle("Boxplot Examples",fontsize=24)
plt.show()

# 想必细心的朋友已经发现了我在代码里偷偷加了两行设置字体的代码
# 这两行代码专为防止出现中文乱码而生!

# plt.rcParams['font.sans-serif']=['SimHei'] # 用来正确显示中文
# plt.rcParams['axes.unicode_minus']=False # 用来正确显示负号

在这里插入图片描述
把中值数用线连接起来

fig,axes=plt.subplots(nrows=3,ncols=1,figsize=(10,10))

bp1=axes[0].boxplot(sdr_all.T,showfliers=False)
bp2=axes[1].boxplot(sir_all.T,showfliers=False)
bp3=axes[2].boxplot(sar_all.T,showfliers=False)
# 画中值数连接线,需要np.arange(1,19),从1开始。否则,箱型图和线图位置总差一个
#也就是说箱型图从1开始,线图从0开始
axes[0].plot(np.arange(1,19),sdr_md)
axes[1].plot(np.arange(1,19),sir_md)
axes[2].plot(np.arange(1,19),sar_md)

axes[0].set_ylabel('SDR/dB') #设置y轴名称
axes[1].set_ylabel('SIR/dB') #设置y轴名称
axes[2].set_ylabel('SAR/dB') #设置y轴名称

plt.rcParams['font.sans-serif']=['SimHei'] #正确显示中文
axes[2].set_xlabel('两声源角度差/度') #设置x轴名称
plt.setp(axes, xticklabels=np.arange(10,190,10))
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值