如何用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
相关产品推荐
相关产品推荐

