直方图和pdf在同一图表中

时间:2012-08-22 19:30:59

标签: r

  

可能重复:
  Fitting a density curve to a histogram in R

我想在直方图和各种pdf的相同图表上绘图。我已经尝试过使用以下代码的一个pdf(从我在网络上找到的代码中采用):

hist(data, freq = FALSE, col = "grey", breaks = "FD")
.x <- seq(0, 0.1, length.out=100)
curve(dnorm(.x, mean=a, sd=b), col = 2, add = TRUE)

它给了我一个错误。你能告诉我吗? 多个pdf的诀窍是什么? 而且我观察到直方图似乎绘制了密度(在y轴上),而不是观察次数....我怎么能改变这个?

非常感谢!

2 个答案:

答案 0 :(得分:2)

它会绘制密度而不是频率,因为您指定了freq=FALSE。抱怨它完全按照你的要求去做是不公平的。

curve函数需要一个涉及x(不是.x)的表达式,并且它不需要您预先计算x值。你可能想要这样的东西:

a <- 5
b <- 2
hist( rnorm(100, a, b), freq=FALSE )
curve( dnorm(x,a,b), add=TRUE )

要了解下一个问题,如果指定freq=TRUE(或者只是将其保留为默认值)并添加曲线,那么曲线就会沿着底部运行(这就是绘制直方图的全部目的作为密度而不是频率)。你可以通过将curve给出的表达式按箱的宽度和总点数来缩放来解决这个问题:

out <- hist( rnorm(100, a, b) )
curve( dnorm(x,a,b)*100*diff(out$breaks[1:2]), add=TRUE )

虽然个人在y轴上没有标记标签的第一个选项(密度标度)对我来说更有意义。

答案 1 :(得分:0)

h<-hist(data, breaks="FD", col="red", xlab="xTitle", main="Normal pdf and     histogram")
xfit<-seq(min(data),max(data),length=100)
x.norm<-rnorm(n=100000, mean=a, sd=b)
yfit<-dnorm(xfit,mean=mean(x.norm),sd=sd(x.norm))
yfit <- yfit*diff(h$mids[1:2])*length(loose_All)
lines(xfit, yfit, col="blue", lwd=2)