2013-01-24 10 views
10

Sto provando a creare un grafico sfaccettato utilizzando ggplot e geom_errorbar. Tuttavia, ogni sfaccettatura differente può avere intervalli x molto diversi e quindi la larghezza della barra degli errori non sembra "buona". Ecco un MWE:ggplot larghezza geom_errorbar quando sfaccettatura (e scala = "libero")

library(ggplot2) 
test <- data.frame(group=rep(c(1,2,3),each=10), ymin=rnorm(30), ymax=rnorm(30)) 
test$x <- rnorm(30) * (1+(test$group==1)*20) 
ggplot(test, aes(x=x, ymin=ymin, ymax=ymax)) + 
    geom_errorbar(width=5) + facet_wrap(~ group, scale="free_x") 
ggplot(test, aes(x=x, ymin=ymin, ymax=ymax)) + 
    geom_errorbar(width=.2) + facet_wrap(~ group, scale="free_x") 

Nella prima trama, le barre di errore per il gruppo 1 sembrano grandi, ma 2 e 3 sono di gran lunga troppo largo. Nel secondo grafico, le barre di errore sono troppo piccole per il gruppo 1. C'è un modo semplice per risolvere questo problema? Sto pensando che potrei semplicemente usare width = 0, ma vorrei evitarlo.

First Plot

Second Plot

risposta

11

soluzione per questo problema sarebbe quello di aggiungere al vostro frame di dati nuova colonna wd che contiene la larghezza delle errorbars per ogni livello.

test <- data.frame(group=rep(c(1,2,3),each=10), ymin=rnorm(30), ymax=rnorm(30)) 
test$x <- rnorm(30) * (1+(test$group==1)*20) 
test$wd<-rep(c(10,0.5,0.5),each=10) 

quindi utilizzare questo nuova colonna per impostare width= in geom_errorbar(). Dovrebbe essere impostato all'interno della chiamata aes().

ggplot(test, aes(x=x, ymin=ymin, ymax=ymax)) + 
    geom_errorbar(aes(width=wd)) + facet_wrap(~ group, scale="free_x") 

enter image description here

Problemi correlati