R 使用stat_函数时向ggplot添加图例

R 使用stat_函数时向ggplot添加图例,r,ggplot2,R,Ggplot2,我试图在ggplot中添加一个图例,以区分模拟正态分布和生成的正态分布。下面是我的代码 set.seed(1) lambda = .2 n = 40 sim = 10000 means = replicate(sim, expr = mean(rexp(n,lambda))) ggplot(data.frame(means), aes(x=means)) + geom_density() + stat_function(fun = dnorm, c

我试图在ggplot中添加一个图例,以区分模拟正态分布和生成的正态分布。下面是我的代码

set.seed(1)
lambda = .2
n = 40
sim = 10000
means = replicate(sim, expr = mean(rexp(n,lambda)))
ggplot(data.frame(means), aes(x=means)) + 
           geom_density() + 
           stat_function(fun = dnorm, color = "blue", 
                         arg = list(mean = 1/lambda, sd=sqrt(lambda^-2/n))) + 
           scale_colour_manual("Legend title", values = c("red", "blue"))

我试着使用scale\u color\u手册作为另一个stackoverflow答案,但我无法得到一个图例来显示

参考答案

为了在ggplot2中获得图例,您需要在美学中映射颜色变量:

ggplot(data.frame(means), aes(x = means)) + 
  geom_density(aes(color = "a")) + 
  stat_function(fun = dnorm, aes(color = "b"), 
                arg = list(mean = 1/lambda, sd = sqrt(lambda^-2/n))) + 
  scale_colour_manual("Legend title", values = c("a" ="red","b" = "blue"))
试试:

set.seed(1)
lambda = .2
n = 40
sim = 10000
newvar = rnorm(sim, mean = 1/lambda, sd=sqrt(lambda^-2/n) )
means = replicate(sim, expr = mean(rexp(n,lambda)))
ddf = data.frame(means, newvar)
mm = melt(ddf)
ggplot(mm) +geom_density( aes(value, group=variable, color=variable) )