Python 数据可视化之山脊线图 Ridgeline Plots

2024-02-09 18:28

本文主要是介绍Python 数据可视化之山脊线图 Ridgeline Plots,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、前言
  • 二、主要内容
  • 三、总结

🍉 CSDN 叶庭云https://yetingyun.blog.csdn.net/


一、前言

JoyPy 是一个基于 matplotlib + pandas 的单功能 Python 包,它的唯一目的是绘制山脊线图 Joyplots(也称为 Ridgeline Plots)。

Why are they called joyplots?

Joyplots 是堆叠的、部分重叠的密度图,就是这么简单。它们是一种很好的绘制数据的方式,可以用来直观比较分布,特别是哪些随着一个维度(比如时间)变化的分布。虽然这并不是一种新技术。

在这里插入图片描述

Github 地址:https://github.com/leotac/joypy

安装 joypy,使用 pip install joypy==0.2.6 就好。

在行为差异、特征工程和预测建模等场景中,了解不同组之间的变量分布差异非常有用。在这些情况下,许多数据科学家更喜欢在单一坐标轴上绘制组级分布图,例如直方图或密度图。然而,当群体较多时,简单的组级分布图可能变得混乱且难以理解。

本文将向您介绍一种紧凑而优雅的数据可视化工具:山脊线图。它以清晰的方式展示不同变量或变量类别的分布差异,帮助我们更好地理解数据中的群体特征,从而获得更深入的洞察和启发。


二、主要内容

使用鸢尾花数据集 iris.csv 做实验,这个数据集如下所示:

在这里插入图片描述

打印特征名称和标签,以及输出标签的 value_counts。

print(f"特征:{list(df.columns)[:-1]}")
print(f"标签:{list(df.columns)[-1]}")特征:['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth']
标签:Namedf["Name"].value_counts()Iris-setosa        50
Iris-versicolor    50
Iris-virginica     50
Name: Name, dtype: int64
selected_cols = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth']fig, ax = plt.subplots(figsize=(10, 6), dpi=200)
my_title = 'Distribution of features in the iris dataset'fig, axes = joyplot(data=df,ax=ax,by='Name',column=selected_cols,xlabelsize=14,ylabelsize=14,grid=True,hist=False,color=['#FF0066', '#9400D3','#002FA7', '#FFB900'],legend=True,title=my_title,alpha=0.86,
)fig.savefig("./Figures/山脊图.png", dpi=300)plt.show()

关键参数说明

  • data:数据帧(DataFrame)、系列(Series)或嵌套集合(Nested collection)。常用 pandas 的 DataFrame
  • ax : matplotlib axes 对象,默认为 None。
  • column:字符串或序列。如果传入参数,将用于将数据限制为列的子集。
  • by:对象,可选项。用于划分不同组的变量分布的特征名称。本次实验中是 “Name”。
  • grid:布尔值,默认是 True。是否显示轴网格线。
  • title:绘制的图表的标题。
  • alpha:设置透明度。
  • xlabels、ylabels:布尔值或列表,默认为 True。
  • xlabelsize:整数,默认值 None。如果指定,则更改 X 轴标签尺寸。
  • xrot:浮点数,默认为 None。旋转 X 轴标签的角度。
  • ylabelsize:整数,默认值 None。如果指定,则更改 Y 轴标签尺寸。
  • yrot:浮点数,默认为 None。旋转 Y 轴标签的角度。
  • figsize : 元组。默认情况下,要创建的图形大小(以 inches 为单位)。
  • color:在绘图中使用的一种或多种颜色。可以是字符串或任何可被 matplotib 解释为颜色的东西。通常传入颜色列表。
  • kwds : 其他绘图关键字参数,将传递给 hist / {/} /kde plot 函数。

实际上,这主要涉及一些 matplotlib 绘图参数。用户还可以直接修改源代码,以调整 X 轴、Y 轴、标题和图例的字体大小,从而使生成的山脊线图更加美观。

山脊线图可视化的效果如下图所示

在这里插入图片描述

正如上图所示,山脊线图不仅展示了每个鸢尾花种类四个特征的分布形状和峰值,还直观地展示了不同种类之间的差异。通过将多个组的分布放置在同一张山脊线图上,并使用不同的颜色或线型进行标识,我们可以轻松比较它们之间的相似性和差异性。


三、总结

山脊线图(Ridgeline Plots),也被称为 Joy Plots,是一种用于展示一个或多个组的数据分布的数据可视化方法。

什么是山脊线图?

  • 山脊线图中,每个组的数据分布通过平滑的密度曲线表示,这些曲线沿垂直轴堆叠排列,从而产生类似山脊的视觉效果。
  • 这种图表特别适用于比较不同组的数据分布情况。

为什么要使用山脊线图?

  • 平滑展示数据分布:与传统的条形图或直方图相比,山脊线图提供了一种更平滑、更直观的方式来展示数据的分布情况。
  • 比较能力:山脊线图非常适合比较多个分布的形状和大小,清晰地展示不同组之间的变化和趋势。
  • 空间效率:通过在单个图中堆叠,山脊线图可以有效地利用空间,避免了创建多个单独的密度图。
  • 美观性:山脊线图在视觉上吸引人,用不同的颜色和样式区分不同的组,使得数据更加生动和直观。
  • 趋势识别:可以轻松识别多个群体数据中的共同模式和异常值。
  • 适用于大量数据集:山脊线图适用于展示大量数据集,而不会显得拥挤或不清晰。

如何制作山脊线图?

  • 山脊线图的制作基于核密度估计(Kernel Density Estimation,KDE),这是一种非参数估计概率密度函数的方法。
  • 使用 JoyPy,一个基于 matplotlib + pandas 的轻量级 Python 包,可以轻松绘制山脊线图 Joy Plot。

📚️ 参考链接:

  • 山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝
  • HF.050 | 山脊图、密度图,最全总结实现方法在这里!
  • 沈向洋:致 AI 时代的我们 —— 请不要忽视写作的魅力

这篇关于Python 数据可视化之山脊线图 Ridgeline Plots的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694974

相关文章

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2