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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
python中管道用法入门实例
Jun 04 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
Feb 07 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
python opencv实现图片旋转矩形分割
Jul 26 Python
python读取word文档,插入mysql数据库的示例代码
Nov 07 Python
对python过滤器和lambda函数的用法详解
Jan 21 Python
python防止随意修改类属性的实现方法
Aug 21 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
利用python制作拼图小游戏的全过程
Dec 04 Python
基于python制作简易版学生信息管理系统
Apr 20 Python
详解Python函数print用法
Jun 18 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
解析php中获取系统信息的方法
2013/06/25 PHP
PHP弹出对话框技巧详细解读
2015/09/26 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
重定向实现代码
2006/11/20 Javascript
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
JS正则中的RegExp对象对象
2012/11/07 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
JavaScript数据结构与算法之栈与队列
2016/01/29 Javascript
jQuery基础知识点总结(DOM操作)
2016/06/01 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
mpvue 页面预加载新增preLoad生命周期的两种方式
2019/10/17 Javascript
NUXT SSR初级入门笔记(小结)
2019/12/16 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
python以环状形式组合排列图片并输出的方法
2015/03/17 Python
Python检测QQ在线状态的方法
2015/05/09 Python
django批量导入xml数据
2016/10/16 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
flask-restful使用总结
2018/12/04 Python
python读取xlsx的方法
2018/12/25 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
Python + Flask 实现简单的验证码系统
2019/10/01 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Python如何实现线程间通信
2020/07/30 Python
python不同版本的_new_不同点总结
2020/12/09 Python
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
清扬洗发水广告词
2014/03/14 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
优秀党员推荐材料
2014/12/18 职场文书
幼儿教师辞职信
2015/02/27 职场文书
五年级作文之成长
2019/09/16 职场文书
浅谈移动端中的视口(viewport)的具体使用
2021/04/13 HTML / CSS
JS中一些高效的魔法运算符总结
2021/05/06 Javascript