将任意函数添加到ggplot直方图中

时间:2012-10-13 21:50:25

标签: r ggplot2

上下文: 我有一些数据,我希望:

  1. 绘制它们的直方图
  2. 添加内核密度
  3. 添加“理论密度”
  4. 添加图例以区分2.和3.
  5. 考虑:

    X <- rnorm(1000,0,1)
    Y <- (X^2-1)/2
    ggplot(as.data.frame(Y), aes(x=Y)) + 
        geom_histogram(aes(y=..density..),      
                       binwidth=.2,
                       colour="black", fill="white") +
        geom_density(alpha=.2, fill="#FF6666") 
    

    enter image description here

    这完成了1.和2.但是我怎样才能达到3.和4.?我写了我想绘制的函数:

    myfunc <- function(x) {
        2*exp(-x-0.5)/(sqrt(2*x+1)*sqrt(2*pi))
    }
    

    欢迎任何其他评论/评论(我正在学习)

1 个答案:

答案 0 :(得分:4)

您的自定义函数在该域上的表现并不是很好,所以为了便于说明,我替换了另一个简单函数。

#Dummy data set for the legend
dat <- data.frame(x = rep(NA_integer_,2),
                  y = rep(NA_integer_,2),
                  grp = c('Theoretical','Estimated'))
ggplot(as.data.frame(Y), aes(x=Y)) + 
    geom_histogram(aes(y=..density..),      
                   binwidth=.2,
                   colour="black", fill="white") +
    geom_density(alpha=.2, fill="#FF6666",color = '#FF6666') + 
    stat_function(fun = function(x) exp(-x),colour = "blue") + 
    geom_point(data = dat,aes(x = x,y = y,color = grp)) + 
    scale_color_manual(name = "",values = c('#FF6666','blue'))

enter image description here

我对颜色略有不同,但你可以根据自己的需要进行调整。可能有一个更简洁的方法来做传奇,但“带有NA的数据框和分组变量”是我这种事情的标准方法。