【Python】使用pandas/matplotlib画箱图

目录

1、动机

2、简介

定义

图解

图解2

四分位数的计算

3、使用

官方使用以及参数解释

举例1

举例2

4、参考


1、动机

因为最近论文有信息量很大的结果需要展示,如果用常用的折线图或者柱状图很难集中且全面的展示实验结果,于是准备先简单了解下。

2、简介

定义

箱线图,又称箱形图(boxplot)或盒式图或盒须图,是一种用作显示一组数据分散情况资料的统计图。不同于一般的折线图、柱状图或饼图等传统图表,只是数据大小、占比、趋势等等的呈现,其包含一些统计学的均值、分位数、极值等等统计量,因此,该图信息量较大,不仅能够分析不同类别数据平均水平差异(需在箱线图中加入均值点),还能揭示数据间离散程度、异常值、分布差异等等

图解

箱形图有6个参数:
下边缘(Q1),表示最小值;
下四分位数(Q2),又称“第一四分位数”,等于该样本中所有数值由小到大排列后第25%的数字。长方形下边界
中位数(Q3),又称“第二四分位数”等于该样本中所有数值由小到大排列后第50%的数字,横线
上四分位数(Q4),又称“第三四分位数”等于该样本中所有数值由小到大排列后第75%的数字,长方形上边界
上边缘(Q5),表述最大值。
第三四分位数与第一四分位数的差距又称四分位间距。

异常值:即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍-3倍四分位数差之间的异常值,空心白圆圈

图解2

五数概括法使用下面五个数来汇总数据:

(1)最小值(Q1-1.5IQR)

(2)第一四分位数(Q1)

(3)中位数(Q2)

(4)第三四分位数(Q3)

(5)最大值(Q3+1.5IQR)

四分位数的计算

具体参考

计算公式+规则(n表示数据总数)

 举例1(整除)说明,代入公式即可

 举例2(非整除,离哪个店近则哪个点占比75%)

3、使用

【箱形图的应用】
(1)可以作为一种检测异常值的方法;

(2)用于多组数据的图形汇总,便于对各组数据进行直观比较分析。

【箱形图的绘制方法】本文主要讲前两个方法
方法1:利用pandas包中的Series.plot()、DataFrame.plot()或DataFrame.boxplot()方法;

方法2:利用matplotlib包中axes对象的boxplot()方法;

方法3:利用seaborn包中的cataplot()或者boxplot(),其中seaborn.boxplot()是seaborn.cataplot()的参数kind='box'时的一种情况

官方手册

官方使用以及参数解释

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:bool类型参数,是否填充箱体的颜色;默认为False
meanline:bool类型参数,是否用线的形式表示均值,默认为False
showmeans:bool类型参数,是否显示均值,默认为False
showcaps:bool类型参数,是否显示箱线图顶端和末端的两条线(即上下须),默认为True
showbox:bool类型参数,是否显示箱线图的箱体,默认为True
showfliers:是否显示异常值,默认为True
boxprops:设置箱体的属性,如边框色,填充色等
labels:为箱线图添加标签,类似于图例的作用
filerprops:设置异常值的属性,如异常点的形状、大小、填充色等
medianprops:设置中位数的属性,如线的类型、粗细等
meanprops:设置均值的属性,如点的大小、颜色等
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等
whiskerprops:设置须的属性,如颜色、粗细、线的类型等

举例1

%matplotlib inline
#首先导入基本的绘图包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#添加成绩表
plt.style.use("ggplot")
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.sans-serif']=['SimHei'] 
#新建一个空的DataFrame
df=pd.DataFrame()
#添加成绩单,最后显示成绩单表格
df["英语"]=[76,90,97,71,70,93,86,83,78,85,81]
df["经济数学"]=[65,95,51,74,78,63,91,82,75,71,55]
df["西方经济学"]=[93,81,76,88,66,79,83,92,78,86,78]
df["计算机应用基础"]=[85,78,81,95,70,67,82,72,80,81,77]


#方法1 用matplotlib来画出箱型图
plt.boxplot(x=df.values,labels=df.columns,whis=1.5)
plt.show()

#方法2,用pandas自带的画图工具更快
df.boxplot()
plt.show()

 

举例2

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(2)  #设置随机种子
df = pd.DataFrame(np.random.rand(5,4),
columns=['A', 'B', 'C', 'D'])#先生成0-1之间的5*4维度数据,再装入4列DataFrame中
df.boxplot() 
# plt.boxplot(df) #等同上面的方法
plt.show()

"""
sym异常值形状。默认是空心圆圈,'r*'是红色五角星
vert展示形式。默认为true,即正常垂直摆放的形状,修改成false的话就是水平展示。
patch_artist箱图填充颜色与否,默认为False。改成true默认填充水蓝色
meanline:是否用虚线的形式表示均值.默认为False,默认虚线,为了和中位数线区分,所以是虚线的形式
showmeans:是否用三角形图案显示均值,默认为False,形状也是为了和异常值区分
whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差
"""
df.boxplot(sym='r*',vert=False,patch_artist=True,meanline=False,showmeans=True)
plt.show()


"""
美化9可用for循环来构造)
    比如各条线的颜色,粗细程度等等。
"""
f=df.boxplot(sym='r*',patch_artist=True,return_type='dict')
"""
boxes, 是25分位值和75分位值构成的box
whiskers, 是指从box 到error bar之间的竖线.
caps, 是指 下边缘error bar 横线.
medians, 是中位值的横线, 每个median是一个Line2D对象
fliers, 是指error bar线之外的离散点.

means, 是均值的横线
"""
for box in f['boxes']:
    # 箱体边框颜色
    box.set( color='#7570b3', linewidth=2)
    # 箱体内部填充颜色
    box.set( facecolor = '#1b9e77' )
for whisker in f['whiskers']:
    whisker.set(color='r', linewidth=2)
for cap in f['caps']:
    cap.set(color='g', linewidth=3)
for median in f['medians']:
    median.set(color='DarkBlue', linewidth=3)
for flier in f['fliers']:
    flier.set(marker='o', color='y', alpha=0.5)
plt.show()


 

从图形可以看出,A、B、C、D四组数A、D数据较集中(大部分在上下四分位箱体内),但都有异常值,C的离散程度最大(最大值与最小值之间距离),以均值为中心,B分布都有明显右偏(即较多的值分布在均值的右侧),A、C则有明显左偏。

 

 从分析的角度来说,上面boxplot最初始图形已经够用,但是在matplotlib库下boxplot函数中包含n多参数,涉及到对框的颜色及形状、线段线型、均值线、异常点的形状大小等等设置。

字典将箱形图的每个组成部分映射到matplotlib.lines.Line2D创建的实例列表。该词典具有以下键(假定垂直框图):

  • boxes:箱图的主体,显示四分位数和中位数的置信区间(如果启用)。
  • medians:每个框的中间的水平线。
  • whiskers:垂直线延伸到最极端的非异常数据点。
  • caps:晶须末端的水平线。
  • fliers:表示超出晶须(传单)的数据的点。
  • means:表示均值的点或线。

 

前边说过,很多参数使用很少,但对于图形来说,可能还能用到的就是美化,比如各条线的颜色,粗细程度等等。这里可用for循环来构造 

4、参考

统计学笔记----箱形图以及python实践

直接读取csv文件绘制【Python】Matplotlib画图(十一)——箱线图

Python-matplotlib统计图之箱线图漫谈

python 中箱线图绘制

Python数据可视化:箱线图

Box plot (箱线图) 解读以及Python实现

Python实现箱形图的绘制

Python实现箱形图的绘制

Matplotlib 蜡烛图教程 - 知乎

用 pandas + matplotlib 绘制精美的K线图 - 知乎

【python】绘制箱体图/蜡烛图/K线图_python plt 画蜡烛图-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静静喜欢大白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值