首页 > Matplotlib 阅读数:36

Matplotlib绘制箱线图

箱线图(Boxplot)也称为箱形图,其绘制需使用常用的统计量,能提供有关数据位置和分散情况的关键信息,尤其在比较不同特征时,更可表现其分散程度差异。图 1 标出了箱线图中每条线表示的含义。
箱线图中每条线表示的含义
图 1:箱线图中每条线表示的含义

箱线图利用数据中的 5 个统计量(最小值、下四分位数、中位数、上四分位数、最大值)来描述数据。它可以粗略地看出数据的对称性、分布的分散程度信息等。特别是可以用于对几个样本进行比较。

pyplot 中绘制箱线图的函数为 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_xticks=True,autorange=False,zorder=None,hold=None,data=None)

函数中的主要参数说明如下:
  • x:接收 array。表示用于绘制箱线图的数据,无默认;
  • notch:接收 boolean。表示中间箱体是否有缺口,默认为 None;
  • sym:接收特定 string。指定异常点形状,默认为 None;
  • vert:接收 boolean。表示图形是纵向还是横向,默认为 None;
  • positions:接收 array。表示图形位置,默认为 None;
  • widths:接收 scalar 或者 array。表示每个箱体的宽度,默认为 None;
  • labels:接收 array。指定每一个箱线图的标签,默认为 None;
  • meanline:接收 boolean。表示是否显示均线值,默认为 False。

【例 1】绘制 2007—2016 年的全国就业人员、城镇就业人员和乡村就业人员的箱线图。

其程序代码 test1.py 如下。
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
#导入2007—2016年就业数据
Emp_data= np.loadtxt('d:\data\Employedpopulation.csv',delimiter = ",",
                    usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)

# 设置Matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

#将2007—2016年就业数据赋值给X
X = [Emp_data[1],Emp_data[2],Emp_data[3]]
#创建一个绘图对象
plt.figure(figsize=(8, 6))
label = ['全国就业','城镇就业','乡村就业']  #定义箱线的标签,标签是列表
#绘制箱线图
plt.boxplot(X,notch=True, labels=label,meanline=True)
#添加标题
plt.title("2007-2016年城镇、乡村和全部就业人员情况箱线图")
#添加图例
plt.legend({'全国就业','城镇就业','乡村就业'})
plt.savefig('d:/data/Employedpopulation_box.png')
plt.show()

运行程序后,显示的箱线图如图 1 所示。

2007—2016 年就业人员情况箱线图
图 1:2007—2016年就业人员情况箱线图