R geom_ribbon在间隔上未正确隐藏密度曲线下的区域

时间:2018-11-10 18:13:33

标签: r ggplot2 density-plot

我正在尝试使用以下代码在对数正态密度图下的区域进行一定时间的阴影处理。过去使用其他密度函数和间隔对我来说是有效的,但是由于某种原因,它现在产生了可以在图形中看到的缺陷。

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 个答案:

答案 0 :(得分: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())

enter image description here

取决于您希望使用的颜色,可以对其进行进一步的修改/简化。