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编程实现语音控制电脑
Apr 01 Python
Django Admin实现上传图片校验功能
Mar 06 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
Sanic框架流式传输操作示例
Jul 18 Python
一篇文章搞懂Python的类与对象名称空间
Dec 10 Python
Python语言快速上手学习方法
Dec 14 Python
两个元祖T1=('a', 'b'),T2=('c', 'd')使用匿名函数将其转变成[{'a': 'c'},{'b': 'd'}]的几种方法
Mar 05 Python
Python数据类型之Dict字典实例详解
May 07 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
Python制作微信好友背景墙教程(附完整代码)
Jul 17 Python
django Model层常用验证器及自定义验证器详解
Jul 15 Python
Python return语句如何实现结果返回调用
Oct 15 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与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
基于MVC4+EasyUI的Web开发框架形成之旅之界面控件的使用
2015/12/16 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
详解JS模块导入导出
2017/12/20 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
原生js实现淘宝放大镜效果
2020/10/28 Javascript
Element中Slider滑块的具体使用
2020/07/29 Javascript
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
大专毕业生简历的自我评价
2013/10/20 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
考生诚信考试承诺书
2014/05/23 职场文书
人事任命书范文
2014/06/04 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
MySQL中B树索引和B+树索引的区别详解
2022/03/03 MySQL