2014-09-11 14 views
8

Considerate questi dati (si noti che foo è in realtà un fattore.):punti scherma e barre di errore con ggplot

foo bar outcome ci 
1 a 0.683333333 0.247447165 
2 b 0.941666667 0.180356565 
3 c 0.783333333 0.335337789 
1 d 0.866666667 0.204453706 
2 e 0.45 0.303059647 
3 f 0.325 0.340780173 

Voglio per tracciare più bar s per foo valore, con le loro outcome errore e bar con CI . Ecco quello che faccio:

ggplot(ex, aes(foo, outcome, label = bar)) + 
    geom_point(position = position_dodge(.1)) + 
    geom_errorbar(aes(ymin = outcome - ci, ymax = outcome + ci), position = position_dodge(.1)) + 
    geom_text(hjust = 2) 

ottengo:

Ma ho voluto che schivare le barre di errore e punti così posso vedere la sovrapposizione. Using position_jitter did that, ma era totalmente casuale (o "clunky") - Non voglio quello.

Come si possono compensare le singole osservazioni?

Oppure si tratta di un bug con ggplot? Il example here anche shows this error.

risposta

9

Una possibilità è a group da "barra". Nota che ho anche il geom_text.

dodge <- position_dodge(.1) 

ggplot(data = df, aes(x = foo, y = outcome, group = bar, label = bar)) + 
    geom_point(position = dodge) + 
    geom_errorbar(aes(ymin = outcome - ci, ymax = outcome + ci), position = dodge) + 
    geom_text(hjust = 2, position = dodge) 

enter image description here

+1

Briliant, grazie. Puoi indicarmi la documentazione di 'group' o spiegare perché funziona (o cosa fa) in questo caso? – slhck

+0

@slhck, puoi dare un'occhiata al testo della guida su "? Aes_group_order', o [** qui **] (http://docs.ggplot2.org/current/aes_group_order.html) dove trovi anche l'output di tutti gli esempi. – Henrik

Problemi correlati