如何在R的ridgeline山脊图中根据高度添加垂直颜色渐变填充
实现方案
当前可以通过ggridges内置的计算变量+填充映射直接实现需求,不需要依赖已失效的第三方包,同时支持负值场景,具体实现如下:
1. 密度山脊图场景(对应示例代码类型)
直接将fill映射到stat(density)即可,该变量返回的就是当前位置的密度高度,完美匹配“越高颜色越深”的需求:
library(ggplot2) library(ggridges) ggplot(lincoln_weather, aes(x = `Mean Temperature [F]`, y = `Month`, fill = stat(density))) + geom_density_ridges_gradient(scale = 3, size = 0.3, rel_min_height = 0.01) + # 可自定义渐变配色,这里用深蓝到浅蓝的渐变示例 scale_fill_viridis_c(name = "密度高度", option = "mako") + labs(title = 'Temperatures in Lincoln NE')
2. 自定义高度场景(使用geom_ridgeline)
只要将fill映射到你数据中存储高度的字段即可,原生支持负值:
# 先构造带负值的示例数据 library(ggplot2) library(ggridges) x <- rep(1:100, 3) group <- rep(c("A", "B", "C"), each = 100) height <- c(dnorm(1:100, 50, 10) - 0.02, dnorm(1:100, 40, 15) - 0.01, dnorm(1:100, 60, 8)) df <- data.frame(x, group, height) # 绘图 ggplot(df, aes(x = x, y = group, height = height, fill = height)) + geom_ridgeline(scale = 1, size = 0.3) + scale_fill_viridis_c(name = "高度值", option = "mako") + labs(title = '自定义高度山脊图垂直渐变示例')
可选调整项
- 如果需要统一所有山脊的渐变阈值,可以在
scale_fill_viridis_c中添加limits = c(最小值, 最大值)参数,确保不同组的相同高度对应相同颜色。 - 若要过滤基线以下的填充,可以在
geom_ridgeline中添加min_height = 0参数。
内容的提问来源于stack exchange,提问作者mfalco
相关产品推荐
相关产品推荐

