首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ggplot2中绘制一组旋转密度?

如何在ggplot2中绘制一组旋转密度?
EN

Stack Overflow用户
提问于 2016-06-05 04:14:52
回答 1查看 183关注 0票数 2

我有一个关于模型中参数的贝叶斯更新信念的正态分布后验密度序列。假设后方的均值和标准差序列为,

代码语言:javascript
复制
mean <- c(5,4,3,2,1)
sd <- c(7,6,5,4,3)

其中分布N(5,7)是第一个后验,N(4,6)是第二个后验,依此类推。我想把它们绘制成密度序列,这样轴就会旋转(分布的支持度从下到上),这样密度从左到右都是有序的。我知道如何使用stat_function绘制密度图,以及如何使用facet_grid将图放入面中,但我正在努力将它们结合在一起。

EN

回答 1

Stack Overflow用户

发布于 2016-06-05 05:47:21

这就是你所想的:

代码语言:javascript
复制
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()

或者使用色彩美学而不是刻面:

代码语言:javascript
复制
ggplot(melt(dat, id.var="x"), aes(x, value, color=variable)) +
  geom_line() + labs(color="") + 
  coord_flip() + 
  theme_bw()

最初,我试图在不创建单独的数据框架的情况下这样做。有一种方法可以做到这一点,但我不太确定如何使用这种方法映射到颜色美学或刻面( this SO answer from @hadley认为这是不可能的(尽管那是六年前的事情,现在可能情况不同了):

代码语言:javascript
复制
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()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37634599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档