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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:15:01