我想在曲线下填充一小块区域。然而,带状宝石加入了两个部分"分配。
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))
我认为避免这种行为的方法之一是将分布分成三个不同的部分,并用相同的颜色填充它们中的两个。但是,我正在寻找一种更加整洁和优雅的方式。
答案 0 :(得分:7)
问题在于红色条带在蓝色区域内插入的方式,其中没有红色值,因此将直线绘制到下一个红色点。您可以先解决整个功能区,而不是考虑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))
结果: