代码之家  ›  专栏  ›  技术社区  ›  ben

R geom_ribbon未在间隔内正确着色密度曲线下的区域

  •  1
  • ben  · 技术社区  · 6 年前

    fig 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
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Julius Vainora    6 年前

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

    enter image description here