2016-06-04 5 views
2

У меня есть последовательность нормально распределенных задних плотностей от байесовского обновления верований о параметре в модели. Предположу, что последовательности средств и стандартных отклонений апостериорных являютсяКак построить набор вращающихся плотностей в ggplot2?

mean <- c(5,4,3,2,1) 
sd <- c(7,6,5,4,3) 

В случае, если распределение N (5,7) является первым задним, N (4,6) является вторым задним и так далее. Я хотел бы построить их как последовательность плотностей, чтобы оси были повернуты (поддержка распределения идет снизу вверх) и таким образом, чтобы плотности были в порядке слева направо. Я понимаю, как строить плотности с помощью stat_function и как помещать графики в грани с facet_grid, но я изо всех сил стараюсь объединить все это вместе.

ответ

2

Это то, что вы имели в виде:

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() 

enter image description here

Или с цветной эстетикой вместо огранки:

ggplot(melt(dat, id.var="x"), aes(x, value, color=variable)) + 
    geom_line() + labs(color="") + 
    coord_flip() + 
    theme_bw() 

enter image description here

Изначально я пытался для этого, не создавая отдельный кадр данных. Вот как это сделать, но я не был уверен, как это сделать, например, с помощью этого метода, например, с эстетикой цвета или с фасеткой (и 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() 
+0

Да, первый из них идеально подходит. Спасибо! – Ivan

Смежные вопросы