ggplot:在正常曲线下填充小区域:删除"加入"区域

Dom*_*ski 4 r area fill ggplot2

我想在曲线下填充一个小区域.然而,带状宝石连接分布的两个"部分".

library(tidyverse)
density(rnorm(1000, 0, 1)) %$%
  data.frame(x=x, y=y) %>%
  mutate(area = dplyr::between(x, 1.5, 2.6)) %>%
  ggplot() +
  geom_ribbon(aes(x = x, ymin = 0, ymax = y, fill = area))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我相信避免这种行为的方法之一是将分布分成三个不同的部分,并用相同的颜色填充它们中的两个.但是,我正在寻找一种更加整洁和优雅的方式.

Mar*_*ius 7

问题是红色条带在蓝色区域内插入的方式,其中没有红色值,因此直线被绘制到下一个红点.您可以通过首先绘制整个功能区,而不是计算area,然后在顶部绘制子集来解决此问题:

library(tidyverse)
density(rnorm(1000, 0, 1)) %$%
    data.frame(x=x, y=y) %>%
    mutate(area = dplyr::between(x, 1.5, 2.6)) %>%
    ggplot(aes(x = x, ymin = 0, ymax = y)) +
    geom_ribbon(aes(fill = "Outside")) +
    geom_ribbon(aes(fill = "Inside"), data = function(df) df %>% filter(area))
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述