2012-05-02 3 views
4

Я пытаюсь создать столбчатую диаграмму с errorbars * с помощью ggplot2, подобный приведенному ниже участка: Plot I'm trying to replicateStacked barplot с errorbars использованием ggplot2

Я использовал следующий код:

df <- data.frame(substrate = gl(6, 2, 12, labels=letters[1:6]), 
       depth = gl(2, 1, 12, labels=c("surf", "deep")), 
       mean = 10 * runif(12), 
       err = runif(12)) 
p <- ggplot(df, aes(x=depth, y=mean, fill=substrate)) + geom_bar(stat="identity") + coord_flip() 
p + geom_errorbar(aes(x=depth, ymin=mean-err, ymax=mean+err)) 

Что дает мне это: enter image description here

похоже центре errorbars в положении среднего вместо среднего + средства на «предыдущих» подложках. То есть центр ошибкиbar a должен быть в среднем a, центр ошибки b должен быть в среднем a + средний b и т. Д.

Кто-нибудь знает, как это произошло в ggplot2?

* Я понимаю, что есть отличные теоретические причины не отображать данные таким образом - но мы не всегда можем сами решить, как представить наши данные!

ответ

5

Я полагаю, что вы можете сделать это с помощью geom_segment, но ваш пример имеет только бары, идущие в одном направлении, что кажется более умным. Так что я взломал что-то вместе с geom_segment:

df <- data.frame(substrate = gl(6, 2, 12, labels=letters[1:6]), 
       depth = gl(2, 1, 12, labels=c("surf", "deep")), 
       mean = 10 * runif(12), 
       err = runif(12)) 
df <- ddply(df,.(depth),transform,ystart = cumsum(mean),yend = cumsum(mean) + err) 
p <- ggplot(df, aes(x=depth, y=mean, fill=substrate)) + 
     geom_bar(stat="identity") 
p + geom_segment(aes(xend = depth,y = ystart,yend = yend)) + 
     geom_point(aes(x = depth,y = yend),shape = "|",show_guide = FALSE) + 
     coord_flip() 

enter image description here

+0

однонаправленные бары намного лучше - они снижают вероятность перекрытия между стойками. –

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