matplotlib之pyplot模块——绘制小提琴图violinplot()

本文介绍了matplotlib库中的violinplot函数,用于创建直观的小提琴图展示数据分布。通过案例展示了如何使用该函数调整样式、方向和参数,并将其与箱线图对比。重点讲解了各参数的含义及其作用,适用于理解连续数据的复杂分布情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当前有效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。可选参数。

函数返回值为字典对象。字典的键如下:

  • bodiesPolyCollection实例列表,每个元素表示每个小提琴的填充区域。
  • medians
  • cmeansLineCollection实例,表示每个小提琴分布的均值。
  • cminsLineCollection实例,表示每个小提琴分布的最低值。
  • cmaxesLineCollection实例,表示每个小提琴分布的最高值。
  • cbarsLineCollection实例,表示每个小提琴分布的中心。
  • cmediansLineCollection实例,表示每个小提琴分布的中位数。
  • cquantilesLineCollection实例,表示每个小提琴分布的四分位数。

案例:对比小提琴图和箱线图

在这里插入图片描述

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值