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

使用geom_density_ridges绘制带条件填充的连续密度脊图问题

解决密度脊图条件填充断裂问题

你遇到的问题是因为直接用fill = values > 0会让ggplot将每个类别(recipe)按填充条件再次分组,导致脊图被拆分成多个片段。要实现连续脊图的交替填充,需要用支持渐变填充的几何对象,并基于密度曲线的x轴值来判断填充条件,具体步骤如下:

修正后的代码

library(tidyverse)
library(ggridges)

set.seed(123) # 设置随机种子保证结果可复现
tibble(
    A = rnorm(4e3, 0, .25),
    B = rnorm(4e3, 0.2, .25),
    C = rnorm(4e3, 0.4, .25),
) |>
pivot_longer(
    everything(),
    names_to = 'recipe',
    values_to = 'values'
) |>
ggplot(aes(x = values, y = recipe)) +
  stat_density_ridges(
    geom = "ridgeline_gradient", # 使用支持渐变填充的几何对象
    rel_min_height = 0.005,
    aes(fill = after_stat(x > 0), group = recipe) # 基于密度曲线的x值判断填充,确保分组正确
  ) +
  scale_y_discrete(expand = c(0.01, 0)) +
  scale_x_continuous(expand = c(0.01, 0)) +
  scale_fill_manual(values = c("#636363", "#bdbdbd")) # 自定义正负区域填充色
  theme_ridges()

关键说明

  • geom = "ridgeline_gradient":这是实现连续脊图渐变填充的核心,替代默认的geom_density_ridges(仅支持离散填充)。
  • after_stat(x > 0):使用密度计算后的x轴值(而非原始样本值)来判断填充条件,确保填充是沿密度曲线的x轴范围划分的。
  • group = recipe:强制每个recipe作为独立分组,避免被填充条件拆分,保证脊图的连续性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:04:53