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

如何在stat_density()中为x轴的切片区间填充不同颜色?

单条密度曲线按区间分色填充实现方案

问题原因

你原代码的问题在于:提前对原始x值做cut分组并映射给fill后,ggplot会默认按breaks分组独立计算每组的密度,最终生成3条独立的密度曲线,和你要的「单条密度曲线按x区间切分填充」的需求不符。

实现方法

stat_density本身可以配合after_stat()语法直接实现该需求,不需要提前手动计算密度值,也不需要单独调用geom_area,示例代码如下:

library(tidyverse)

tibble(x = rnorm(1000, 0, 1)) %>%
  ggplot(aes(x = x)) + 
  # 全局计算密度后再按x区间赋值填充色
  stat_density(
    geom = "area",
    aes(fill = after_stat(cut(x, c(-Inf, -1, 1, Inf))))
  ) +
  # 可选:自定义填充色和图例名称
  scale_fill_brewer(palette = "Set2", name = "x区间")

逻辑说明

  • after_stat()的作用是读取stat_density计算完成后生成的统计值,这里我们取计算后密度曲线对应的x坐标,再做区间切分
  • fill映射是在全局密度计算完成后才执行的,不会触发按fill分组计算密度的逻辑,最终只会生成一条完整的密度曲线,按设定的x区间填充不同颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 07:54:03