数据可视化库 matplotlib 入门7——箱形图、小提琴图

Matplotlib 库使用入门7——箱形图、小提琴图

在前面关于 matploblib 的文章中,笔者分别介绍了:

本篇介绍 箱形图小提琴图 以及 matplotlib 绘制的方法并给出了示例。

箱形图

箱形图(Box-plot)于 1977 年由美国著名统计学家约翰·图基(John Tukey)发明,因形状像箱子而得名。它能显示出一组数据的最大值、最小值、中位数、及上下四分位数,用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。

箱形图结构如下图所示,从上四分位数到下四分位数绘制一个盒子,然后用一条垂直触须(称为“盒须”)穿过盒子的中间。上垂线延伸至上边缘(最大值),下垂线延伸至下边缘(最小值)。
箱形图

boxplot() 函数

Matplotlib 提供了 boxplot() 函数来绘制箱形图,可以应用在 MATLAB 样式以及面向对象的绘图方法中。当与 axes 对象一起使用时,语法格式如下:

  • axes.boxplot(x, notch, sym, vert, whis, positions, widths, patch_artist, bootstrap, usermedians, conf_intervals, meanline, showmeans, showcaps, showbox, showfliers, boxprops, labels, flierprops, medianprops, meanprops, capprops, whiskerprops, manage_ticks=True, autorange=False, zorder, capwidths, *, data)
    x:数据序列。
    notch:若为 True,将生成一个缺口箱线图。否则,生成一个矩形箱线图。
    sym:字符串值,它是飞行点数的默认符号。
    vert:若为 True,它会使方框垂直,否则是水平的。
    whis:决定了晶须在第一和第三四分位数以外的延伸范围。
    positions:设置框的位置。
    widths:用于设置带有标量或序列的每个框的宽度。
    patch_artist:若为 False,则用于生成带有 Line2D 艺术方框。
    bootstrap:布尔值,指定是否引导切口箱线图的中间值周围的置信区间。
    usermedians:一个数组或序列,其第一个维度与 x 兼容。
    conf_interval:一个数组或序列,其第一个维度与 x 兼容,第二个维度为 2。
    labels:每个数据集的标签。
    manage_ticks:调整 tick 的位置和标签。
    zorder:该参数用于设置箱线图的 zorder。

绘制示例

示例:

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(10)
a1 = np.random.normal(90, 20, 200)
a2 = np.random.normal(70, 25, 200)
a3 = np.random.normal(100, 10, 200)
a4 = np.random.normal(80, 30, 200)

fig = plt.figure('Box example1', figsize=(7, 9))
ax1 = fig.add_subplot(211)
ax1.boxplot([a1, a2, a3, a4], labels=['data1','data2','data3','data4'])
ax1.set_title('matplotlib.axes.Axes.boxplot() Example')

ax2 = fig.add_subplot(212)
ax2.boxplot([a1, a2, a3, a4], notch=True, vert=False, whis=0.75)  # 生成缺口箱线图,水平方向,并指定延伸范围
plt.show()

上述代码绘制图像如下:
箱形图

小提琴图

小提琴图(Violin Plot)是用来展示数据分布状态以及概率密度的图表,跟箱形图类似,但小提琴图还显示数据在不同数值下的概率密度。小提琴图使用核密度估计(KDE)来计算样本的分布情况,图中要素包括了中位数、四分位间距以及置信区间。在数据量非常大且不方便一一展示的时候,小提琴图特别适用。

小提琴图比箱型图提供了更多的信息,虽然箱型图显示了均值、中位数和上、下四分位数等统计信息,但是小提琴图却显示了数据的完整分布情况,这更利于数据的分析与比对。

violinplot() 函数

Matplotlib 提供了 violinplot() 函数来绘制小提琴图,可以应用在 MATLAB 样式以及面向对象的绘图方法中。当与 axes 对象一起使用时,语法格式如下:

  • axes.violinplot(dataset, positions, vert=True, widths=0.5, showmeans=False, showextrema=True, showmedians=False, quantiles, points=100, bw_method, *, data)
    dataset:绘制小提琴图的数据序列
    positions: 指定小提琴图位置,默认为:[1, 2, …, n]
    vert:若为 True,它会使小提琴图垂直,否则是水平的。
    widths:最大相对宽度,默认0.5。
    showmeans、showextrema、showmedians:是否显示均值、极值、中位数
    quantiles:指定分位数,0到1之间。
    points:核密度估计点数,默认100。
    bw_method:带宽计算方法,可以是 ‘scott’、'silverman’或者可调用对象。

绘制示例

示例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mps

np.random.seed(10)
a1 = np.random.normal(loc=90, scale=20, size=200)
a2 = np.random.normal(70, 25, 200)
a3 = np.random.normal(100, 10, 200)
a4 = np.random.normal(80, 30, 200)

fig = plt.figure('Violin example1', figsize=(6, 9))
ax1 = fig.add_subplot(211)
ax1.violinplot([a1, a2, a3, a4])
ax1.set_title('matplotlib.axes.Axes.violinplot() Example')
ax1.grid(axis='y')

ax2 = fig.add_subplot(212)
h12 = ax2.violinplot([a1, a2], positions=[1,2], vert=False, showmeans=True)
h3 = ax2.violinplot([a3], positions=[4], vert=False, showmeans=True)
h4 = ax2.violinplot([a4], positions=[6], vert=False, showmeans=True, showmedians=True)

h12_color = h12['bodies'][0].get_facecolor().flatten()  # 用不同颜色区分不同的小提琴图
h3_color = h3['bodies'][0].get_facecolor().flatten()
h4_color = h4['bodies'][0].get_facecolor().flatten()

h12_patch = mps.Patch(color=h12_color, label='data1 and data2')
h3_patch = mps.Patch(color=h3_color, label='data3')
h4_patch = mps.Patch(color=h4_color, label='data4')
ax2.legend(handles=[h12_patch, h3_patch, h4_patch], loc='center left')  # 给小提琴图加图例的方法

plt.show()

上述代码绘制图像如下:
小提琴图
以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值