2012-08-13 17 views
19

Estoy tratando de trazar una barra de direcciones etiquetada con ggplot2 con barras positivas y negativas. Eso funciona hasta ahora, pero me gustaría establecer la etiqueta fuera de la barra, de modo que esté encima o debajo de la barra. Intenté establecer un ajuste en vjust = c(x1,...,xn) donde x es un valor positivo o negativo según el valor de la barra en geom_text(). Esto no funciona Acabo de recibir el mensaje de error Error: "Cuando configura la estética, solo pueden tomar un valor. Problemas: vjust"Cómo etiquetar una barra de barras con barras positivas y negativas con ggplot2

Con el comando de trazado normal que funciona. Quiero replicar este comando en ggplot2:

xpos <- barplot(d, col=mycols, main='Verteilung in Dresden 2004', 
     ylab='Anteil in %', xlab='Milieu', names.arg=l, 
     cex.axis=0.7, cex.names=0.7, ylim=c(0,max(d)+0.05)) 
boxed.labels(xpos,d+0.02,sprintf('%d%s', d*100, '%'), 
      bg='transparent', border=FALSE, cex=0.7) 

para que se vea como esto acaba en un agradable ... ;-)

¿Alguien tiene alguna sugerencia?

Gracias por su ayuda.

Respuesta

34

Esto hace el truco

library(plyr) 
library(ggplot2) 
library(scales) 
dtf <- data.frame(x = c("ETB", "PMA", "PER", "KON", "TRA", 
        "DDR", "BUM", "MAT", "HED", "EXP"), 
        y = c(.02, .11, -.01, -.03, -.03, .02, .1, -.01, -.02, 0.06)) 
ggplot(dtf, aes(x, y)) + 
    geom_bar(stat = "identity", aes(fill = x), legend = FALSE) + 
    geom_text(aes(label = paste(y * 100, "%"), 
       vjust = ifelse(y >= 0, 0, 1))) + 
    scale_y_continuous("Anteil in Prozent", labels = percent_format()) + 
    opts(axis.title.x = theme_blank()) 

enter image description here

+1

+1 buen uso de 'ifelse' – Andrie

+4

probablemente me utilizo -0,1 y 1,1 en lugar de 0 y 1 para los valores dentro de la' ifelse' , pero eso es solo para empujar los números un poco más lejos de las barras. El concepto es correcto. –

+0

¡Eso resolvió mi problema! ¡Muchas gracias chicos! – Dominik

Cuestiones relacionadas