2013-01-31 10 views
5

Ich möchte ein facettiertes ggplot2 Dot Plot plotten. x-Achse ist kontinuierlich, y-Achse ist eine Liste von Tieren. Zwei Variablen sind geplottet und facettiert nach Essverhalten.ggplot2: Umkehren der Reihenfolge einer diskreten Zeichenvariablen für jede Facette auf einer freien Skala?

Die y-Achse ist frei skalierbar, da jedes Tier nur in einer Essverhaltenskategorie erscheint.

library(ggplot2) 

# First clean up the data set: 
msleep.noNA <- msleep[!is.na(msleep$vore),] 
msleep.noNA.red <- msleep.noNA[c(1,3,6,7)] 
msleep.noNA.red <- msleep.noNA.red[!is.na(msleep.noNA.red[4]),] 
msleep.noNA.red <- melt(msleep.noNA.red) 

pg <- ggplot(msleep.noNA.red, aes(value, name, colour = variable)) + 
     geom_point() + 
     facet_grid(vore ~ ., scale="free_y", space = "free_y") 
pg 

# Try to reverse order of the y axis: 
pg + scale_y_reverse() 

# Not possible because its a factor, but it's not classified as such: 
class(msleep.noNA.red$name) 

Hat jemand einige Hinweise, wie ich die Liste der Tiernamen alphabetisch in jedem Teilstück machen kann?

+0

könnten Sie Ihre Daten einfügen (vorzugsweise 'dput' verwendet wird), so dass wir arbeiten konnten darauf deinen Code zu reproduzieren? – Arun

+1

Hallo Arun, Danke für deinen Kommentar. Der Msleep-Datensatz ist als Teil von ggplot2 verfügbar. Alle Befehle sollten auf einer Plattform funktionieren, auf der ggplot2 installiert ist. –

+1

Sie können Dinge mit 'as.factor' in einen Faktor umwandeln, also' msleep.noNA.red $ name <- as.factor (msleep.noNA.red $ name) 'wird es als Faktor konvertieren und Sie können dann arbeiten damit, wie Sie jeden anderen Faktor würden. Hilft das? –

Antwort

8

Sie können den Stringvektor zu einem Faktor zu transformieren und die Reihenfolge der Stufen angeben:

Der folgende Befehl einen Faktor schaffen. Die Ebenen sind in absteigender alphabetischer Reihenfolge:

msleep.noNA.red <- within(msleep.noNA.red, 
         name <- ordered(name, levels = rev(sort(unique(name))))) 

Jetzt können Sie die Daten plotten:

pg <- ggplot(msleep.noNA.red, aes(value, name, colour = variable)) + 
    geom_point() + 
    facet_grid(vore ~ ., scale="free_y", space = "free_y") 

enter image description here

+0

Vielen Dank! Das ist es genau! –

+0

Brauche '' ordered() 'hier nicht, der einfache alte' factor() 'funktioniert ganz gut. – Gregor

+2

Wenn Sie es vorziehen, den zugrunde liegenden Datenrahmen nicht zu ändern, könnten Sie 'scale_y_discrete (limits = rev (levels (msleep.noNA.red $ name)))' 'anstelle von' scale_y_reverse() 'tun, und es sollte funktionieren. –

Verwandte Themen