ggplot:如何填充正态分布曲线下的小面积并去除“连接”区域

4
我想填补曲线下的一个小区域。然而,带状几何图形将分布的两个“部分”连接在一起。
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))

enter image description here

我认为避免这种行为的一种方法是将分布分成三个不同的部分,并用相同的颜色填充其中两个部分。然而,我正在寻找更加简洁和优雅的方式。

1个回答

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))

结果:

在此输入图片描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接