箱线图通过数据的四分位数来展示数据的分布情况。例如:数据的中心位置,数据间的离散程度,是否有异常值等。

把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分别为数据的第25%,50%和75%的数字。

I-------------I o I-------------I o I-------------I o I-------------I

Q1                Q2                 Q3

(lower quartile)      (median)     (upper quartile)

四分位间距(Interquartile range(IQR))=上分位数(upper quartile) - 下分位数(lower quartile)

箱线图分为两部分,分别是箱(box)和须(whisker)。箱(box)用来表示从第一分位到第三分位的数据,须(whisker)用来表示数据的范围。

箱线图从上到下各横线分别表示:数据上限(通常是Q3+1.5*IQR),第三分位数(Q3),第二分位数(中位数),第一分位数(Q1),数据下限(通常是Q1-1.5*IQR)。有时还有一些圆点,位于数据上下限之外,表示异常值(outliers)。

(注:如果数据上下限特别大,那么whisker将显示数据的最大值和最小值。)

下图展示了箱线图各部分的含义。(摘自:https://datavizcatalogue.com/methods/box_plot.html)

下面利用Jake Vanderplas所著的《Python数据科学手册》一书中的数据,学习画图。

数据地址:https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv

这个数据文件在Matplotlib学习---用matplotlib画折线图(line chart)里已经用过,这里直接使用清洗过后的数据:

import pandas as pdfrom matplotlib import pyplot as plt
birth=pd.read_csv(r"https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv")
fig,ax=plt.subplots()birth=birth.iloc[:15067]
birth["day"]=birth["day"].astype(int)birth["date"]=pd.to_datetime({"year":birth["year"],"month":birth["month"],"day":birth["day"]},errors='coerce')
birth=birth[birth["date"].notnull()]

这是清洗过后的数据的前5行:

       year  month  day gender  births       date
0      1969      1    1      F    4046 1969-01-01
1      1969      1    1      M    4440 1969-01-01
2      1969      1    2      F    4454 1969-01-02
3      1969      1    2      M    4548 1969-01-02
4      1969      1    3      F    4548 1969-01-03

数据展示的是美国1969年-1988年每天出生的男女人数。

让我们画一个箱线图,比较一下1986年,1987年和1988年男女出生人数的分布情况。

箱线图: ax.boxplot(x)

完整代码如下:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
birth=pd.read_csv(r"https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv")
fig,ax=plt.subplots()birth=birth.iloc[:15067]
birth["day"]=birth["day"].astype(int)birth["date"]=pd.to_datetime({"year":birth["year"],"month":birth["month"],"day":birth["day"]},errors='coerce')
birth=birth[birth["date"].notnull()]#提取1986年-1988年男女出生人数数据,并转换成numpy的array格式
birth1986_female=np.array(birth.births[(birth["year"]==1986) & (birth["gender"]=="F")])
birth1986_male=np.array(birth.births[(birth["year"]==1986) & (birth["gender"]=="M")])
birth1987_female=np.array(birth.births[(birth["year"]==1987) & (birth["gender"]=="F")])
birth1987_male=np.array(birth.births[(birth["year"]==1987) & (birth["gender"]=="M")])
birth1988_female=np.array(birth.births[(birth["year"]==1988) & (birth["gender"]=="F")])
birth1988_male=np.array(birth.births[(birth["year"]==1988) & (birth["gender"]=="M")])#由于需要绘制多个箱线图,因此把这些数据放入一个列表
data=[birth1986_female,birth1986_male,birth1987_female,birth1987_male,birth1988_female,birth1988_male]
ax.boxplot(data,positions=[0,0.6,1.5,2.1,3,3.6]) #用positions参数设置各箱线图的位置
ax.set_xticklabels(["1986\nfemale","1986\nmale","1987\nfemale","1987\nmale","1988\nfemale","1988\nmale"]) #设置x轴刻度标签

plt.show()

图像如下:

可以看出,这三个年份,男性出生人数普遍比女性高。同时,箱体高度都差不多,说明数据离散程度相差不大。此外,箱体没有关于中位线对称,且中位线位于箱体中心偏上,说明数据成左偏态分布。最后,数据没有出现异常值。

箱线图也可以做成横向的,在boxplot命令里加上参数vert=False即可。图像如下:

转载于:https://www.cnblogs.com/HuZihu/p/9481071.html

Matplotlib学习---用matplotlib画箱线图(boxplot)相关推荐

  1. matlab 画箱线图boxplot简单用法

    代码示例: data1=rand(5,1);%列向量 data2=rand(5,1);%列向量 data3=rand(5,1);%列向量 data=[data1,data2,data3]; boxpl ...

  2. matlab怎么画箱线图群,[转载]Matlab如何画箱线图群组

    data = rand(20,24) month = repmat({'jan' 'feb' 'mar' 'apr' 'may' 'jun' 'jul' 'aug' 'sep' 'oct' 'nov' ...

  3. matlab能给图像编组么,Matlab如何画箱线图群组

    data = rand(20,24) month = repmat({'jan' 'feb' 'mar' 'apr' 'may' 'jun' 'jul' 'aug' 'sep' 'oct' 'nov' ...

  4. 【数据处理】python matplotlib 画箱线图;箱线图介绍;如何画箱线图

    一.箱线图介绍 假设一组数据有n个数,将它们从小到大排列,分为四等分.位于第25%(n+1)位置的数字是第一四分位数Q1.位于第50%(n+1)位置的数字是第二四分位数Q2,也是中位数.位于第75%( ...

  5. 箱线图入门,一文看懂箱线图,matplotlib画箱线图

    什么是箱线图? 我们画箱线图的目的其实是去查看数据分布的离散程度. 上图将箱线图的重要部分都标出来了.对于箱线图来说,图中会有的要素有: 最大值 Q3(大于75%数据的位点) 中位数 Q1(大于25% ...

  6. r语言echarts画箱线图_echarts学习笔记之箱线图的分析与绘制详解

    一.箱线图 box-plot 箱线图(boxplot)也称箱须图(box-whisker plot),它是用一组数据中的最小值.第一四分位数.中位数.第三四分位数和最大值来反映数据分布的中心位置和散布 ...

  7. 画箱线图_箱线图的N种画法

    图中标示了箱线图中每条线和点表示的含义,其中应用到了分位数的概念 线的主要包含五个数据节点,将一组数据从大到小排列,分别计算出他的上边缘(Maximum),上四分位数(Q3),中位数(Median), ...

  8. MATLAB boxplot 修改箱子线型、设置箱子颜色、不同长度数据画箱线图、中位线改成黑色、箱线图虚线改实线

    效果图:1.train和test样本数据数量不一样:2.上下端横线去掉,中心线变为实线:3.分组修改颜色:4.指定每个箱子.每个组的位置 网上介绍 boxplot的文章已经很多了,自己试了一天总结出来 ...

  9. Matlab(2018b)画箱线图技巧

    Matlab 箱线图并美化 目的:用matlab 画线箱图,并美化.以及x标签过长,如何分两行展示的问题 步骤: 先画箱线图,借助matlab的boxplot函数 x = randn(5); boxp ...

  10. boxplot用法 python,[Python画图笔记]利用Python画箱型图boxplot

    [Python画图笔记]利用Python画箱型图boxplot [Python画图笔记]利用Python画箱型图boxplot 最近在学习使用Python画图,想用subplot画两幅箱型图,分别用来 ...

最新文章

  1. ubuntu 使用阿里云 apt 源
  2. jvm误区--动态对象年龄判定
  3. Java 反射 方法调用
  4. Notepad++快捷键使用技巧
  5. python考证书-python能考证么
  6. 哈希函数的原理及应用
  7. (转)我的座驾见谁灭谁!
  8. mysql not in优化_MySQL性能优化 — 实践篇2
  9. 若依微服务版新建业务模块后提示找不到mapper的解决方法
  10. Spark Operator资料收集
  11. why always SAP WebContent is added as prefix of url when repository request ser
  12. python自带的统计函数_NumPy统计函数的实现方法
  13. 首发Android 13!谷歌Pixel 7 Pro渲染图曝光:后置相机模组吸睛
  14. [置顶] 金山云存储解决企业办公难题
  15. golang 判断map的键key是否存在
  16. CSDN前200名博主
  17. vue滑块滑动校验,兼容移动端/pc端
  18. 做短视频自媒体,新手一个月6000多,全靠这些工具,抓紧收藏
  19. Java基础学习总结(98)——阿里巴巴Java开发手册
  20. UVC 摄像头驱动(二)描述符分析

热门文章

  1. MongoDB 官方C#驱动 封装 DbHelper
  2. 旺财速啃H5框架之Bootstrap(六)
  3. Public key for mysql....rpm is not installed
  4. 使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建 -摘自网络...
  5. 摄像机域内监督行人重识别问题
  6. 百万奖池大赛 | 交通事件、医学病理、违法广告检测等,2020首届江苏大数据开发与应用大赛启动...
  7. CVPR 2020 | 旷视提出新型人-物交互检测框架,实现当前最佳
  8. TensorFlow深度自动编码器入门实践
  9. CVPR 2021 Oral | Transformer!UP-DETR:无监督预训练检测器
  10. 学术 | 基于深度学习的图像边缘和轮廓提取方法介绍