数据可视化库 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()
上述代码绘制图像如下:

以上。
更多推荐
所有评论(0)