раскрасьте область высокой задней плотности на ggplot его программе

#r #ggplot2 #plot #histogram #density-plot

Вопрос:

Я пытаюсь раскрасить свою гистограмму ggplot2 разными цветами. Для этого я попробовал, после некоторых исследований, следующий код. Единственная проблема-это легенда, которую я не могу контролировать, и она неточна.

 rdf <- data.frame(r=rSample)
r_lower = quantile(rSample,0.05)
r_upper = quantile(rSample,0.95)
rdf$breaks <- cut(rdf$r, breaks = c(r_lower,r_upper) )
rplot <- ggplot(rdf, aes(r, colour=breaks, fill=breaks))  
         geom_histogram(binwidth = 0.1, closed = "left", boundary=0, 
         alpha = 0.7, size = 0.1)  
         #theme(legend.position = "none")  
         labs( 
         x = "", y = "",
         title = "Posterior distribution of r",
         caption = "the red area represents the high posterior density region") 
         
rplot
 

введите описание изображения здесь

В легенде, которую я хочу, должно быть написано что-то вроде «красный» = «область с высокой задней плотностью» и «серый» = «область с низкой задней плотностью». Есть какие-нибудь идеи или предложения?

Большое спасибо.

Комментарии:

1. Смотрите ?scale_colour_discrete ; Я был бы рад ответить полным ответом, если бы вы могли привести воспроизводимый пример (т. Е. Поделиться своими данными).

2. ваш пример почти воспроизводим (откуда rSample он взялся? Является ли это, например, результатом rlnorm() ? Как бы то ни было, то, что вы здесь показываете, не является тем, что люди обычно называют «интервалом наибольшей задней плотности (HPD)»; то, что вы показываете, определяется областями хвоста, а не срезом плотности (см. coda::HPDinterval() )

3. У меня нет проблем с обменом данными, но я не знаю, как добавить сюда вектор из 40 000 реализаций. Однако scale_colour_discrete(labels=c("HPD","LPD")) решите мою проблему, большое спасибо. @BenBolker спасибо, что указали на мою ошибку в вычислении HPD, я действительно ошибся, несмотря на то, что я думаю, что для унимодального симметричного распределения результат очень похож.

4. (1) Рад, что вы решили свою проблему, вам предлагается опубликовать свой собственный ответ (возможно, вам придется подождать, пока истечет какой-то минимальный срок ожидания). (2) на самом деле вам не нужно 40 000 реализаций, чтобы продемонстрировать проблему — даже 100, вероятно, будут прекрасным минимальным воспроизводимым примером, или вы могли бы показать код с использованием rlnorm() или какого-либо другого генератора случайных чисел. (3) Для симметричного распределения верно, что HPD и квантильные интервалы идентичны. (Пример, который вы показываете, явно не симметричен …)