这个论坛已经为我编写代码提供了很多帮助,我希望该代码返回一个特定变量的直方图,该直方图上覆盖着其经验正态曲线。我用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))
这也没有解决-返回错误消息,指出参数不是数字。
希望大家能帮助我!在此先多谢!
最好,扬尼克
您的曲线和直方图的y比例不同,并且您没有在上查看帮助页面stat_function
,否则您将把参数放在alist
中,如示例中清楚显示的那样。您aes
在初始ggplot
通话中做的也不正确。我真诚地建议阅读更多的教程和书籍(或至少是帮助页面),而不是逐行学习ggplot。
解决stat_function
arg问题和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] 删除。
我来说两句