ggplot: заполнить небольшую область под нормальной кривой: удалить область "соединения" - PullRequest
0 голосов
/ 10 мая 2018

Я хотел бы заполнить небольшую область под кривой. Однако ленточные гемы объединяют две «части» дистрибутива.

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 Ответ

0 голосов
/ 10 мая 2018

Проблема в том, как красная лента интерполируется по синей области, где нет красных значений, поэтому прямая линия рисуется до следующей красной точки. Вы можете обойти эту проблему, просто построив сначала всю ленту, не учитывая 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))

Результат:

enter image description here

...