Python 数据可视化:绘制箱线图、饼图和直方图

2020-11-26  本文已影响0人  you的日常

上一课介绍了柱形图和条形图,本课将介绍另外几种统计图表。

1.6.1 箱线图

Box Plot 有多种翻译,盒须图、盒式图、盒状图或箱线图、箱形图等,不管什么名称,它的基本结构是这样的:

image

这种图是由美国著名统计学家约翰·图基(John Tukey)于 1977 年发明的,它能显示出一组数据的上限、下限、中位数及上下四分位数。

为了更深入理解箱线图的含义,假设有这样一组数据:[1, 3, 5, 8, 10,11, 16, 98 ],共有 8 个数字。

首先要计算箱线图中的“四分位数”,注意不是 4 个数:

对于已经排序的数据 [1, 3, 5, 8, 10,11, 16, 98 ],下四分位数(Q1)的位置是数列中从小到大第 2.25 个数,当然是不存在这个数字的——如果是第 2 个或者第 3 个,则存在。但是,可以用下面的原则,计算出此位置的数值。

四分位数等于与该位置两侧的两个整数的加权平均数,此权重取决于相对两侧整数的距离远近,距离越近,权重越大,距离越远,权重越小,权数之和等于 1。

根据这个原则,可以分别计算本例中数列的 3 个四分位数。

image

在此计算基础上,还可以进一步计算四分位间距和上限、下限的数值。

注意:凡是落在上下限以外的数据,都是离群值。上述计算中,并没有把离群值剔除,因此导致下限出现了负数。下面我们要使用 Matplotlib 中的专有方法绘制箱线图,该方法会把离群值剔除之后计算。

先看一个简单示例,了解基本的流程。

%matplotlib inline
import matplotlib.pyplot as plt

fig,ax = plt.subplots(1, 2)
data = [1, 5, 9, 2]
ax[0].boxplot([data]) 
ax[0].grid(True)
ax[1].boxplot([data], showmeans=True)    # 显示平均值
ax[1].grid(True)

输出结果:

image

这里绘制了两张箱线图,一张没有显示平均值,另外一张显示了平均值,所使用的方法就是 boxplot,其完整参数列表为:

plt.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, *, data=None)

参数很多,不要担心记忆问题,更别担心理解问题。首先很多参数都是可以“望文生义”的,再有,与以前所使用的其他方法(函数)的参数含义也大同小异。

  plt.boxplot([2,4,6,8,10], notch=True)
  plt.grid(1)

输出结果:

image

所谓的“凹槽”,不是简单形状的改变,左右折线的上限区间表示了数据分布的置信区间,横线依然是上限和下限。

上一篇 下一篇

猜你喜欢

热点阅读