You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用ggplot绘制多列数据的Ridgeline plot(而非同列多分组)

用ggplot实现多列数据的Ridgeline图

完全可以实现,核心是先把你的宽格式数据(每列对应一组要画的密度曲线)转换为ggplot更适配的长格式数据,再结合ggridges包的绘图函数完成。以下是具体步骤:

1. 数据格式转换

ggplot和ggridges都依赖长格式数据:一列存储所有数值,另一列存储对应的分组(即原数据列的列名)。可以用tidyr包的pivot_longer()函数快速转换:

# 加载依赖包
library(tidyr)
library(ggplot2)
library(ggridges)

# 构造示例宽格式数据(替换成你的真实数据)
set.seed(123)
wide_df <- data.frame(
  列1 = rnorm(100, mean = 0),
  列2 = rnorm(100, mean = 2),
  列3 = rnorm(100, mean = 4)
)

# 转换为长格式
long_df <- pivot_longer(wide_df, 
                        cols = everything(),  # 选择所有列
                        names_to = "分组",    # 原列名存到"分组"列
                        values_to = "数值")   # 所有数值存到"数值"列

2. 绘制Ridgeline图

用转换后的长数据,结合geom_density_ridges()即可生成每个原数据列对应的密度曲线:

ggplot(long_df, aes(x = 数值, y = 分组)) +
  geom_density_ridges(fill = "#4292c6", alpha = 0.6) +  # 填充色和透明度
  theme_light() +
  labs(x = "数值范围", y = "原数据列")

补充说明

  • 如果不需要山脊的重叠效果,可调整scale参数(比如scale = 0.9)控制曲线间距;
  • 若不想使用ggridges,也可以用geom_density()配合position = "dodge",但ggridges专门针对山脊图做了优化,实现更简便。

内容的提问来源于stack exchange,提问作者Marti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 02:32:40