当前有效matplotlib
版本为:3.4.1
。
概述
violinplot()
函数的作用是绘制小提琴图。
小提琴图和箱形图有点类似,它也可以显示四分位数(quartile)。不同于箱形图是通过长方形呈现的,以及绘图组件都对应实际的数据点,小提琴图集合了箱形图和密度图的特征,主要用来显示数据的分布状态,它能很好地表征了连续变量数据的分布情况。在外形上,因为所绘制的图形像一把把小提琴,故名“小提琴图”。小提琴图是用于观察多个数据分布情况的有效媒介,相比于箱形图,它在视觉上更令人愉悦。
函数的签名为matplotlib.pyplot.violinplot(dataset, positions=None, vert=True, widths=0.5, showmeans=False, showextrema=True, showmedians=False, quantiles=None, points=100, bw_method=None, *, data=None)
。
函数的参数为:
dataset
:输入数据。类型为数组或向量序列。必备参数。positions
:指定小提琴的位置。刻度和极值会自动匹配箱体位置。类型为类数组结构。可选参数。默认值为range(1, N+1)
,N
为图中小提琴的个数(子数据集的个数)。vert
:小提琴的方向,当取值为True
时,绘制垂直小提琴图,当取值为False
时,绘制水平小提琴图。类型为布尔值,默认值为True
。可选参数。widths
:箱体的宽度。类型为浮点数(所有小提琴的统一宽度)或类数组结构(每个小提琴的宽度)。默认值为0.5
,即图宽度的一半。showmeans
:是否显示算术平均值。类型为布尔值,默认值为False
。可选参数。showextrema
:是否显示极值。类型为布尔值,默认值为True
。可选参数。showmedians
:是否显示中位数。类型为布尔值,默认值为False
。可选参数。quantiles
:指定分位数的位置。类型为字典,元素要求值范围为[0,1]
,默认值为None
。可选参数。points
:定义计算核密度估计的点的数量。类型为整数,默认值为100
。可选参数。bw_method
:用于估算带带宽的方法。类型为字符串、标量或可调用对象,默认值为'scott
。可选参数。
函数返回值为字典对象。字典的键如下:
bodies
:PolyCollection
实例列表,每个元素表示每个小提琴的填充区域。medians
:cmeans
:LineCollection
实例,表示每个小提琴分布的均值。cmins
:LineCollection
实例,表示每个小提琴分布的最低值。cmaxes
:LineCollection
实例,表示每个小提琴分布的最高值。cbars
:LineCollection
实例,表示每个小提琴分布的中心。cmedians
:LineCollection
实例,表示每个小提琴分布的中位数。cquantiles
:LineCollection
实例,表示每个小提琴分布的四分位数。
案例:对比小提琴图和箱线图
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'simhei'
plt.rcParams['axes.unicode_minus'] = False
data = np.random.normal(size=1000)
plt.subplot(121)
plt.title("小提琴图")
plt.violinplot(data)
plt.subplot(122)
plt.title("箱线图")
plt.boxplot(data)
plt.show()
案例:演示基础参数
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.family'] = 'simhei'
plt.rcParams['axes.unicode_minus'] = False
data = np.random.normal(size=1000)
plt.subplot(331)
plt.title("默认样式")
plt.violinplot(data)
plt.subplot(332)
plt.title("水平方向")
plt.violinplot(data, vert=False)
plt.subplot(333)
plt.title("设置位置")
plt.violinplot(data, positions=[2])
plt.subplot(334)
plt.title("设置宽度")
plt.violinplot(data, widths=0.3)
plt.subplot(335)
plt.title("隐藏极值")
plt.violinplot(data, showextrema=False)
plt.subplot(336)
plt.title("显示均值")
plt.violinplot(data, showmeans=True)
plt.subplot(337)
plt.title("显示中位数")
plt.violinplot(data, showmedians=True)
plt.subplot(338)
plt.title("显示分位数")
plt.violinplot(data, quantiles=[0.2, 0.5, 0.8, 0.9])
plt.subplot(339)
plt.title("设置核密度估计点数")
plt.violinplot(data, points=10)
plt.tight_layout()
plt.show()