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

把数据从小到大进行排列并等分成四份,第一分位数(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 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()]

这是清洗过后的数据的前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即可。图像如下:

Matplotlib学习---用matplotlib画箱线图(boxplot)的更多相关文章

  1. 箱线图boxplot

    箱线图boxplot--展示数据的分布 图表作用: 1.反映一组数据的分布特征,如:分布是否对称,是否存在离群点 2.对多组数据的分布特征进行比较 3.如果只有一个定量变量,很少用箱线图去看数据的分布 ...

  2. 箱线图(boxplot)简介与举例

    简述:   盒图是在1977年由美国的统计学家约翰·图基(John Tukey)发明的.它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(m ...

  3. python画箱线图

    # -*- coding: utf-8 -*- """ Created on Wed Jun 14 13:00:11 2017 @author: Miao "& ...

  4. 一起来玩echarts系列(一)------箱线图的分析与绘制

    一.箱线图 Box-plot 箱线图一般被用作显示数据分散情况.具体是计算一组数据的中位数.25%分位数.75%分位数.上边界.下边界,来将数据从大到小排列,直观展示数据整体的分布情况. 大部分正常数 ...

  5. matplotlib学习日记(六)-箱线图

    (一)箱线图---由一个箱体和一对箱须组成,箱体是由第一个四分位数,中位数和第三四分位数组成,箱须末端之外的数值是离散群,主要应用在一系列测量和观测数据的比较场景 import matplotlib ...

  6. Matplotlib数据可视化(6):饼图与箱线图

    In [1]: from matplotlib import pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParam ...

  7. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

    直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...

  8. python3绘图示例4(基于matplotlib:箱线图、散点图等)

    #!/usr/bin/env python# -*- coding:utf-8 -*- from matplotlib.pyplot import * x=[1,2,3,4]y=[5,4,3,2] # ...

  9. pyhton中matplotlib箱线图的绘制(matplotlib双轴图、箱线图、散点图以及相关系数矩阵图))

    //2019.07.23 1.箱形图,又称为盒式图,一般可以很好地反映出数据分布的特征,也可以进行多项数据之间分布特征的比较,它主要包含五个基础数据:中位数,两个上下分位数以及上下边缘线数据 其中的一 ...

随机推荐

  1. java.util.Stack类中 empty() 和 isEmpty() 方法的作用

    最近在学习算法和数据结构,用到Java里的Stack类,但程序运行结果一直和我预料的不一样,网上也没查清楚,最后查了API,才搞明白. java.util.Stack继承类 java.util.Vec ...

  2. tomcat7 内存溢出 java.lang.OutOfMemoryError 处理方法

    找到tomcat的安装目录,在  tomcat安装目录/bin/catalina.sh最上面添加: JAVA_OPTS="-server -Xms800m -Xmx800m -XX:Perm ...

  3. Sql Server中的nvarchar(n)、varchar(n) 和Mysql中的char(n)、varchar(n)

    刚才有幸看了下 nvarchar(n)和varchar(n),感觉以前的认知有误. nvarchar(n):n指的是字符个数,范围是1-4000,存储的是可变长度的Unicode字符数据. 按字符存储 ...

  4. stark组件的增删改(新)

      1.效果图 2.详细步骤解析 3.总结.代码   1.效果图 增 删除 改 2.详细步骤解析 1.构造增删改查url,反向解析 2.ModelForm定制add.edit页面 3.starak中的 ...

  5. vue-cli脚手架安装和webpack-simple模板项目生成

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. GitHub地址是:https://github.com/vuejs/vue-cli 一. ...

  6. Ubuntu18.04安装netstat

    一.简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memb ...

  7. js上传视频(jquery.form.js)

    // 上传目标触发点 <input type="file" class="upvideo" name="upvideo" id=&qu ...

  8. 初步了解HTTP

    HTTP简介: HTTP:HyperText  Transfer Protocol 超文本传输协议,是因特网上使用最为广泛的一种网络传输议,是用于从万维网(www :world  wide web)服 ...

  9. CMake--变量

    1.一般变量 1)CMake变量引用的方式 使用${}进行变量的引用.例如: ${PROJECT_NAME} #返回项目名称 在 IF 等语句中,是直接使用变量名而不通过${}取值. 2)cmake自 ...

  10. SQL查询临时表空间的数据