2012-07-25 19 views
24

Ich möchte ein schwarz umrandetes Balkendiagramm mit Prozentangaben innerhalb der Bars erstellen. Ist das möglich von qplot? Ich bekomme die Prozentwerte angezeigt, aber sie sind nicht mit den einzelnen Balken ausgerichtet.Hinzufügen von Beschriftungen zu ggplot Balkendiagramm

Pakete: ggplot2, umformen

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

Willkommen zu SO. Da Sie Nicht-Base-R-Funktionen verwenden, fügen Sie bitte einen Verweis auf die Pakete hinzu, die zur Reproduktion Ihres Codes benötigt werden, d. H. 'Library (...)' – Andrie

Antwort

41

Hier gehen Sie:

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

Vielen Dank für den Teil geom_text. Kannst du die ymax-Variablen-Argumentation erklären? –

+0

Oh, tut mir leid - es ist möglicherweise überflüssig. Ich musste ein bisschen mit seltsamen Warnungen kämpfen. Versuche es zu entfernen und schau was passiert. – Andrie

+1

Ich wollte nur zur Kenntnis nehmen, dass für prozent_format() 'library (scales)' benötigt wird – dudusan

4

Dies ist eine gute Gelegenheit sein würde für Sie weg für ggplot verwenden qplot, in Bewegung zu setzen. Das wird auf lange Sicht viel einfacher sein, vertraue mir.

Hier ist ein Anfang:

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()) 

aus philosophischen Gründen werde ich die Anmerkung Stück Ihnen überlassen ...

+0

Danke. Es gibt immer noch keine Texte/Prozentsätze auf der Handlung. Übergeben Sie 'Wert' an das prozent_format()? –

+1

@RwardBound Ich weiß. Ich habe die Textlabels bewusst weggelassen, weil ich philosophisch dagegen bin, Balkendiagramme so zu etikettieren. (Aber wenn Sie _were_ die Etiketten machen würden, würden Sie nichts in 'scale_y_continuous' verwenden.) – joran

+1

Ich sehe. Was bevorzugen Sie persönlich? Und wie würde ich den Text bitte hinzufügen? sehr dankbar für deine Hilfe. –

Verwandte Themen