2011-12-07 12 views
7

Ho il seguente set di dati con dati raccolti quotidianamente.Comportamento imprevisto di scale_x_datetime in ggplot2

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 

Everythings sembra funzionare bene:

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" 

e

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

Tuttavia, quando si tenta di tracciare utilizzando ggplot2 utilizzando il seguente codice

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") 

I ottenere un risultato inaspettato:

enter image description here

Come si può vedere, novembre 6 è duplicato. Posso aggirare questo problema semplicemente trattando le etichette in x come stringhe e non come date, ma sono curioso di sapere perché questo sta accadendo. Mi manca qualcosa di ovvio?

risposta

4

Basta specificare tz='EST' e funziona per me. Qualunque sia l'impostazione predefinita, si ripete il 6 novembre a causa dell'intervallo orario di ora legale.

+0

Grazie. Funziona. Giusto per chiarire: 'scale_x_datetime (major =" 1 day ", format ="% d-% b ", tz =" EST ")' – griverorz

+0

Potrebbe valere la pena controllare su github per vedere se questo è un bug che è stato segnalato, e se non segnalarlo, nel caso in cui sia un problema risolvibile. – joran

+0

Sì ... Sono sempre preoccupato di riferire cose di data/ora perché ci sono così tante sfumature e io non sono un esperto. Penso che l'impostazione predefinita qui a un certo livello potrebbe essere quella di visualizzare nel proprio fuso orario locale, nel qual caso il ripetuto 06-Nov potrebbe effettivamente essere corretto. Sono in "America/Los_Angeles" quindi se inizio con una sequenza di EST volte che sono a 24 ore di distanza (cioè ciò che è probabilmente usato per le zecche) e che attraversano la transizione di risparmio di luce diurna, e quindi li formatto nel mio fuso orario locale , Ho anche ripetuto 06-Nov. ... –

Problemi correlati