我试图制作密度值的直方图,并用密度函数的曲线(而不是密度估计值)覆盖它.
使用简单的标准正常示例,这里有一些数据:
x <- rnorm(1000)
Run Code Online (Sandbox Code Playgroud)
我可以:
q <- qplot( x, geom="histogram")
q + stat_function( fun = dnorm )
Run Code Online (Sandbox Code Playgroud)
但这给出了直方图在频率而不是密度上的比例.与..density..我能得到直方图的适度规模:
q <- qplot( x,..density.., geom="histogram")
q
Run Code Online (Sandbox Code Playgroud)
但现在这给出了一个错误:
q + stat_function( fun = dnorm )
Run Code Online (Sandbox Code Playgroud)
有没有我没看到的东西?
另一个问题是,有没有办法绘制一个函数的曲线,比如curve(),然后不作为图层?
我一直在尝试用ggplot 2在我的直方图上叠加一条正常曲线.
我的公式:
data <- read.csv (path...)
ggplot(data, aes(V2)) +
geom_histogram(alpha=0.3, fill='white', colour='black', binwidth=.04)
Run Code Online (Sandbox Code Playgroud)
我尝试了几件事:
+ stat_function(fun=dnorm)
Run Code Online (Sandbox Code Playgroud)
....没有改变任何事情
+ stat_density(geom = "line", colour = "red")
Run Code Online (Sandbox Code Playgroud)
...在x轴上给了我一条直线红线.
+ geom_density()
Run Code Online (Sandbox Code Playgroud)
对我不起作用,因为我想将我的频率值保持在y轴上,并且不需要密度值.
有什么建议?
提前感谢任何提示!
找到解决方案
+geom_density(aes(y=0.045*..count..), colour="black", adjust=4)
这个论坛已经帮助我制作了很多代码,我希望这些代码能够返回一个特定变量的直方图,该变量与其经验正态曲线重叠.我使用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)
Run Code Online (Sandbox Code Playgroud)
我也尝试指定dnorm:
stat_function(fun = dnorm(mtcars$mpg, mean = mean(mtcars$mpg), sd = sd(mtcars$mpg))
Run Code Online (Sandbox Code Playgroud)
这也没有用 - 返回一条错误消息,声明参数不是数字.
希望你们有人能帮助我!非常感谢提前!
最好的,Jannik