2014-09-16 19 views
5

Mit der Funktion pie in R erscheinen die Beschriftungen außerhalb des Kreisdiagramms. Gibt es eine Möglichkeit, Etiketten in jedes Segment des Tortendiagramms zu platzieren?R - Etiketten in das Kreisdiagramm einfügen

f=table(LETTERS[c(rep(1,7),rep(2,10),rep(3,5))]) 
pie(f) 

Es zeigt, wie diese place-labels-on-pie-chart mit ggplot hier zu tun. Gibt es keine Möglichkeit, es mit der pie Funktion zu tun?

Edit: Als Antwort auf einige Kommentare über die Verwendung von Tortendiagrammen, möchte ich meine Absicht mit ihnen ausarbeiten. Ich verwende das Tortendiagramm nur als Teil einer Streudiagrammmatrix, um einen ganzen Datenrahmen für die Regression zu visualisieren. Die Matrix wird wie folgt eingestellt:

  • Niederplatten
    Beispielkorrelationszahl mit dem Hintergrund für höhere absolute Korrelation dunkler gefärbt.
  • Oberplatten
    • Scatterplots für numerische durch numerische
    • Boxplots für numerische von Faktor
  • Diagonal Platten
    • Histogramme mit normalen Dichten für numerische
    • Kreisdiagramm für den Faktor

Siehe, ich brauchte etwas für Faktoren auf der Diagonale und entschied mich für ein Tortendiagramm. Ich entschied mich, die Etiketten trotzdem wegzulassen und entfernte auch alle Achsenbeschriftungen. Ich habe eher dunklere Farben für größere Kuchenscheiben verwendet ... vielleicht ist es vielleicht eine schlechte Art, Informationen anzuzeigen, aber ich denke, es funktioniert gut für eine Faktorvariable und zeigt, wie die Beobachtungen über Faktorstufen besser verteilt sind als ein Barplot. Die folgende Abbildung beschreibt die Diabetesdaten im Paket lars.

diabetes data set

Antwort

4

Ich glaube nicht, gibt es eine einfache Möglichkeit, dies als die Etiketten Positionen zu tun sind hart codiert -

aussehen
body(pie) 

     if (!is.na(lab) && nzchar(lab)) { 
      lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
      text(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE, 
       adj = ifelse(P$x < 0, 1, 0), ...) 
     } 
    } 
    title(main = main, ...) 
    invisible(NULL) 
} 

am Ende aber Sie können diesen Abschnitt der überschreiben Programm

# create a new pie function to save overwriting original 
newpie <- pie 

# Tweak the label positions - changed 1.1 to 0.7 
# also commented out the lines function - so that the 
# small lines next to the labels are not plot 
newlbs <- quote(if (!is.na(lab) && nzchar(lab)) { 
        #lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y) 
        text(0.7 * P$x, 0.7 * P$y, labels[i], xpd = TRUE, 
            adj = ifelse(P$x < 0, 1, 0), ...) 
}) 

# add in the new lines of code - trial and error found the right position 
body(newpie)[[22]][[4]][[7]] <- newlbs 

newpie(f) 

scheint also eine niedrige Arbeit, aber es gibt und Sie müssten ein bisschen mehr Arbeit zu Winkel tun oder den Text zu formatieren.

(wahrscheinlich herauskommen gibt es ein Argument, um dies zu tun)

+1

Schöne Workaround. Ich wette, dass es so schwer ist, das Tortendiagramm zu ändern, weil niemand in der Statistik Tortendiagramme verwenden sollte. ;-) –

+0

Prost Richard, ja ich wollte die '' pie' Hilfe nennen - 'Pie Charts sind eine sehr schlechte Art Informationen anzuzeigen' – user20650

+0

Pro Tipp: Du kannst' tail' auf eine Funktion verwenden, also 'tail (pie, 9) 'ist gleichbedeutend mit dem 'body'-Aufruf, den du wahrscheinlich durchblättern musstest. Natürlich brauchst du noch 'body <-', um den Körper zu ändern. –

Verwandte Themen