webentwicklung-frage-antwort-db.com.de

Bars in geom_bar ggplot2 neu anordnen

Ich versuche ein Balkendiagramm zu erstellen, in dem das Diagramm von miRNA mit dem höchsten value bis miRNA mit dem niedrigsten sortiert ist. Warum funktioniert mein Code nicht?

> head(corr.m)

        miRNA         variable value
1    mmu-miR-532-3p      pos     7
2    mmu-miR-1983        pos    75
3    mmu-miR-301a-3p     pos    70
4    mmu-miR-96-5p       pos     5
5    mmu-miR-139-5p      pos    10
6    mmu-miR-5097        pos    47

ggplot(corr.m, aes(x=reorder(miRNA, value), y=value, fill=variable)) + 
  geom_bar(stat="identity")
96
user3741035

Ihr Code funktioniert einwandfrei, mit der Ausnahme, dass das Barplot von niedrig nach hoch sortiert ist. Wenn Sie die Balken von hoch nach niedrig bestellen möchten, müssen Sie ein -sign before value:

ggplot(corr.m, aes(x = reorder(miRNA, -value), y = value, fill = variable)) + 
  geom_bar(stat = "identity")

was gibt:

enter image description here


Verwendete Daten:

corr.m <- structure(list(miRNA = structure(c(5L, 2L, 3L, 6L, 1L, 4L), .Label = c("mmu-miR-139-5p", "mmu-miR-1983", "mmu-miR-301a-3p", "mmu-miR-5097", "mmu-miR-532-3p", "mmu-miR-96-5p"), class = "factor"),
                         variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = "pos", class = "factor"),
                         value = c(7L, 75L, 70L, 5L, 10L, 47L)),
                    class = "data.frame", row.names = c("1", "2", "3", "4", "5", "6"))
181
Jaap

Mit der Funktion reorder() können Sie Variablen entlang der x-Achse neu anordnen. Allerdings hört ggplot manchmal nicht auf Nachbestellung. Dies liegt normalerweise daran, dass die zusätzlichen Layer zum Plot in der falschen Reihenfolge hinzugefügt werden. Wenn Sie einen komplexen Plot haben und reorder () das Ergebnis nicht beeinflusst, versuchen Sie, die anderen Funktionen vorübergehend zu entfernen oder stummzuschalten, und fügen Sie sie dann nacheinander wieder hinzu.

ggplot(aes(x=reorder(myx, -myy), y=myy), data=mydf) + geom_bar(stat="identity")

0
Sarah Grogan