我有一个关于模型中参数的贝叶斯更新信念的正态分布后验密度序列。假设后方的均值和标准差序列为,
mean <- c(5,4,3,2,1)
sd <- c(7,6,5,4,3)其中分布N(5,7)是第一个后验,N(4,6)是第二个后验,依此类推。我想把它们绘制成密度序列,这样轴就会旋转(分布的支持度从下到上),这样密度从左到右都是有序的。我知道如何使用stat_function绘制密度图,以及如何使用facet_grid将图放入面中,但我正在努力将它们结合在一起。
发布于 2016-06-05 05:47:21
这就是你所想的:
library(reshape2)
library(ggplot2)
m <- c(5,4,3,2,1)
s <- c(7,6,5,4,3)
x=seq(-20,30,0.1)
# Create a data frame of density values
dat = data.frame(x, mapply(function(m,s) {dnorm(x, m, s)}, m, s))
names(dat) = c("x", paste0("Mean=",m," SD=",s))
ggplot(melt(dat, id.var="x"), aes(x, value)) +
geom_line() +
coord_flip() +
facet_grid(. ~ variable) +
theme_bw()

或者使用色彩美学而不是刻面:
ggplot(melt(dat, id.var="x"), aes(x, value, color=variable)) +
geom_line() + labs(color="") +
coord_flip() +
theme_bw()

最初,我试图在不创建单独的数据框架的情况下这样做。有一种方法可以做到这一点,但我不太确定如何使用这种方法映射到颜色美学或刻面( this SO answer from @hadley认为这是不可能的(尽管那是六年前的事情,现在可能情况不同了):
ggplot(data.frame(x), aes(x)) +
mapply(function(m, s) {
stat_function(fun = dnorm, args = list(mean = m, sd = s))
}, m = m, s = s) +
coord_flip()https://stackoverflow.com/questions/37634599
复制相似问题