2016-06-30 7 views
0

Ich habe einen Datensatz in einem data.frame Wert Rang, die etwa wie folgt aussieht:Wie für jeden Faktor in R

Subject <- rep(1:5, each = 3) 
Condition <- rep(-1:1,5) 
DV <- rnorm(15) 
foo <- cbind(Subject,Condition,DV) 
foo <- data.frame(foo) 
foo <- within(foo, { 
    Subject <- factor(Subject) #I'm converting subject to factor because that's how it is in my actual dataset 
    Condition <- factor(Condition) 
}) 

Und das ist, wie mein Graph wie folgt aussieht:

enter image description here

Was ich tun möchte, ist die Daten so zu reorganisieren, dass das Thema mit dem größten Wert für die Bedingung -1 zuerst gezeichnet wird, dann der zweitgrößte Wert, die Sekunde usw. geplottet wird. Ich möchte, dass mein Diagramm so aussieht: enter image description here

Jeder Vorschlag wird geschätzt. Vielen Dank für Ihre Zeit!

+0

Möglicherweise nützlich: [Der Neuordnungs Bars in geom_bar ggplot2] (http://stackoverflow.com/questions/25664007/reorder-bars-in-geom-bar-ggplot2/25664367#25664367) – Jaap

+0

ich nicht denke, dass der Code funktioniert, weil ich 3 Bedingungen habe nicht 1 –

+0

Siehe auch diese Frage und Antwort: http://stackoverflow.com/q/29221824/3871924 – agenis

Antwort

2

Verwenden Sie die reorder Funktion von @Procrastinatus's answer, Sie so etwas wie tun:

ggplot(foo, aes(x = reorder(Subject, -rep(DV[Condition == -1], each = 3)), 
       y = DV, fill = Condition)) + 
    geom_bar(stat = "identity", position = "dodge") + 
    xlab("subject") 

enter image description here

Hinweis: Kann Ihr Diagramm nicht reproduzieren, weil Sie nicht einen Samen für die Stichprobe festgelegt haben.

0

Um Ihre Bars in einer benutzerdefinierten Weise neu zu ordnen, ist die Verwendung des Arguments scale_x_discrete von ggplot ziemlich einfach.

Zuerst berechnete ich die richtige Reihenfolge mit dplyr, aber jeder andere Weg ist in Ordnung.

library(dplyr) 
myorder <- foo %>% filter(Condition==-1) %>% arrange(desc(DV)) %>% .$Subject 

ggplot(data=foo) + 
    aes(x=Subject, y=DV, fill=Condition) + 
    geom_bar(stat="identity", position="dodge") + 
    scale_x_discrete(limits=myorder) 
Verwandte Themen