Python Matplotlib绘制箱线图boxplot()函数详解
作者:上课不要睡觉了 发布时间:2021-03-09 11:16:07
箱线图
箱线图一般用来展现数据的分布,如上下四分位值、中位数等,也可以直观地展示异常点。Matplotlib提供了boxplot()
函数绘制箱线图。
import matplotlib.pyplot as plt
_ = plt.boxplot(range(10)) # 10个数,0-9
plt.show()
箱线图虽然看起来简单,但包含的数据信息非常丰富。在上图中,橙色的线条表示中位数,中间条形的上下边界分别对应上四分位数(75%的数据都小于该值)与下四位分数(25%的数据小于该值),从条形延伸出两条线段,两条线段的终点表示数据的最大值和最小值。
import numpy as np
print(np.median(np.arange(10))) # 中位数
print(np.percentile(np.arange(10), 25)) # 下4分位数,也叫第1分位数
print(np.percentile(np.arange(10), 75)) # 上4分位数,也叫第3分位数
4.5
2.25
6.75
Process finished with exit code 0
boxplot()函数还提供了丰富的自定义选项
plt.boxplot(x, notch=None, sym=None, vert=None,
whis=None, positions=None, widths=None,
patch_artist=None, meanline=None, showmeans=None,
showcaps=None, showbox=None, showfliers=None,
boxprops=None, labels=None, flierprops=None,
medianprops=None, meanprops=None,
capprops=None, whiskerprops=None)
● x :绘图数据。
● notch :是否以凹口的形式展现箱线图,默认非凹口。
● sym:指定异常点的形状,默认为+号显示。
● vert :是否需要将箱线图垂直放,默认垂直放。
● whis :指定上下须与上下四分位的距离,默认为1.5倍的四分位差。
● positions :指定箱线图位置,默认为[0,1,2.…]。
● widths :指定箱线图宽度,默认为0.5。
● patch _ artist :是否填充箱体的颜色。
● meanline :是否用线的形式表示均值,默认用点表示。
● showmeans :是否显示均值,默认不显示。
● showcaps :是否显示箱线图顶端和末端两条线,默认显示。
● showbox :是否显示箱线图的箱体,默认显示。
● showfliers :是否显示异常值,默认显示。
● boxprops :设置箱体的属性,如边框色、填充色等。
● labels :为箱线图添加标签,类似于图例的作用。
● filerprops :设置异常值的属性,如异常点的形状、大小、填充色等。
● medianprops :设置中位数的属性,如线的类型、粗细等。
● meanprops :设置均值的属性,如点的大小、颜色等。
● capprops :设置箱线图顶端和末端线条的属性,如颜色、粗细等。
● whiskerprops :设置须的属性,如颜色、粗细、线的类型等。
箱线图通常用在多组数据比较时
下面代码展示了3组简单数据的箱线图,添加凹口、均值点、颜色以及每组的标签。
import matplotlib.pyplot as plt
a = plt.boxplot([range(10), range(20), range(30)],
patch_artist=True,
boxprops={'color': 'blue'},
notch=True, showmeans=True,
labels=['A', 'B', 'C'])
plt.show()
补充:plt.boxplot()函数绘制箱图、常用方法
实战
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)
常用方法
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()
总结
来源:https://blog.csdn.net/XQC_KKK/article/details/123552522


猜你喜欢
- 从小的方面讲,帮助一般是指:手册、说明书、文档、FAQ 等等。从大的方面讲,可以是交互过程中的提示、指引、演示等信息,帮助无处不在!这一切,
- 这句话后面的1200是什么单位来的啊?delete from online where datediff(""s&quo
- 简介特点请求你所要的数据,不多不少获取多个资源,只用一个请求描述所有的可能,类型系统几乎所有语言支持文档Graphene-PythonGra
- mysql 8.0.28版本安装配置方法图文教程,供大家参考,具体内容如下从 Mysql 官网下载 mysql 或直接点击这里下载下载完成后
- 代码:hello.py#!/usr/bin/python# coding: utf-8# hello.pydef application(e
- tags: django中对条件查询一些cms项目都会使用到多条件查询,我们后端如何处理请求的条件呢?满足一个条件满足两个条件满足多个条件…
- 食用前准备python 3.10.10 #二维码的库ddddocr 需要库import timeimport ddddocr源码# impo
- 蜜蜂可以看到紫外线,人则看不到;蛇和蚊子可以看到红外线,人则看不到。火狐(Firefox)浏览器也可以看到人们看不到的东西,但迄今为止,这些
- 今天来说说编程语言中的动态类型语言与鸭子类型。动态语言 * 对动态语言的定义:动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数
- 昨天发现程序中数据分析的结果不对,重新进行分析后,原数据仍在,有值的字段被累计。心说,不对啊,是重新生成记录后才分析的啊。难道忘了DELET
- 将无权点文件转化成邻接矩阵目前点文件是两列Excel代码,在进行复杂网络运算时需要转化成邻接矩阵。我在网上找了一个代码,稍微修改了下,亲测可
- 在html 5增加了新元素header、footer,测试过发现IE不能解析html 5新增的元素。代码如下:<!DOCTYPE&nb
- 今天写了个爬虫,在抓取数据的时候遇到一个问题,我觉得如果不注意,这个问题很容易被忽略,所以特意在博客记录下:问题描述:比如,我在提取信息时,
- 前言ctypes是Python的外部函数库。它提供了C兼容的数据类型,并且允许调用动态链接库/共享库中的函数。它可以将这些库包装起来给Pyt
- 本文主要讲解如何使用python绘制三维的柱形图,如下图源代码如下:import numpy as npimport matplotlib.
- 当用户首次安装MySQL数据库时,总是想修改root的初始化密码,我也是,每次都百度一下,下面主要给出一些操作数据库的常用SQL和一些基本概
- 本文实例讲述了GO语言实现简单TCP服务的方法。分享给大家供大家参考。具体实现方法如下:package mainimport ("
- 一个Link被点击之后有可能是打开新窗口,也有可能是刷新当前窗口,这两种打开方式一直并存于互联网中。 作为测试对象,于25日将打开方式改为‘
- MySQL分区方便了我们的使用,但是MySQL分区究竟能做些什么,MySQL分区有没有什么限制呢?阅读下文,您就能找到答案。MySQL分区能
- Golang标准库binarybinary包实现了数字和字节序列之间的简单转换。1、ByteOrderByteOrder指定了如何将一个字节