2016-06-10 8 views
0

Ich versuche, die prozentuale Häufigkeit jedes Balkens in meinem gruppierten Balkendiagramm auszurichten. Im Moment sieht mein Diagramm wie folgt aus:Wie richtet man Text in einem gruppierten Balkendiagramm in ggplot2 aus?

Rplot01

Hier ist der Code auch:

ggplot(graph_data, aes(x, Freq)) + 
    geom_bar(aes(fill = Pref), position = 'dodge', stat = 'identity') + 
    geom_text(aes(label = sprintf("%.0f%%", round(Freq/sum(Freq) * 100))), 
       hjust = -0.25) + 
    labs(list(x = attr(graph_data, 'seg_label'), 
       y = 'Frequency', 
       title = paste('Q:', attr(graph_data, 'question')))) + 
    scale_y_continuous(limits = c(0, 1.2 * max(graph_data$Freq))) + 
    guides(fill = F) + 
    coord_flip() + 
    annotate("text", x = Inf, y = Inf, 
      label = paste0("N = ", sum(graph_data$Freq)), 
      hjust = 1.5, vjust = 1.5) 

Ich denke, das Problem kann auf diesem Code-Snippet gelöst werden, aber ich bin nicht sicher, wie:

geom_text(aes(label = sprintf("%.0f%%", round(Freq/sum(Freq) * 100))), hjust = -0.25) 

Jede Hilfe würde sehr geschätzt werden!

Edit: Hier ist ein Beispiel der Struktur meiner Daten auch:

df <- data.frame(x = rep(c('1824', '2534', '3544'), 3), 
       Pref = rep(c('low', 'neutral', 'high')), 
       Freq = 1:9 * 10) 
+2

Mögliches Duplikat [Position geom \ _text auf ausgewichen BarPlot] (http://stackoverflow.com/questions/6017460/position-geom-text-on-dodged-barplot) – aosmith

+0

Vielen Dank für Ihre Antwort . Ich denke, das Feature in diesem Post ist abgeschrieben - ich konnte es nicht mit irgendwelchen Beispielen, die ich ausprobiert habe, wiederherstellen. Der Beitrag ist ungefähr 5 Jahre alt, also denke ich, es ist eine wahrscheinliche Erklärung, wenn ich keinen Fehler gemacht habe. – nev

+0

Problem behoben! Der ästhetische Parameter 'fill' wurde nicht in die Funktion geom_text übergeben. Ich habe meine ganze Ästhetik in die ursprüngliche ggplot-Deklaration aufgenommen, um sie zu beheben, wie dies 'ggplot (graph_data, aes (x = x, y = Freq, fill = Pref) ' – nev

Antwort

0

Wie in den Kommentaren erwähnt Ich denke, das ist ein Duplikat Position geom_text on dodged barplot ist.

Aber ich habe es jetzt gemacht, also werde ich den Code einschließen.

ggplot(df, aes(x, Freq, fill = Pref)) + 
    geom_bar(position = 'dodge', stat = 'identity') + 
    geom_text(aes(label = sprintf("%.0f%%", round(Freq/sum(Freq) * 100))), 
      position = position_dodge(width = 0.9), hjust = -0.25) + 
    labs(list(x = attr(df, 'seg_label'), 
       y = 'Frequency', 
       title = paste('Q:', attr(df, 'question')))) + 
    scale_y_continuous(limits = c(0, 1.2 * max(df$Freq))) + 
    guides(fill = F) + 
    coord_flip() 

Sie benötigen fill im Original aes setzen so das dass geom_text weiß, welche durch die Menge ausweichen beschriften.

enter image description here