2016-07-21 9 views
0

Ich versuche, eine Grafik zu machen, um eine Bevölkerung über einen Zeitraum hinweg darzustellen. Die Daten sind jedoch nicht in chronologischer Reihenfolge. In der importierten CSV sind die Daten alle korrekt und in der Reihenfolge. Sobald der folgende Code jedoch ausgeführt wird, werden die Daten in der dargestellten Grafik nicht in der richtigen Reihenfolge angezeigt. Das Startdatum liegt in der Mitte und das Enddatum liegt links vom Startdatum. Kann ich es irgendwie reparieren?Reihenfolge der Daten ist nicht chronologisch in ggplot2

sumc <- aggregate(ex2$C, bu=list(ex2$Date, ex2$Temp), FUN=sum) 
colnames(sumc) <- c("Date", "Temperature", "Individuals") 
ggplot(data= sumc, aes(x=Date, y=Individuals, group=Temperature, colour=Temperature)) + geom_line() + theme(plot.title = element_text(face="bold") 
    ,plot.background = element_blank() 
    ,panel.background = element_blank() 
    ,panel.grid.major = element_blank() 
    ,panel.grid.minor = element_blank() 
    ,panel.border = element_blank() 
    ,axis.line = element_line(colour="black", size=1) 
    ,axis.text.x = element_text(colour="black", size=10) 
    ,axis.text.y = element_text(color="black", size=8) 
    ,axis.title.x = element_text(colour="black", size=10, face="bold", vjust=-.2) 
    ,axis.title.y = element_text(color="black", size=10, face="bold", vjust=1.2) 
    ,legend.text=element_text(size=8)) 

Dieses Bild ist die Bevölkerung im Laufe der Zeit. Aber wie Sie die Daten auf der x-Achse sehen können, sind falsch und aus:

This image is the population over time. But as you can see the dates on the x-axis are incorrect and off.

+0

* Details * würde helfen ... was ** ist ** die Bestellung? Eine Sache, die mir sofort in den Sinn kommt, ist, dass das System vielleicht den Datentyp der Achse als "String" und nicht als "Datum" wahrnimmt. Könnte die Reihenfolge, die Sie sehen, mit einer solchen (falschen) Interpretation übereinstimmen? –

+0

Die Bestellung ist ab dem Startdatum von 7/5/2016 und so weiter bis zum Enddatum 20.07.2016. Ich habe diesen Code erfolgreich in einem anderen Diagramm verwendet und es ist korrekt. Ich bin nicht sicher, ob es wegen dieses Fehlers eine Fehlinterpretation sein könnte, weil es in einem anderen Diagramm erfolgreich war. –

+0

Aber ich beobachte, dass die Ordnung * konsistent (!) * Ist mit meiner Hypothese, dass die Datumssketten als * Zeichenketten, * nicht * Daten interpretiert werden. * Wir dürfen daher nicht die Möglichkeit ausschließen, dass der Erfolg Ihrer "anderen Graph "war nur zufällig. . . dass Sie nichts in dieser bestimmten Ausgabe gesehen haben, um den * Bug (!) * für Sie preiszugeben. –

Antwort

1

Wenn Sie Ihre Reisedaten in der richtigen Reihenfolge in dem Datenrahmen importiert werden, verwenden

sumc$Date <- factor(sumc$Date, ordered = T)

vor zum Plotten. Dies wird sie zu geordneten Faktoren machen, basierend auf der Reihenfolge, in der sie erscheinen, und ggplot wird verstehen, dass es sie so halten muss.

bearbeiten: wenn die Daten nicht bestellt sind, können Sie sie auf einen Vektor bestellen und sparen:

dates <- unique(sort(sumc$Date)) 
sumc$Date <- factor(sumc$Date, labels = dates, ordered = T) 
+0

Alle Faktoren haben eine Reihenfolge, der einzige Grund, die Klasse "geordneter Faktor" anzugeben, sind die Kontraste, die verwendet werden, wenn sie in ein Modell eingefügt werden. Für Daten ist die Klasse "Datum" sowieso viel geeigneter als eine Klasse "Faktor". – Gregor

+0

Fair genug. Ich bin manchmal etwas zurückhaltend bei der Verwendung der Klasse "Date", da es unordentlich werden kann, wenn die Eingabe ein nicht standardmäßiges Datumsformat verwendet, aber Sie haben Recht damit. –

+0

Nun, Ihre Sortierung wird nur in alphabetischer Reihenfolge gehen (es sei denn, es ist eine 'Date' Klasse), was genau das Problem ist, das OP bereits hat. – Gregor

3

zu einer Date Klasse Convert:

sumc$Date = as.Date(sumc$Date, format = "%m/%d%/Y") 

Dann Code Ihre gleichen Plotten wird gut funktionieren.

Siehe ?as.Date oder strptime für Details über die Konvertierung oder das format Argument.

+0

Du bist absolut fantastisch! Vielen Dank, also so sehr !!!!!! –