我想为具有正态分布的名为“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)
我怀疑这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)
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |