将正态曲线叠加到 ggplot2 中的直方图

Roy*_*tty 1 overlay r ggplot2

我想为具有正态分布的名为“Dist”的向量绘制直方图,并用总体参数覆盖正态曲线。我在 stackoverflow 中找到了几篇关于同一主题的帖子,但没有找到我收到的错误消息。

plot1 <-ggplot(data = dist) + 
  geom_histogram(mapping = aes(x = dist), fill="steelblue", colour="black", binwidth = 1) +
  ggtitle("Frequences")
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我已经尝试了几件事来向先前的图添加正态曲线:

首先,将一个函数添加到直方图块代码中,并具有所需的值:

stat_function(fun = dnorm, args = list(mean = mu2, sd = sd2))
Run Code Online (Sandbox Code Playgroud)

但是这段代码不会向情节添加任何内容。结果是一样的,只是直方图。

而且,创建一条曲线并将其添加到绘图中。

#Create the curve data
x <- seq(8, 24, length.out=100)
y <- with(dist, data.frame(x = x, y = dnorm(x, mean(mu2), sd(sd2))))

#add the curve to the base plot
plot1 + geom_line(data = y, aes(x = x, y = y), color = "red")
Run Code Online (Sandbox Code Playgroud)

这给了我下一条错误消息:

删除了 100 行包含缺失值 (geom_path)。

但我实际上没有在向量中找到任何删除或空值,所以我不确定如何解决这个问题。

我也可以在没有 ggplot2 的情况下以一种非常简单的方式做到这一点,尽管我有兴趣在 ggplot2 中做到这一点:

hist(dist$dist, freq =FALSE, main="histogram")
curve(dnorm(x, mean = mu2, sd = sd2), from = 8, to = 24, add = TRUE)
Run Code Online (Sandbox Code Playgroud)

L_W*_*L_W 5

我怀疑这stat_function确实增加了正态分布的密度。但是 y 轴范围只是让它在图的底部一直消失。如果您将直方图缩放到密度aes(x = dist, y=..density..)而不是绝对计数,则您的曲线dnorm应该变得可见。

(作为旁注,您的分布在我看来并不正常。您可能想检查一下,例如使用qqplot

library(ggplot2)

dist = data.frame(dist = rnorm(100))

plot1 <-ggplot(data = dist) + 
  geom_histogram(mapping = aes(x = dist, y=..density..), fill="steelblue", colour="black", binwidth = 1) +
  ggtitle("Frequences") +
  stat_function(fun = dnorm, args = list(mean = mean(dist$dist), sd = sd(dist$dist)))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明