matplotlib之箱型图
文章目录
- 箱型图:
- boxplot函数
- 示例说明:
- 扩展应用
- 多组数据
- 水平显示
- 颜色填充
- 提琴图和箱型图
- 总结:
箱型图:
箱形图(Box plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因图形如箱子,且在上下四分位数之外常有线条像胡须延伸出去而得名。
对于离散变量在数据分析和数据展示的时候使用条形图和饼图完成数据的可视化工作,那么对于数值型变量,也有很多可视化的方法,例如箱线图、直方图、折线图、面积图、散点图等等。箱线图一般用来展现数据的分布(如上下四分位值、中位数等),同时,也可以用箱线图来反映数据的异常情况。
箱型图主要包含六个数据节点,将一组数据从大到小排列,分别计算出上边缘,上四分位数Q3,中位数,下四分位数Q1,下边缘,还有异常值。
- 下边缘值:数据集中不包括任何异常值的最低数据点
- 下四分位数Q1:是数据集下半部分的中位数。
- 中位数media:数据集中的中间值
- 上四分位数Q3:数据集上半部分的中位数
- 上边缘: 数据集中不包括任何异常值的最高数据点
- 四分位距(IQR) :上下四分位数之间的距离
箱型图通常包括两个部分,一个箱和一组须线。箱从Q1到Q3绘制,中间画一条水平线表示中位数。边缘(晶须)可以以多种方式定义。
在最直接的方法中,下边缘(晶须)的边界是数据集的最小值,上边缘(晶须)的边界是数据集的最大值。
边缘(晶须)边界的另一个流行选择是基于 1.5IQR 值。从上四分位数(Q3)上方,测量出IQR的1.5倍的距离为上边缘;从下四分位数(Q1)下方,测量出IQR的1.5倍距离为下边缘
在matplotlib中对于箱型图的绘制采用1.5倍IQR的方式进行绘制,如下图所示
Q1-1.5IQR Q1 median Q3 Q3+1.5IQR|-----:-----|o |--------| : |--------| o o|-----:-----|
异常值 <-----------> 异常值IQR
boxplot函数
- 函数定义:
matplotlib.pyplot.boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, usermedians=None, conf_intervals=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, manage_ticks=True, autorange=False, zorder=None, *, data=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:设置须的属性,如颜色、粗细、线的类型等;
boxplot的详细定义:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.boxplot.html
示例说明:
通过产生一组随机数进行示例说明
import matplotlib.pyplot as plt
import numpy as np
import matplotlib"""
设置随机数生成器的种子,使每次生成的随机数相同方便后续的复现
"""
np.random.seed(19900108)"""
生成随机数randomData,以及异常数据outlier_low,outlier_high
rand()返回的随机数是大于等于 0 及小于 1 的均匀分布随机实数
ones()返回为1的随机数
"""
randomData= np.random.rand(50) * 100
outlier_high = np.random.rand(10) * 100 + 100
outlier_low = np.random.rand(10) * -100"""
数据拼接,将上面产生的三组随机数进行拼接
"""
data = np.concatenate((randomData,flier_high, flier_low))fig,ax = plt.subplots(figsize=(10,10))
#创建箱型图
ax.boxplot(data)
plt.show()
运行结果:
扩展应用
多组数据
在实际的数据分析中需要进行多组数据的对比分析,在箱型图实例说明的基础上进一步说明多组数据箱型图的绘制
import matplotlib.pyplot as plt
import numpy as np
import matplotlib"""
font:设置中文
unicode_minus:显示负好
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号"""
设置随机数生成器的种子,使每次生成的随机数相同方便后续的复现
"""
np.random.seed(19900108)"""
生成三组随机数进行多组数据的展示
numpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量
"""
data_1 = np.random.normal(100, 10, 200)
data_2 = np.random.normal(70, 30, 200)
data_3 = np.random.normal(80, 20, 200)data_to_plot=[data_1,data_2,data_3]fig,ax = plt.subplots(figsize=(10,10))
#创建箱型图
ax.boxplot(data_to_plot)
plt.show()
运行结果:
水平显示
为了方便观察,在数据分析时常常需要将数据进行水平显示
import matplotlib.pyplot as plt
import numpy as np
import matplotlib"""
font:设置中文
unicode_minus:显示负好
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号"""
设置随机数生成器的种子,使每次生成的随机数相同方便后续的复现
"""
np.random.seed(19900108)"""
生成三组随机数进行多组数据的展示
numpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量
"""
data_1 = np.random.normal(100, 10, 200)
data_2 = np.random.normal(70, 30, 200)
data_3 = np.random.normal(80, 20, 200)data_to_plot=[data_1,data_2,data_3]fig,ax = plt.subplots(figsize=(10,10))
#创建箱型图
ax.boxplot(data_to_plot,vert=False)
plt.title("水平箱型图")
plt.show()
颜色填充
在进行填充色彩的时候需要将patch_artist(是否填充箱体的颜色)设置为true,对于颜色填充可以通过下面两种方式进行处理:
- 指定箱型图的填充颜色,通过props来设置各种填充的颜色(如red、green、blue、pink等构造字典数据结构)
https://matplotlib.org/stable/gallery/color/named_colors.html 参照各种颜色 - 设置各个属性 pmatplotlib.pyplot.setp
import matplotlib.pyplot as plt
import numpy as np
import matplotlib"""
设置随机数生成器的种子,使每次生成的随机数相同方便后续的复现
"""
np.random.seed(19900108)"""
生成随机数data
numpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量
"""
data = np.random.normal(70, 40, 1000)fig,axes=plt.subplots(1,2,figsize=(16,9))
#方式一:通过设置props来填充各种颜色
"""
boxprops:设置箱体的属性,如边框色,填充色等;
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops:设置中位数的属性,如线的类型、粗细等;
meanprops:设置均值的属性,如点的大小、颜色等;
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;
"""
axes[0].boxplot(data, patch_artist=True,boxprops=dict(facecolor="green", color="red"),capprops=dict(color="blue"),whiskerprops=dict(color="teal"),flierprops=dict(color="black", markeredgecolor="black"),medianprops=dict(color="orange"),meanprops=dict(color="brown"),)#方式二:设置各个属性
"""
通过setp函数设置各个属性"""
box = axes[1].boxplot(data,patch_artist=True)
c={"boxes":"red","fliers":"black","medians":"orange","means":"brown","caps":"blue","whiskers":"teal"}
for item in ['boxes','fliers', 'medians','means', 'caps','whiskers',]:plt.setp(box[item], color=c[item])
plt.setp(box["boxes"], facecolor="green")
plt.setp(box["fliers"], markeredgecolor="black")
plt.show()
运行结果:
如上如所示两种方式都可以完成对于箱型图中颜色的填充操作。
提琴图和箱型图
提琴图 (Violin Plot) 用于显示数据分布及其概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。跟箱形图类似,但是在密度层面展示更好。
提琴图通过violinplot函数进行绘制,具体接口和官网介绍如下:
matplotlib.pyplot.violinplot(dataset, positions=None, vert=True, widths=0.5, showmeans=False, showextrema=True, showmedians=False, quantiles=None, points=100, bw_method=None, *, data=None)[source]
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.violinplot.html
import matplotlib.pyplot as plt
import numpy as np
import matplotlib"""
font:设置中文
unicode_minus:显示负号
"""
matplotlib.rcParams['font.family'] = ['Heiti TC']
matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
"""
设置随机数生成器的种子,使每次生成的随机数相同方便后续的复现
"""
np.random.seed(19900108)"""
生成随机数data
numpy.random.normal()函数来创建一组基于正态分布的随机数据,该函数有三个参数,分别是正态分布的平均值、标准差以及期望值的数量
"""
data = np.random.normal(70, 40, 1000)fig,axes=plt.subplots(1,2,figsize=(16,9))
#绘制箱型图
axes[0].boxplot(data)
axes[0].set_title("箱型图")
#绘制小提琴图
axes[1].violinplot(data,showmeans=True, showmedians=True)
axes[1].set_title("小提琴图")
plt.show()
运行结果:
总结:
在实际数据分析的过程中,箱型图带来的价值和意义
- 直观明了地识别数据批中的异常值。
数据中的异常值值得关注,不加剔除地把异常值包括进数据的计算分析过程中,对结果会带来不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问题进而改进决策的契机。 - 对于多维度的数据对比和分析。
不同维度的数据箱形图并行排列,不同维度数据的中位数、尾长、异常值、分布区间等形状信息便一目了然。 - 判断数据批的偏态和尾重。
对比标准正态分布、不同自由度的t分布和非对称分布数据的箱形图的特征,可以发现:对于标准正态分布的大样本,只有 0.7%的值是异常值,中位数位于上下四分位数的中央,箱形图的方盒关于中位线对称。选取不同自由度的t分布的大样本,代表对称重尾分布,当t分布的自由度越小,尾部越重,就有越大的概率观察到异常值。
通过箱形图,可以查看有关数据的基本分布信息,例如中位数,平均值,四分位数,以及最大值和最小值,但不会显示数据在整个范围内的分布,因此可以通过提琴图可以进一步的了解数据的分布状态以及概率密度。在实际的数据分析中可以结合箱型图和提琴图进行数据的分析。
matplotlib之箱型图相关推荐
- matplotlib柱状图、面积图、直方图、散点图、极坐标图、箱型图
一.柱状图 1.通过obj.plot() 柱状图用bar表示,可通过obj.plot(kind='bar')或者obj.plot.bar()生成:在柱状图中添加参数stacked=True,会形成堆叠 ...
- Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解
目录 基本用法 水平箱线图,显示均值 改变箱线图的形状(箱体的形状notch.异常值的形状sym) 改变箱线图的颜色(箱体边框的颜色.箱体填充色) 相较散点图和折线图,柱状图.饼图.箱线图(箱型图)是 ...
- matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图 一.直方图 用10000个正态分布随机数画直方图 二.绘制饼图或者圆环图 圆环图 根据消费支出画圆环图 三.绘制散点图或气泡图 使 ...
- python堆叠面积图_06. Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图...
1.基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主 同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsi ...
- Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图
目录 Matplotlib 2 |折线图| 柱状图| 堆叠图| 面积图| 填图| 饼图| 直方图| 散点图| 极坐标| 图箱型图 1.基本图表绘制 plt.plot() ts.plot() 由Seri ...
- 使用matplotlib绘制箱型图(箱线图)及简要分析
什么是箱型图 箱形图(Box-plot)又称为盒须图.盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在各种领域也经常被使用,常见于品质管理.(来源:百度百科[箱型图] ...
- Py之seaborn:数据可视化seaborn库(二)的组合图可视化之密度图/核密度图分布可视化、箱型图/散点图、小提琴图/散点图组合可视化的简介、使用方法之最强攻略(建议收藏)
Py之seaborn:数据可视化seaborn库(二)的组合图可视化之密度图/核密度图分布可视化.箱型图/散点图.小提琴图/散点图组合可视化的简介.使用方法之最强攻略(建议收藏) 目录 二.组合图可视 ...
- python绘图 条形图 直方图 饼图 箱型图 误差图 多图绘制 图表注释 三维图形
python的主要作图库是Matplotlib,该库提供了较为强大的作图能力. 如果您还未安装该库,请命令行运行"pip install matplotlib"安装一下,同时安装& ...
- 使用seaborn制图(箱型图)
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # 设置风格, ...
最新文章
- RHEL5.1安装VM TOOL及中文乱码终极解决方案
- Linux System Programming --Chapter Nine
- Spring Boot + Dataway :接口不用写,配配就出来?
- Important table for launchpad Designer and configuration
- hana数据库导入mysql_【SAP HANA】新建表以及操作数据(3)
- mysql 主键 最佳实践_设计套路:Mysql主键的选取
- 递推算法之滚动数组思维方式
- 服务器维修工单,运维工单--服务器申请工单
- 腾讯云推出首款自研H265硬件编码器瑶池,助力云游戏降低15%带宽
- SpringSecurity框架【详解】
- Android 选项菜单
- 文本生成系列之transformer结构扩展(三)
- 使用SDE的一点体会
- Javascript特效:轮播图
- Keras中CNN联合LSTM进行分类
- 三菱modbusRTU通讯实例_PLC编程 | 用三菱PLC控制机械手实例
- STM32F103实现LED呼吸灯程序
- java jsp中文乱码怎么解决_JSP中文乱码问题全解决方案
- Spring Data ElasticSearch - 分布式搜索和数据分析引擎 相关操作实战流程
- Kademlia详解 (转贴NeoRagex2002)
热门文章
- illustrator cs5 for mac 官方简体中文版 破解
- Android部分手机在使用EditText进行自动联想时会先输入拼音的问题
- 复制带随机指针的链表<难度系数⭐⭐>
- cf1239C (接热水)
- 遥感专业学习神经网络与深度学习过程中的想法
- 【论文阅读】Rethinking Spatiotemporal Feature Learning For Video Understanding
- HG30-3B型多功能校准仪
- 【linux基础-1】linux下的快捷键-根目录结构-用户目录
- 剪刀石头布二(ptwo) 时限:1s 空间:256m
- unwinding now org.apache.cxf.interceptor.Fault: Marshalling Error: null