绘制带箱型图的小提琴图

发布时间:2026/9/27 9:23:20
绘制带箱型图的小提琴图
在数据可视化中,小提琴图是一种非常有用的图表,可以直观地展示数据分布的形状、密度以及其在不同组之间的比较。今天,我将分享如何结合Matplotlib和高斯核密度估计(KDE)来绘制带箱型图的小提琴图。为什么使用小提琴图?小提琴图结合了箱型图和密度曲线,可以展示数据的分布情况。通过图中的宽度变化,我们能够快速理解数据在不同数值区间的密度。核密度估计(KDE)提供了比传统直方图更平滑、更连续的分布展示,它帮助我们理解数据的整体趋势和异常。代码解读这段代码通过以下步骤实现了一个自定义的小提琴图:生成数据:利用高斯分布生成了五组数据,用于展示小提琴图在不同组间的表现。高斯核密度估计(KDE):通过scipy.stats.gaussian_kde来计算每组数据的核密度估计,从而获得数据的分布情况。绘制小提琴图:使用fill_betweenx绘制半边小提琴图,控制其宽度,并添加箱型图以更全面地展示数据的分布和异常。散点图:在小提琴图上覆盖随机分布的散点,展示数据点的分布密度。自定义图表样式:设置字体为 Times New Roman,调整图表大小、颜色、标签等,使得图表更符合科研发布要求。运行效果图中包含了五组数据的小提琴图和箱型图,每组数据通过不同的颜色进行区分。每个数据组的均值位置用X标记,展示了数据的中心趋势。y 轴使用了科学计数法来表示数值,更加规范。完整代码importnumpyasnpimportmatplotlib.pyplotaspltfromscipy.statsimportgaussian_kdeimportmatplotlib.tickerasticker# 设置字体为 Times New Romanplt.rcParams['font.family']='Times New Roman'# 设置数学公式字体为 Times New Romanplt.rcParams['mathtext.fontset']='custom'plt.rcParams['mathtext.rm']='Times New Roman'plt.rcParams['mathtext.it']='Times New Roman'plt.rcParams['mathtext.bf']='Times New Roman'# 设置字体大小plt.rcParams['font.size']=32# 数据准备np.random.seed(0)# 设置随机种子,确保可重复性mean=0.5# 高斯分布的均值 (μ)std_dev=0.1# 高斯分布的标准差 (σ)# 从正态分布中生成 10000 个样本data1=np.random.normal(mean,std_dev,10000)data2=np.random.normal(mean,std_dev,10000)data3=np.random.normal(mean,std_dev,10000)data4=np.random.normal(mean,std_dev,10000)data5=np.random.normal(mean,std_dev,10000)# 将数据集合在一起groups=[data1,data2,data3,data4,data5]# 设置标签labels=['label1','label2','label3','label4','label5']# 自定义颜色colors=['#1f77b4',# 深蓝色'#ff7f0e',# 橙色'#2ca02c',# 绿色'#9467bd',# 紫色'#e377c2',# 粉色'#d62728',# 红色]light_colors=['#aec7e8',# 浅蓝色'#ffbb78',# 浅橙色'#98df8a',# 浅绿色'#c5b0d5',# 浅紫色'#f7b6d2',# 浅粉色'#ff9896',# 浅红色]# 创建图形和坐标轴fig,ax=plt.subplots(figsize=(18,8))# 遍历每组数据fori,datainenumerate(groups)