python箱线图怎么画_Matplotlib学习---用matplotlib画箱线图(boxplot)

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

把数据从小到大进行排列并等分成四份,第一分位数(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将显示数据的最大值和最小值。)

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

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

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即可。图像如下:

箱线图boxplot

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

箱线图(boxplot)简介与举例

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

python画箱线图

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

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

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

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

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

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

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

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

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

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

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

matplotlib箱线图与柱状图比较

代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 16:37:47 2018 @author: zhen &qu ...

随机推荐

Hadoop 简介

一个开源的,高可靠,可扩展的分布式计算框架 解决的问题 1 海量数据的存储(HDFS) 2海量数据的分析(Mapreduce) 3 分布式资源调度 (Yarn) 应用场景 日志分析,基于海量数据的在线 ...

Git远程操作

Git远程操作 // */ // ]]>   Git远程操作 Table of Contents 1 Git远程命令概览 2 Git远程仓库与本地仓库的关系图 3 git clone 4 git ...

Linux下OpenSSL 安装

安装环境:  操作系统:CentOs6.3 OpenSSL Version:openssl-1.0.0e.tar.gz 目前版本最新的SSL地址为http://www.openssl.org/sour ...

sql语句中like的使用

先看一道题: 写出一条sql语句,找出表B中 字段Value中不全是字母 数字 下划线的数据 初看这道题,我们想到可以用like去进行模糊匹配,找出想要的结果.但是有一个地方需要注意:如果想在SQL ...

【Docker】(4)搭建私有镜像仓库

[Docker](4)搭建私有镜像仓库 说明 1. 这里是通过阿里云,搭建Docker私有镜像仓库. 2. 这里打包的镜像是从官网拉下来的,并不是自己项目创建的新镜像,主要测试功能 一.搭建过程 首先 ...

SQL Server DDL

1:向表中添加字段 Alter table [表名] add [列名] 类型 2:  删除字段 Alter table [表名]  drop column [列名] 3:  修改表中字段类型 (可以修 ...

python之使用smtplib模块发送邮件

# 使用smtplib模块发送邮件 import smtplib from email.mime.text import MIMEText from email.header import Heade ...

MT【227】换钱的总数

(2012复旦)将1张面值100元的人民币全部换成面值1角,2角,5角的人民币,不同的换法有多少种? 解:即求不等式$2x+5y\le1000$的所有非负整数解的个数.由匹克公式:$S=a+\dfra ...

MVC 实用构架实战(一)——项目结构搭建

一.前言 在中,已经把项目整体结构规划做了个大概的规划.在本文中,将使用代码的方式来一一解说各个层次.由于要搭建一个基本完整的结构,可能文章会比较长.另外,本系列主要出于实用的目的 ...

delphi 消息的使用

//分析结果 WM_AnalysisResult = WM_USER + 1009; SendMessage(G_MainHandle, WM_AnalysisResult, 0, 0); proce ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值