【问题标题】:R geom_ribbon not shading area under density curve properly over intervalR geom_ribbon 在密度曲线下没有在间隔内正确着色区域
【发布时间】:2019-04-13 23:34:45
【问题描述】:

我正在尝试使用下面的代码为对数正态密度图下的区域着色一定的时间间隔。这在过去使用其他密度函数和间隔对我有用,但由于某种原因,现在它产生了您可以在图中看到的缺陷。

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

【问题讨论】:

    标签: r ggplot2 density-plot


    【解决方案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())
    

    根据您希望对颜色进行的处理,它可能会进一步修改/简化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-15
      • 2023-03-16
      • 2020-08-21
      • 2017-12-26
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-20
      相关资源
      最近更新 更多