在ggplot中使用stat_function时对曲线段进行着色

时间:2014-11-05 01:28:42

标签: r colors ggplot2

我绘制了一条z曲线,并使用geom_segment为曲线下方的区域着色。

我使用

绘制了z分布
p <- ggplot(data.frame(x = c(-3, 3)), aes(x)) + stat_function(fun = dnorm)

enter image description here

我想为曲线的各个部分着色,使曲线的颜色与其下方x轴上的颜色相匹配。

由于我使用stat_function,我觉得修改它的特性的机会较少。

有没有人尝试过类似的壮举并找到了办法呢?

1 个答案:

答案 0 :(得分:2)

dnorm_segment <- function(x, min = 0, max = 1) dnorm(x)*ifelse(x>=min & x<=max, 1, NA)
zero_segment <- function(x, min = 0, max = 1) ifelse(x>=min & x<=max, 0, NA)
plot_both <- function(min, max, colour) 
{
  args <- list(min = min, max = max)
  list(
    stat_function(fun = dnorm_segment, col = colour, size = 3, args = args, n = 1001),
    stat_function(fun = zero_segment, col = colour, size = 3, args = args, n = 1001)
  )
}

ggplot(data.frame(x = c(-3, 3)), aes(x)) + 
  stat_function(fun = dnorm) + 
  plot_both(-3, -2, "purple") +
  plot_both(-2, -1, "yellow")
# + etc

enter image description here