山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝

山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝了解变量中不同群体的分布差异在以下场景非常有用 行为差异特征工程预测建模等等在这种场景下 许多数据科学家更倾向于在单轴上创建组级分布图 直方图或密度图 但是 当群体较多时 简单的组级分布图可能会变得混乱且难以解读

欢迎大家来到IT世界,在知识的湖畔探索吧!

了解变量中不同群体的分布差异在以下场景非常有用:

  • 行为差异
  • 特征工程
  • 预测建模等等
山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝



欢迎大家来到IT世界,在知识的湖畔探索吧!

在这种场景下,许多数据科学家更倾向于在单轴上创建组级分布图(直方图或密度图)。但是,当群体较多时,简单的组级分布图可能会变得混乱且难以解读。

山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝

笔者在这里为大家介绍一种紧凑而优雅的数据可视化工具——山脊线图,它能够以一种清晰的方式展示不同变量或变量类别的分布差异。通过山脊线图,我们可以更好地理解数据中的群体特征,从而获得更深入的洞察和启发。

山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝

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

如下图是山脊线图的另一个经典示例。它描述了 2023 年发生的各种事件的搜索兴趣。

山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝

何时考虑山脊线图?

通常,当变量的组数超过3~4时,创建山脊线图才有意义。这是为了避免在单个图中可视化它们时可能出现的重叠。

山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝

此外,当组之间绘制的连续变量有清晰的模式和/或排名时,山脊线图相对更有用,例如:

  • 单调递增
  • 单调递减
  • 先递增再递减(等等)
  • 先递减再递增(等等)

可视化示例

安装joypy

pip install joypy

欢迎大家来到IT世界,在知识的湖畔探索吧!

导入库

导入一些常用的数据分析和可视化库以及日期和时间相关的模块、导入joypy库中的joyplot函数,用于创建山脊线图。

CategoricalDtype函数则是用来指定分类数据类型。

欢迎大家来到IT世界,在知识的湖畔探索吧!#数据分析和可视化库 import pandas as pd import numpy as np import matplotlib.pyplot as plt import warnings #日期和时间相关模块 from datetime import date, timedelta #导入joypy库中的joyplot函数,用于创建山脊线图 from joypy import joyplot from pandas.api.types import CategoricalDtype warnings.filterwarnings("ignore")

数据预处理及可视化

这里以一年中每个月份内最低温度和最高温度的分布情况为例,使用joypy库的joyplot函数绘制山脊线图。

# 定义每个月的平均温度和标准差 max_temps = [20.5, 24.6, 30.4, 36.9, 40.9, 39, 35.8, 34.5, 34.3, 33.1, 28.3, 23] min_temps = [7.6, 10.8, 15.7, 21.3, 25.6, 27.6, 27.3, 26.6, 24.9, 19.3, 12.9, 8.3, 19] std_devs = [1, 2, 3] months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] # 初始化一个空的数据框 df = pd.DataFrame(columns=['Day', 'Month', 'min_temp', 'max_temp']) # 生成每天的温度数据 start_date = date(2023, 1, 1) end_date = date(2023, 12, 31) current_date = start_date while current_date <= end_date: month = current_date.month - 1 # 调整为从0开始的索引 max_temp = np.random.normal(max_temps[month], std_devs[np.random.randint(0, 3)]) min_temp = np.random.normal(min_temps[month], std_devs[np.random.randint(0, 3)]) # 将数据添加到数据框中 df = df.append({ 'Day': current_date.day, 'Month': months[int(current_date.month)-1], 'min_temp': min_temp, 'max_temp': max_temp }, ignore_index=True) # 移动到下一天 current_date += timedelta(days=1) df['Month'] = df['Month'].astype(CategoricalDtype(months)) df.head() plt.figure() ax, fig = joyplot( data=df[['min_temp', 'max_temp', 'Month']], by='Month', column=['min_temp', 'max_temp'], color=['g', 'r'], # 设置不同的颜色 legend=True, alpha=0.7, figsize=(12, 8), ) plt.title('最低温度和最高温度分布', fontsize=20) plt.xlabel('温度 (°C)') plt.ylabel('密度') plt.grid(axis='x', linestyle='--', linewidth=0.5, alpha=0.7) plt.show()
山脊线图(Ridgeline Plots):一个被低估的数据可视化瑰宝

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/105039.html

(0)
上一篇 53分钟前
下一篇 40分钟前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信