使用ggplot2在直方图上绘制法线曲线:代码在0处产生直线

扬尼克

这个论坛已经为我编写代码提供了很多帮助,我希望该代码返回一个特定变量的直方图,该直方图上覆盖着其经验正态曲线。我用ggplot2和stat_function编写代码。不幸的是,该代码生成了具有正确直方图的图,但法线曲线为零的直线(由以下代码生成的图中的红线)。

在这个最小的示例中,我使用了mtcars数据集-原始数据集的ggplot和stat_function行为相同。

这是编写和使用的代码:

library(ggplot2)
mtcars
hist_staff <- ggplot(mtcars, aes(x = mtcars$mpg)) + 
  geom_histogram(binwidth = 2, colour = "black", aes(fill = ..count..)) +
  scale_fill_gradient("Count", low = "#DCDCDC", high = "#7C7C7C") +
  stat_function(fun = dnorm, colour = "red")
print(hist_staff)

我也尝试指定dnorm:

stat_function(fun = dnorm(mtcars$mpg, mean = mean(mtcars$mpg), sd = sd(mtcars$mpg))

这也没有解决-返回错误消息,指出参数不是数字。

希望大家能帮助我!在此先多谢!

最好,扬尼克

hrbrmstr

您的曲线和直方图的y比例不同,并且您没有在上查看帮助页面stat_function,否则您将把参数放在alist中,如示例中清楚显示的那样。aes在初始ggplot通话中做的也不正确我真诚地建议阅读更多的教程和书籍(或至少是帮助页面),而不是逐行学习ggplot。

解决stat_functionarg问题和ggplot``aes问题后,您需要解决y轴比例差异。为此,您需要为直方图切换y以使用来自基础stat_bin计算数据帧的密度

library(ggplot2)

gg <- ggplot(mtcars, aes(x=mpg))
gg <- gg + geom_histogram(binwidth=2, colour="black", 
                          aes(y=..density.., fill=..count..))
gg <- gg + scale_fill_gradient("Count", low="#DCDCDC", high="#7C7C7C")
gg <- gg + stat_function(fun=dnorm,
                         color="red",
                         args=list(mean=mean(mtcars$mpg), 
                                  sd=sd(mtcars$mpg)))

gg

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章