Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解


Posted in Python onAugust 14, 2022

1. 箱图含义

箱图是一中用于统计数据分布的统计图,也可以粗略地看出数据是否具有对称性,分布的分散程度等信息。箱图中的信息含义如下:

Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解

最下方的横线表示最小值最上方的横线表示最大值黑色空心圆圈表示异常值黑色实心圆圈表示极端值箱子由下四分位数、中值以及上四分位数组成

异常值又称离群值,指大于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()

Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解

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()

Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解

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

    df2 = df.loc[df['lam_snrr'] >= 10]
    redchi_2 = df2.loc[df2['lam_snrr'] < 15].redchi

    df3 = df.loc[df['lam_snrr'] >= 15]
    redchi_3 = df3.loc[df3['lam_snrr'] < 20].redchi

    df4 = df.loc[df['lam_snrr'] >= 20]
    redchi_4 = df4.loc[df4['lam_snrr'] < 30].redchi

    redchi_5 = df.loc[df['lam_snrr'] >= 30].redchi
    # 绘图
    ax = plt.subplot()
    ax.boxplot([redchi_1, redchi_2, redchi_3, redchi_4, redchi_5])
    # 设置轴坐标值刻度的标签
    ax.set_xticklabels(['5<=snrr<10', '10<=snrr<15', '15<=snrr<20', '20<=snrr<30', '30<=snrr'], fontsize=8)
	#	保存图片 
    plt.savefig('./images/box.jpg')
    plt.show()

if __name__ == '__main__':
    df = pd.read_csv('./inputfile/lamost6w_new.csv')
    df_sc = screening(df)  # 筛选数据 (lamost数据应该在正常值范围内,不然因为数值差过大会导致绘制不出图像!)
    plt_box_iamge(df_sc)

Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解

3.3 参数详解

plt.boxplot(x,                      # x:指定要绘制箱图的数据
            notch=None,           # notch:是否是凹口的形式展现箱线图,默认非凹口
            sym=None,              # sym:指定异常点的形状,默认为+号显示
            vert=None,              # vert:是否需要将箱线图垂直摆放,默认垂直摆放
            whis=None,             # whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差
            positions=None,   # positions:指定箱线图的位置,默认为[0,1,2…]
            widths=None,         # widths:指定箱线图的宽度,默认为0.5
            patch_artist=None,        # patch_artist:是否填充箱体的颜色
            meanline=None,             # meanline:是否用线的形式表示均值,默认用点来表示
            showmeans=None,       # showmeans:是否显示均值,默认不显示
            showcaps=None,           # showcaps:是否显示箱线图顶端和末端的两条线,默认显示
            showbox=None,             # showbox:是否显示箱线图的箱体,默认显示
            showfliers=None,          # showfliers:是否显示异常值,默认显示
            boxprops=None,           # boxprops:设置箱体的属性,如边框色,填充色等
            labels=None,                  # labels:为箱线图添加标签,类似于图例的作用
            flierprops=None,          # filerprops:设置异常值的属性,如异常点的形状、大小、填充色等
            medianprops=None,   # medianprops:设置中位数的属性,如线的类型、粗细等
            meanprops=None,       # meanprops:设置均值的属性,如点的大小、颜色等
            capprops=None,           # capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等
            whiskerprops=None)   # whiskerprops:设置须的属性,如颜色、粗细、线的类型等

3.4 常用方法

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(100)
data = np.random.normal(size=(1000,4),loc=0,scale=1)

ax = plt.subplot()
ax.boxplot(data)                                 # 绘图
ax.set_xlim([0,5])                               # 设置x轴值的范围  rotation=30
# ax.set_xticks()  							      # 自定义x轴的值
ax.set_xlabel("xlabel")                  # 设置x轴的标签
ax.set_xticklabels(['A','B','C','D'],  rotation=30,fontsize=10)   # 设置x轴坐标值的标签 旋转角度 字体大小
ax.set_title("xcy")       					  # 设置图像标题
ax.legend(labels= ['A','B','C','D'],loc='best',)  # 增加图例
ax.text(x=0.2 , y=3.5 , s="test" ,fontsize=12)   # 增加注

plt.show()

参考:
百度百科
matplotlib官方文档

总结 

到此这篇关于Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解的文章就介绍到这了,更多相关plt.boxplot()函数绘制箱图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中实现对list做减法操作介绍
Jan 09 Python
谈谈如何手动释放Python的内存
Dec 17 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
对python模块中多个类的用法详解
Jan 10 Python
详解PyCharm+QTDesigner+PyUIC使用教程
Jun 13 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Python3 无重复字符的最长子串的实现
Oct 08 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
python实现人像动漫化的示例代码
May 17 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
pandas处理csv文件的方法步骤
Oct 16 Python
基于Python实现nc批量转tif格式
Aug 14 #Python
LyScript实现绕过反调试保护的示例详解
Aug 14 #Python
LeetCode189轮转数组python示例
Aug 05 #Python
python语言中pandas字符串分割str.split()函数
Aug 05 #Python
python绘制云雨图raincloud plot
Aug 05 #Python
python计算列表元素与乘积详情
Aug 05 #Python
Pygame游戏开发之太空射击实战敌人精灵篇
Aug 05 #Python
You might like
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
Prototype Object对象 学习
2009/07/12 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
用Jquery选择器计算table中的某一列某一行的合计
2014/08/13 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
基于jQuery通过jQuery.form.js插件使用ajax提交form表单
2015/08/17 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
js仿微信公众平台打标签功能
2017/04/08 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
bootstrap实现嵌套模态框的实例代码
2020/01/10 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
Python的多维空数组赋值方法
2018/04/13 Python
python list元素为tuple时的排序方法
2018/04/18 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
html5 canvas合成海报所遇问题及解决方案总结
2017/08/03 HTML / CSS
创伤外科专业推荐信范文
2013/11/19 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
装修协议书范本
2014/04/21 职场文书
个人收入证明模板
2014/09/18 职场文书
2015年母亲节寄语
2015/03/23 职场文书
导游词之山东八仙过海景区
2019/11/11 职场文书