密度图绘制
内容提要
本文介绍Python绘制密度图的多种方法,包括Seaborn的kdeplot、Scipy的gaussian_kde和KDEpy库,并比较其效果;同时讲解多组数据同核函数、同组数据不同核函数、渐变色彩填充、山脊图及同一坐标系多密度图等进阶技巧,涉及Matplotlib、ProPlot和SciencePlots库。
延伸解读
三种密度图绘制方法的选择建议
文章对比了Seaborn的kdeplot、Scipy的gaussian_kde和KDEpy库三种方法。kdeplot使用简单,结合rugplot可展示数据点分布;后两者代码稍复杂,但生成的密度图更清晰。此外,scikit-learn的KernelDensity提供6种核函数,KDEpy提供9种核函数,适合需要尝试不同核函数的场景。读者可根据对简便性和定制性的需求选择。
核函数选择与多组数据对比
对于多组数据,通常使用相同核函数进行拟合,便于在数据探索阶段比较不同维度的分布差异。若研究不同核函数的影响,可对同一组数据使用不同核函数绘制密度图。文章示例中使用了高斯核,并展示了KDEpy库中9种核函数的示意图,帮助读者理解核函数形状对密度估计的影响。
渐变色彩填充的实现与注意事项
渐变色彩填充通过自定义绘图方法实现,需将原始数据值映射为连续颜色,并用颜色填充密度曲线下的区域。文章示例使用Matplotlib、ProPlot和SciencePlots库,并采用自定义的parula颜色方案。实现时需将colormaps.py文件添加到绘图环境,并利用imshow和set_clip_path完成裁剪。此方法适用于多组数据同核函数或同组数据不同核函数的情况。
山脊图绘制与库选择建议
山脊图用于堆叠展示多组数据的密度分布,适合比较同一因素下不同类别的分布差异。可使用Matplotlib原生方法或JoyPy库绘制。JoyPy支持直方图模式和颜色映射,但功能尚不完善,文章建议优先使用Matplotlib原生方法。绘制渐变填充山脊图时,需注意保存矢量文件时可能出现的裁剪失败问题,可通过设置plt.rcParams['image.composite_image'] = False解决。
Q&A
Python中绘制密度图有哪些常用方法?
常用方法包括:Seaborn的kdeplot()函数、Scipy的gaussian_kde()函数,以及KDEpy库结合Matplotlib的plot()和fill()函数。其中kdeplot()最简单,后两者更灵活且图形更清晰。
Seaborn的kdeplot和Scipy的gaussian_kde在绘制密度图时有什么区别?
kdeplot()使用简单,可直接结合rugplot()显示数据分布;gaussian_kde()需要手动计算密度值并用plot()和fill()绘制,过程稍复杂但图形更清晰。
如何用不同核函数对同一组数据绘制密度图?
可以使用KDEpy库的NaiveKDE,指定不同的kernel参数(如Gaussian、Exponential等),对同一组数据分别计算密度并绘制子图,以比较不同核函数的效果。
什么是山脊图?在Python中如何绘制?
山脊图(ridgeline plot)用于展示多组数据分布的差异,通过堆叠多个密度图实现。可用Matplotlib原生方法循环绘制,或使用JoyPy库的joyplot()函数,后者支持直方图和颜色映射。
如何给密度图添加渐变色彩填充?
通过自定义方法:使用imshow()绘制渐变图像,并用fill()创建填充区域作为裁剪路径,使颜色映射到密度曲线内部。需要导入自定义颜色映射(如parula),并设置colorbar。
在同一坐标系中绘制多个密度图时,Seaborn和Matplotlib有何不同?
Seaborn的kdeplot()可直接传入DataFrame并指定palette快速绘制,但默认顺序可能与Matplotlib循环绘制的结果不同;Matplotlib需手动循环计算每个变量的密度并填充。