Sac*_*amp 49 r histogram ggplot2
我试图制作密度值的直方图,并用密度函数的曲线(而不是密度估计值)覆盖它.
使用简单的标准正常示例,这里有一些数据:
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()
,然后不作为图层?
Ram*_*ath 51
干得好!
# create some data to work with
x = rnorm(1000);
# overlay histogram, empirical density and normal density
p0 = qplot(x, geom = 'blank') +
geom_line(aes(y = ..density.., colour = 'Empirical'), stat = 'density') +
stat_function(fun = dnorm, aes(colour = 'Normal')) +
geom_histogram(aes(y = ..density..), alpha = 0.4) +
scale_colour_manual(name = 'Density', values = c('red', 'blue')) +
theme(legend.position = c(0.85, 0.85))
print(p0)
Run Code Online (Sandbox Code Playgroud)
Axe*_*man 32
Ramnath答案的一个更简单的替代方案,通过观察到的均值和标准差,并使用ggplot
而不是qplot
:
df <- data.frame(x = rnorm(1000, 2, 2))
# overlay histogram and normal density
ggplot(df, aes(x)) +
geom_histogram(aes(y = stat(density))) +
stat_function(
fun = dnorm,
args = list(mean = mean(df$x), sd = sd(df$x)),
lwd = 2,
col = 'red'
)
Run Code Online (Sandbox Code Playgroud)
使用geom_density()
fromggplot2
怎么样?像这样:
df <- data.frame(x = rnorm(1000, 2, 2))
ggplot(df, aes(x)) +
geom_histogram(aes(y=..density..)) + # scale histogram y
geom_density(col = "red")
Run Code Online (Sandbox Code Playgroud)
这也适用于多峰分布,例如:
df <- data.frame(x = c(rnorm(1000, 2, 2), rnorm(1000, 12, 2), rnorm(500, -8, 2)))
ggplot(df, aes(x)) +
geom_histogram(aes(y=..density..)) + # scale histogram y
geom_density(col = "red")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
47763 次 |
最近记录: |