R: Kreisdiagramm mit Prozentangaben als Label mit ggplot2

8

Aus einem Datenrahmen möchte ich ein Kreisdiagramm für fünf Kategorien mit ihren Prozentsätzen als Beschriftungen im selben Diagramm in der Reihenfolge von der höchsten zur niedrigsten im Uhrzeigersinn zeichnen.

Mein Code ist:

%Vor%

Ich benutze

%Vor%

, um das Label in den entsprechenden Abschnitt zu platzieren und

%Vor%

für die Bezeichnungen, die die Prozentsätze sind.

Ich bekomme folgende Ausgabe:

%Vor%     
pescobar 15.10.2014, 21:57
quelle

3 Antworten

9

Ich habe den Großteil Ihres Codes erhalten. Ich fand das ziemlich einfach zu debuggen, indem ich das coord_polar weglasse ... einfacher zu sehen, was als Balkendiagramm vor sich geht.

Die Hauptsache war, den Faktor von oben nach unten neu zu ordnen, um die richtige Reihenfolge zu erhalten, und dann einfach mit den Etikettenpositionen zu spielen, um sie richtig zu machen. Ich habe auch Ihren Code für die Labels vereinfacht (Sie benötigen nicht as.character oder rep und paste0 ist eine Verknüpfung für sep = "" .)

%Vor%

Die Berechnung at findet die Zentren der Keile. (Es ist einfacher, sie als Mittelpunkt von Balken in einem gestapelten Balkendiagramm zu betrachten, führen Sie einfach das obige Diagramm aus, ohne die coord_polar -Zeile zu sehen.) Die at -Berechnung kann wie folgt aufgeteilt werden:

table(data) ist die Anzahl der Zeilen in jeder Gruppe und sort(table(data)) setzt sie in die Reihenfolge, in der sie geplottet werden. Das cumsum() davon ergibt die Kanten jedes Balkens, wenn sie übereinander gestapelt werden, und das Multiplizieren mit 0.5 gibt uns die halbe Höhe eines jeden Balkens im Stapel (oder die Hälfte der Breite der Keile des Kuchens). .

as.numeric() stellt einfach sicher, dass wir einen numerischen Vektor und nicht ein Objekt der Klasse table haben.

Wenn Sie die Halbwertsbreiten von den kumulativen Höhen subtrahieren, werden die Zentren beim Stapeln jeweils als Balken angezeigt. Aber ggplot stapelt die Balken mit den größten auf der Unterseite, während all unsere sort() ing die kleinsten zuerst setzen, also müssen wir nrow - alles machen, denn was wir tatsächlich berechnet haben, sind die Label-Positionen relativ zu oben der Leiste, nicht die Unterseite. (Und bei den ursprünglichen disaggregierten Daten ist nrow() die Gesamtanzahl der Zeilen, also die Gesamthöhe des Balkens.)

    
Gregor 15.10.2014, 22:34
quelle
9

Vorwort: Ich habe keine Tortendiagramme aus freien Stücken gemacht.

Hier ist eine Modifikation der Funktion ggpie , die Prozentsätze enthält:

%Vor%

Beispiel:

%Vor%

Genau wie ein typischer ggplot-Aufruf:

%Vor%

%Vor%

    
alexpghayes 27.04.2016 23:02
quelle
0

Es funktionierte auf allen enthaltenen Funktion stark inspiriert von hier

%Vor%

Ein Beispiel:

%Vor%

Ausgabe

    
François Jean 21.12.2016 15:30
quelle

Tags und Links