2013-07-05 7 views
9

Sto usando stat_summary in ggplot per tracciare un grafico a barre. Vorrei cambiare la larghezza delle barre. Di solito questo viene fatto usando l'opzione width. Con i dati pre-sintetizzato e stat="identity funziona come previsto:Modifica della larghezza della barra quando si utilizza stat_summary con ggplot

data <- data.frame(group=rep(c("a","b"), 20), y=rnorm(40,100,50)) 
se <- function(x, na.rm=T) sd(x, na.rm=na.rm)/sqrt(length(x)) 
data2 <- cast(data, group ~ ., value="y", c(mean, se)) 
ggplot(data2, aes(group, mean, ymin=mean-1.96*se, ymax=mean+1.96*se)) + 
geom_bar(stat="identity", width=0.5) + geom_errorbar(width=0, size=2) 

Tuttavia, nello stesso appezzamento su dati originali utilizzando stat_summary, le barre non cambiano la larghezza, mentre errorbars fanno:

ggplot(data, aes(group, y)) + stat_summary(fun.y="mean", geom="bar", width=0.5) + 
stat_summary(fun.data="mean_cl_normal", geom="errorbar", width=0, size=2) 

C'è un modo per modificare la larghezza della barra anche quando si utilizza stat_summary?

Dal momento che il primo esempio funziona, questa domanda, ovviamente, ha già un work-around, però, mi piacerebbe davvero sapere se c'è un modo per farlo con stat_summary, perché lo uso molto ed è spesso più conveniente.

Grazie!

+2

Benvenuti a StackOverflow. Congratulazioni per una prima domanda ben scritta con un esempio riproducibile !! – mnel

risposta

8

Questo è l'oggetto di un problemi noti 444 e 235

La soluzione attuale è quella di passare width all'interno aes - questo va contro i principi di ggplot (mappatura vs impostazione), ma almeno funziona .. ..

Si noti che è possibile utilizzare linerange se si desidera visualizzare le barre di errore senza barre di ripristino!

ggplot(data, aes(group, y)) + 
stat_summary(fun.y="mean", geom="bar", aes(width=0.5)) + 
    stat_summary(fun.data="mean_cl_normal", geom="linerange", size=2) 

enter image description here

+0

Funziona, grazie! Lo userò per il momento mentre il problema è stato risolto. – M4RT1NK4

+0

E grazie anche per la punta della linerange! – M4RT1NK4

+0

Ho cercato questo per molto tempo e ora l'ho trovato. Grazie per il consiglio molto utile. – upendra

Problemi correlati