Onverwacht gedrag van scale_x_datetime in ggplot2

Ik heb de volgende dataset met dagelijks verzamelde gegevens.

R> toydata
                 date group coef
1 2011-11-04 23:59:59     1 2.32
2 2011-11-05 23:59:59     1 2.34
3 2011-11-06 23:59:59     1 2.46
4 2011-11-07 23:59:59     1 2.68
5 2011-11-04 23:59:59     2 2.17
6 2011-11-05 23:59:59     2 1.90
7 2011-11-06 23:59:59     2 2.13
8 2011-11-07 23:59:59     2 2.52

Alles lijkt goed te werken:

R> toydata$date
[1] "2011-11-04 23:59:59 EST" "2011-11-05 23:59:59 EST"
[3] "2011-11-06 23:59:59 EST" "2011-11-07 23:59:59 EST"
[5] "2011-11-04 23:59:59 EST" "2011-11-05 23:59:59 EST"
[7] "2011-11-06 23:59:59 EST" "2011-11-07 23:59:59 EST"

en

R> format(toydata$date, "%d-%b")
[1] "04-Nov" "05-Nov" "06-Nov" "07-Nov" "04-Nov" "05-Nov" "06-Nov" "07-Nov"

Wanneer ik het echter probeer te plotten met ggplot2 met behulp van de volgende code

R> p <- ggplot(toydata, aes(x = date, y = coef, group = group))
R> pq <- p + geom_line(aes(colour = group)) +
+   scale_x_datetime(major = "1 day", format = "%d-%b")

Ik krijg een onverwacht resultaat:

enter image description here

As you can see, November, 6 is duplicated. I can get around this problem by just treating the labels in x as strings ennot as dates, but I am curious about why this is happening. Am I missing something obvious?

8

1 antwoord

Geef gewoon tz = 'EST' op en het werkt voor mij. Wat ook de standaard is, is het herhalen van 6 november vanwege de schakelaar voor de zomertijd.

5
toegevoegd
Het is misschien de moeite waard om naar github te kijken om te zien of dit een bug is die is gerapporteerd en als het geen melding is, voor het geval het een probleem is dat kan worden opgelost.
toegevoegd de auteur joran, de bron
Ja, goed punt. Het kan onvermijdelijk zijn.
toegevoegd de auteur joran, de bron
Ja ... ik ben altijd bang om datum/tijd dingen te melden omdat er zoveel nuances zijn en ik zeker geen expert ben. Ik denk dat de standaard hier op een bepaald niveau kan zijn om te worden weergegeven in je eigen lokale tijdzone, in welk geval de herhaalde 06-nov daadwerkelijk correct zou kunnen zijn. Ik zit in 'America/Los_Angeles' dus als ik begin met een reeks EST-tijden die 24 uur uit elkaar liggen (dwz wat waarschijnlijk wordt gebruikt voor de ticks) en die de overgang van zomertijd overschrijden en deze vervolgens in mijn lokale tijd opmaken , Ik krijg ook 06-nov herhaald. ...
toegevoegd de auteur John Colby, de bron
Probeer bijvoorbeeld: -formaat (as.POSIXct ('2011-11-05 02:00:01 EST', tz = 'EST') + (0: 4) * 24 * 60 * 60, tz = ' America/Los_Angeles')
toegevoegd de auteur John Colby, de bron
Bedankt. Het werkt. Gewoon ter verduidelijking: scale_x_datetime (major = "1 day", format = "% d-% b", tz = "EST")
toegevoegd de auteur griverorz, de bron