ggplot2 Torten-und donut-Diagramm auf dem gleichen Grundstück
Ich bin versucht, zu replizieren diese mit R ggplot. Ich habe genau die gleichen Daten:
browsers<-structure(list(browser = structure(c(3L, 3L, 3L, 3L, 2L, 2L,
2L, 1L, 5L, 5L, 4L), .Label = c("Chrome", "Firefox", "MSIE",
"Opera", "Safari"), class = "factor"), version = structure(c(5L,
6L, 7L, 8L, 2L, 3L, 4L, 1L, 10L, 11L, 9L), .Label = c("Chrome 10.0",
"Firefox 3.5", "Firefox 3.6", "Firefox 4.0", "MSIE 6.0", "MSIE 7.0",
"MSIE 8.0", "MSIE 9.0", "Opera 11.x", "Safari 4.0", "Safari 5.0"
), class = "factor"), share = c(10.85, 7.35, 33.06, 2.81, 1.58,
13.12, 5.43, 9.91, 1.42, 4.55, 1.65), ymax = c(10.85, 18.2, 51.26,
54.07, 55.65, 68.77, 74.2, 84.11, 85.53, 90.08, 91.73), ymin = c(0,
10.85, 18.2, 51.26, 54.07, 55.65, 68.77, 74.2, 84.11, 85.53,
90.08)), .Names = c("browser", "version", "share", "ymax", "ymin"
), row.names = c(NA, -11L), class = "data.frame")
und es sieht wie folgt aus:
> browsers
browser version share ymax ymin
1 MSIE MSIE 6.0 10.85 10.85 0.00
2 MSIE MSIE 7.0 7.35 18.20 10.85
3 MSIE MSIE 8.0 33.06 51.26 18.20
4 MSIE MSIE 9.0 2.81 54.07 51.26
5 Firefox Firefox 3.5 1.58 55.65 54.07
6 Firefox Firefox 3.6 13.12 68.77 55.65
7 Firefox Firefox 4.0 5.43 74.20 68.77
8 Chrome Chrome 10.0 9.91 84.11 74.20
9 Safari Safari 4.0 1.42 85.53 84.11
10 Safari Safari 5.0 4.55 90.08 85.53
11 Opera Opera 11.x 1.65 91.73 90.08
So weit, ich habe es aufgetragen, die einzelnen Komponenten (d.h. den donut-Diagramm, das die Versionen, und das Kreisdiagramm der Browser) wie so:
ggplot(browsers) + geom_rect(aes(fill=version, ymax=ymax, ymin=ymin, xmax=4, xmin=3)) +
coord_polar(theta="y") + xlim(c(0, 4))
ggplot(browsers) + geom_bar(aes(x = factor(1), fill = browser),width = 1) +
coord_polar(theta="y")
Das problem ist, wie Verbinde ich die zwei sehen aus wie das oberste Bild? Ich habe versucht, viele Möglichkeiten, wie:
ggplot(browsers) + geom_rect(aes(fill=version, ymax=ymax, ymin=ymin, xmax=4, xmin=3)) + geom_bar(aes(x = factor(1), fill = browser),width = 1) + coord_polar(theta="y") + xlim(c(0, 4))
Aber alle meine Ergebnisse sind entweder verdreht oder enden mit einer Fehlermeldung.
Ich Frage mich, ob dies ist etwas, das die
oh, ich weiß nicht, über die Pakete... wird def überprüfen Sie Sie heraus! danke 😉
Ich bin nicht sicher, ob Sie es erlauben, die haben die Grafik, die Sie wollen. Aber, sehen innere und äußere Kreise, ich dachte es gibt vielleicht etwas für Sie in die Pakete.
ahh ich werde immer noch check em out und sehen, was Sie hav zu bieten... danke..
(+1) für interessante Perspektive auf die Darstellung von Informationen
Rcircos
oder circlize
Pakete verarbeiten kann.oh, ich weiß nicht, über die Pakete... wird def überprüfen Sie Sie heraus! danke 😉
Ich bin nicht sicher, ob Sie es erlauben, die haben die Grafik, die Sie wollen. Aber, sehen innere und äußere Kreise, ich dachte es gibt vielleicht etwas für Sie in die Pakete.
ahh ich werde immer noch check em out und sehen, was Sie hav zu bieten... danke..
(+1) für interessante Perspektive auf die Darstellung von Informationen
InformationsquelleAutor Tavi | 2014-11-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich finde es einfacher zu arbeiten in rechtwinkligen Koordinaten zuerst, und wenn das richtig ist, dann wechseln Sie zu Polarkoordinaten. Die x-Koordinate wird zum radius, in polar. Also, in rechtwinkligen Koordinaten, die im inneren Handlung geht von null auf eine Zahl, wie 3, und das äußere band geht von 3 bis 4.
Beispielsweise
Dann, wenn Sie wechseln auf polar, Sie bekommen so etwas wie das, was Sie suchen.
Dies ist ein Anfang, aber möglicherweise benötigen, um die Feinabstimmung der Abhängigkeit von y (oder Winkel -) und auch die Beschriftung /Legende /färben... Durch die Verwendung von rect-sowohl für die inneren und äußeren Ringe, die vereinfachen sollte die Anpassung der Färbung. Auch kann es hilfreich sein, zu verwenden, die reshape2::Schmelzen Sie die Funktion zum reorganisieren der Daten, so dass dann die Legende kommt richtig mit Gruppe (oder der Farbe).
wow, das ist definitiv das, was ich suchte. Ich werde jetzt die Feineinstellung der ästhetik und gut zu gehen! Ich begann zu denken, das war nicht wirklich möglich, in ggplot. deine Erklärung geholfen, eine tonne!! ich danke Ihnen so sehr! Im Fall, dass ich laufen in allen Fragen ist es ok, wenn ich geben u ein Schreien??
Wenn Sie noch weitere Fragen haben, nur nach einer anderen Frage. Ich bin zu Bett gehen. Ich würde vorschlagen, ändern Sie y so, dass es hängt davon ab, numerische Werte, statt von Faktoren, um bessere Kontrolle über den Winkel. Auch, Lesen Sie zu Schmelzen.
Siehe vita.had.co.nz/papers/prodplots.html für die weitere Erforschung dieser Idee
Wie kann man das entfernen mit der "top-level-Kategorien", d.h. die
fill=browser
(das sind:"Chrome", "Firefox", "MSIE", "Opera", "Safari"
) in der Legende? Ich habe benutzerdefinierte Farben für, sagen wir, dieversion
variable, nur.InformationsquelleAutor user3969377
Edit 2
Meine ursprüngliche Antwort ist wirklich dumm. Hier ist eine viel kürzere version, die meiste Arbeit macht mit einer viel einfacheren Benutzeroberfläche.
Original-Beitrag
Euch nicht haben
givemedonutsorgivemedeath
Funktion? Basis Grafiken sind immer der Weg zu gehen für sehr detaillierte Dinge wie diese. Konnte nicht denken, der eine elegante Weise, um den Verlauf der center kreisbezeichnungen, obwohl.Gibt mir
Beachten Sie, dass in
?pie
sehen Siecode:
Bearbeiten 1
vielleicht bald. es ist schwer zu verallgemeinern, Sachen wie diese
Anfänglich dachte ich, Sie haben dies in Ihrem Paket! Diese Grafik ist toll.
(+1), Der plot ist verrückt
es wurde eine Funktion Hinzugefügt, die scheint zu sein, ziemlich verallgemeinerbare, lassen Sie mich wissen, ob dies besser funktioniert, vielen Dank für das Tippen
InformationsquelleAutor rawr
Erstellte ich eine Allgemeine donuts plot-Funktion, um dies zu tun, könnte
panel
und färben Sie die einzelnen kreisförmigen Bereich um bestimmten Prozentsatzpctr
undcolors
cols. Die Breite der ring könnte abgestimmt werden, die vonoutradius
>radius
>innerradius
.Die main-Funktion tatsächlich zeichnen Sie ein Balkendiagramm und Biege ihn zu einem ring, also es ist etwas zwischen einem Kreisdiagramm und ein Balkendiagramm.
Beispiel Kreisdiagramm, zwei Ringe:
Browser Kreisdiagramm
InformationsquelleAutor yfyang
@rawr ' s Lösung ist wirklich nett, allerdings werden die Beschriftungen überlappt werden, wenn es zu viele sind. Inspiriert von @user3969377 und @FlorianGD, ich habe eine neue Lösung mit
ggplot2
undggrepel
.1. vorbereiten von Daten
2. schreiben piedonut-Funktion
3. Holen Sie sich die piedonut
InformationsquelleAutor CcMango
können Sie etwas ähnliches mit dem Paket ggsunburst
InformationsquelleAutor didac
Ich verwendet Sie schweben.pie statt ggplot2 zu erstellen, die zwei überlappende Kreisdiagramme:
InformationsquelleAutor LeilaHC