我想要用经验的和正常的密度曲线来叠加一个ggg图直方图(y轴=计数)。我试过:
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..density..),
bins = 40, colour = "black", fill = "white") +
geom_line(aes(y = ..density.., color = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5)) +
scale_colour_manual(name = "Colors", values = c("red", "blue"))

但是这里的密度是y尺度,我想要频率作为y轴。
我的第二次试验产生了图的频率(计数)为y轴,但只有经验密度。
library(ggplot2)
set.seed(1234)
v <- as_tibble(rnorm(1000, 10, 2.5))
b <- seq(0, 20, by = 0.5)
p1 <- ggplot(v, aes(x = value)) +
geom_histogram(aes(y = ..count..),
breaks = b,
binwidth = 0.5,
colour = "black",
fill = "white") +
geom_line(aes(y = ..density.. * (1000 * 0.5),
color = 'Empirical'),
stat = 'density') +
scale_colour_manual(name = "Colors", values = c("red", "blue"))在同一幅图中,我也无法显示出一条德范曲线。例如,当我尝试下一条线时,我得到了x轴上的密度曲线(蓝线)。
p2 <- p1 + stat_function(fun = dnorm, aes(color = 'Normal'),
args = list(mean = 10, sd = 2.5))
p2

我假设我必须用双宽度来调整曲线(就像经验线一样),但我不知道怎么做。
我在这里搜索了这个问题,发现了许多类似的问题。但它们都是针对我的第一次试验(密度为y轴),一个经验叠加与计数轴(我的第二次试验)或使用其他(基本)绘图命令,我不熟悉。
发布于 2018-06-26 14:58:44
我按照@ answer 20650的链接重写了代码,并将@PatrickT的答案应用于我的问题。
library(ggplot2)
n = 1000
mean = 10
sd = 2.5
binwidth = 0.5
set.seed(1234)
v <- as_tibble(rnorm(n, mean, sd))
b <- seq(0, 20, by = binwidth)
ggplot(v, aes(x = value, mean = mean, sd = sd, binwidth = binwidth, n = n)) +
geom_histogram(aes(y = ..count..),
breaks = b,
binwidth = binwidth,
colour = "black",
fill = "white") +
geom_line(aes(y = ..density.. * n * binwidth, colour = "Empirical"),
size = 1, stat = 'density') +
stat_function(fun = function(x)
{dnorm(x, mean = mean, sd = sd) * n * binwidth},
aes(colour = "Normal"), size = 1) +
labs(x = "Score", y = "Frequency") +
scale_colour_manual(name = "Line colors", values = c("red", "blue"))决定性的变化是在stat-function行,其中提供了必要的适应为n和二进制宽度。此外,我不知道可以将参数传递给aes()。

https://stackoverflow.com/questions/51043753
复制相似问题