Ich mache ein ausgewichenes Balkendiagramm mit ggplot mit diskreter x-Skala. Die x-Achse ist jetzt in alphabetischer Reihenfolge angeordnet, aber ich muss es neu anordnen, damit es nach dem Wert der y-Achse geordnet ist (dh der höchste Balken wird links positioniert sein).
Ich habe versucht, zu ordnen oder zu sortieren, aber die x-Achse zu sortieren, aber nicht die Balken.
Was habe ich falsch gemacht?
factor
undreorder
Änderung der Eigenschaften der Daten, wenn auch innerhalb desggplot()
Anrufs, wird mehr getan, als für das jeweilige Problem erforderlich ist.scale_x_discrete(limits = DT$x[order(-DT$y)])+
Sie können verwenden
reorder
:Bearbeiten:
Um die höchste Leiste links zu haben, müssen Sie ein bisschen Kludge verwenden:
Ich würde erwarten, dass dies auch negative Höhen hat, aber das tut es nicht, also funktioniert es!
quelle
Hadley hat ein Paket namens entwickelt
forcats
. Dieses Paket macht die Aufgabe so viel einfacher. Sie können ausnutzen,fct_infreq()
wenn Sie die Reihenfolge der x-Achse um die Häufigkeit eines Faktors ändern möchten. Im Fall desmtcars
Beispiels in diesem Beitrag möchten Sie die Ebenencyl
nach der Häufigkeit der einzelnen Ebenen neu anordnen . Die am häufigsten angezeigte Ebene bleibt auf der linken Seite. Alles was Sie brauchen ist dasfct_infreq()
.Wenn Sie in die andere Richtung gehen möchten, können Sie
fct_rev()
zusammen mit verwendenfct_infreq()
.quelle
Mir ist klar, dass dies alt ist, aber vielleicht ist diese Funktion, die ich erstellt habe, für jemanden da draußen nützlich:
Mit dieser Funktion können Sie nun interaktiv mit ggplot2 wie folgt zeichnen:
Wie zu sehen ist, erstellt die
order_axis
Funktion einen weiteren Datenrahmen mit einer neuen Spalte mit demselben Namen, jedoch mit einem_o
am Ende. Diese neue Spalte enthält Ebenen in aufsteigender Reihenfolge, sodass ggplot2 automatisch in dieser Reihenfolge gezeichnet wird.Dies ist etwas eingeschränkt (funktioniert nur für Zeichen- oder Faktor- und Zahlenkombinationen von Spalten und in aufsteigender Reihenfolge), aber ich finde es immer noch sehr nützlich für das Plotten unterwegs.
quelle
reorder
direkt zu verwenden.ggplot(df, aes(x = reorder(AXIS_X, COLUMN_Y), y = COLUMN_Y)) + ...
Tun Sie nicht das Gleiche, ungefähr so präzise und ohne die Hilfsfunktion?