🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/
一、前言
JoyPy
是一个基于 matplotlib + pandas 的单功能 Python 包,它的唯一目的是绘制山脊线图 Joyplots(也称为 Ridgeline Plots)。
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']
标签:Name
df["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。
📚️ 参考链接: