2012-07-25 24 views
24

Me gustaría hacer un diagrama de barras delineado en negro con porcentajes dentro de las barras. ¿Es esto posible desde qplot? Obtengo los porcentajes que aparecen pero no se alinean con las barras en particular.Cómo agregar etiquetas al gráfico de barras ggplot

paquetes: ggplot2, remodelar

created in Illustrator

x <- data.frame(filename = c("file1", "file2", "file3", "file4"), 
        low = c(-.05,.06,.07,-.14), 
        hi = c(.87,.98,.56,.79)) 
x$tot <- x$hi + x$low 

x <- melt(x, id = 'filename') 

bar <- qplot(x = factor(filename), 
      y = value*100, 
      fill = factor(variable), 
      data = x, 
      geom = 'bar', 
      position = 'dodge') + coord_flip() 
bar <- bar + scale_fill_manual(name = '', 
           labels = c('low', 
              'Hi', 
              "Tot"), 
           values = c('#40E0D0', 
              '#FF6347', 
              "#C7C7C7")) 
bar <- bar + geom_text(aes(label = value*100))+geom_bar(colour = 'black') 
bar <- bar + opts(panel.background = theme_rect(colour = NA)) 
bar <- bar + opts(legend.justification = 'bottom') 
print(bar) 
+2

Bienvenido a SO. Como está haciendo uso de funciones R que no son de base, agregue una referencia a los paquetes necesarios para reproducir su código, es decir 'library (...)' – Andrie

Respuesta

41

Aquí van:

library(scales) 
ggplot(x, aes(x = filename, fill = variable)) + 
    geom_bar(stat="identity", ymin=0, aes(y=value, ymax=value), position="dodge") + 
    geom_text(aes(x=filename, y=value, ymax=value, label=value, 
       hjust=ifelse(sign(value)>0, 1, 0)), 
      position = position_dodge(width=1)) + 
    scale_y_continuous(labels = percent_format()) + 
    coord_flip() 

enter image description here

+0

Gracias por la parte de geom_text. ¿Puedes explicar el razonamiento de la variable ymax? –

+0

Oh, lo siento, es posiblemente redundante. Tuve que luchar un poco con algunas advertencias extrañas. Intenta eliminarlo y ver qué pasa. – Andrie

+1

Solo quería señalar que 'library (scales)' es necesario para percent_format() – dudusan

4

Esta sería una buena oportunidad para que usted pueda empezar a moverse lejos de usar qplot, a favor de ggplot. Esto será mucho más fácil a largo plazo, créanme.

Aquí es un comienzo:

library(scales) 
ggplot(data = x,aes(x = factor(filename),y = value)) + 
    geom_bar(aes(fill = factor(variable)),colour = "black",position = 'dodge') + 
    coord_flip() + 
    scale_fill_manual(name = '', 
         labels = c('low', 
           'Hi', 
           "Tot"), 
         values = c('#40E0D0', 
           '#FF6347', 
           "#C7C7C7")) + 
    scale_y_continuous(labels = percent_format()) 

Por razones filosóficas, voy a dejar la pieza de anotación a usted ...

+0

Gracias. Todavía no hay texto/porcentajes en la trama. ¿Paso el 'valor' al percent_format()? –

+1

@RwardBound Lo sé. Deliberadamente omití las etiquetas de texto porque filosóficamente me opongo a etiquetar los gráficos de barras de esa manera. (Pero si tuvieras que hacer las etiquetas, no usarías nada en 'scale_y_continuous'.) – joran

+1

Ya veo. ¿Qué es lo que personalmente prefieres? ¿Y cómo agregaría el texto por favor? muy agradecido por tu ayuda. –

Cuestiones relacionadas