2017-02-23 8 views
1

Ich kann diese seltsame Situation nicht lösen. Irgendwo habe ich Fehler oder Fehler, aber das Sitzen über drei halbe Stunden konnte damit nicht umgehen.Kreisdiagramm in ggplot Text Kennzeichnung Horror

ich habe: sta_df

   sta value 
1 IN_LIQUIDATION 29 
2  LIQUIDATED 47 
3  OPERATING 435 
4 TRANSFORMED  8 

sp <- ggplot(sta_df, aes(x="", y=value, fill=sta)) + 
    geom_bar(width = 1, stat = "identity", color = "black") + 
    coord_polar("y") + scale_fill_brewer(palette="Pastel2") + 
    geom_text(aes(x = seq(1.2,1.4,,4), label = percent(value/sum(value))), 
       position = position_stack(vjust = 0.5), size=5) 

und die Handlung hat falsche Richtung der Markierung.

enter image description here

Nevermind dieses seltsame Schrift eines Bildes. Ich habe versucht, viele verschiedene Funktionen anstelle von position_stack zu verwenden. Zum Beispiel:

geom_text(aes(x = rep(seq(0.9,1.4,,6),1), y = value/2 + c(0, cumsum(value)[-length(value)])

aber es half nicht. Dieser Thread weder: wrong labeling in ggplot pie chart

Wenn ich umkehren wollte y=rev(value) die Legende nicht mit Daten entsprechen. Putting Richtung 1 oder -1 macht nicht mehr als alle umzukehren. Die Umkehrung der Werte in geom_text ergibt ein Pac-Man-ähnliches Diagramm. Ich habe ggplot2 aktualisiert.

Ehrlich gesagt besteht das Problem darin, dass das Diagramm entgegen dem Uhrzeigersinn zu zeichnen beginnt, obwohl die Richtung im Uhrzeigersinn eingestellt ist und die Textnummern in der richtigen Richtung sind. Und das Umkehren von Daten in data.frame ändert nichts an der gesamten Handlung. Entschuldigung, ich stecke fest, aber fühle, dass die Lösung genau da ist.

Antwort

1

Das Problem tritt auf, wenn Sie Ihren Etiketten unterschiedliche 0-Werte in geom_label() zuweisen. Warum? Weil Sie sich auf position_stack() verlassen, um Ihnen Ihre y-Werte zu geben. Aber wenn die Punkte nicht mehr das gleiche x teilen, werden sie nicht mehr "gestapelt". Wenn Sie die x-Werte anpassen möchten, müssen Sie Ihre eigenen y-Werte berechnen, wie hier (Showing data values on stacked bar chart in ggplot2) und hier (http://docs.ggplot2.org/current/geom_text.html) unten auf der Seite beschrieben. Übrigens habe ich alle meine Fehlerbehebung mit coord_polar entfernt, nur mit Blick auf die einfache Barplot-Version.

Wie auch immer, hier ist eine Teillösung:

sta_df <- read.table(header=TRUE, 
text="  sta value 
IN_LIQUIDATION 29 
LIQUIDATED  47 
OPERATING  435 
TRANSFORMED  8") 

library(ggplot2) 
library(scales) 

sta_df$fraction = sta_df$value/sum(sta_df$value) 

sp <- ggplot(sta_df, aes(x="", y=value, fill=sta)) + 
     geom_bar(width=1, stat="identity", color="black",) + 
     scale_fill_brewer(palette="Pastel2") + 
     coord_polar(theta="y") + 
     geom_text(aes(x=1.4, label=percent(fraction)), 
       position=position_stack(vjust=0.5), size=4) 

ggsave("pie_chart.png", plot=sp, height=4, width=6, dpi=150) 

enter image description here

+0

Ok. Danke vielmals! Sie haben meine Frage zwar beantwortet, aber das ist das wichtigste Thema, um X-Werte zu variieren, weil sich Texte überschneiden (in echten Diagrammen, nicht in diesem Beispiel). Die Berechnung dieser Werte ist ziemlich schwierig, und ich brauche einige Hinweise, aber wahrscheinlich in einer anderen Bedrohung. Vielen Dank. –

+0

Gern geschehen. Viel Glück! – bdemarest