R geom_ribbon неправильно затеняет область под кривой плотности на интервале

Я пытаюсь заштриховать область под графиком логнормальной плотности для определенного интервала, используя приведенный ниже код. Это работало для меня в прошлом, используя другие функции плотности и интервалы, но по какой-то причине теперь это дает дефект, который вы можете видеть на графике.

рис 1

library(ggplot2)
library(plyr)
library(dplyr)
library(tidyr)

x <- seq(0, 43, 0.1)

x_min <- 16
x_max <- 22
df <- data.frame(x = x, f = dlnorm(x, meanlog = 2.5,
                                     sdlog = 0.24))
df <- df %>% mutate(area = ifelse(x >= x_min & x < x_max,
                                      "Participating", "Not Participating"))
gg <- ggplot(data = df, aes(x = x, ymin = 0, ymax = f, fill = area))
gg <- gg + geom_ribbon()
gg <- gg + theme(legend.title = element_blank())
gg

person ben    schedule 10.11.2018    source источник


Ответы (1)


Проблема здесь в том, что вы пытаетесь создать ленту, состоящую из двух частей. Следовательно, две предполагаемые красные области пытаются соединиться друг с другом: ymax, где заканчивается левая область, и ymax, где начинается правая, и то же самое для ymin. Вероятно, в прошлом вы всегда использовали этот метод для хвостов распределения, и эта проблема никогда не возникала.

Чтобы решить эту проблему, вам нужно как-то вручную иметь два файла geom_ribbon. Не особенно навязчивый способ был бы

gg <- ggplot(data = df, aes(x = x, ymin = 0, ymax = f))
gg <- gg + geom_ribbon(aes(fill = factor("Not participating")))
gg <- gg + geom_ribbon(data = df[df$area == "Participating", ], aes(fill = area))
gg <- gg + theme(legend.title = element_blank())

введите здесь описание изображения

В зависимости от того, что вы хотите сделать с цветами, это потенциально может быть дополнительно изменено/упрощено.

person Julius Vainora    schedule 10.11.2018