Poiché il problema è comune a molti ambienti software statistici, discutiamolo qui su Cross Validated anziché migrarlo in un forum specifico per R (come StackOverflow).
Il vero problema è che Date
viene trattato come un fattore - una variabile discreta - e quindi le linee non vengono collegate correttamente. (Né i punti vengono tracciati in modo perfettamente accurato in direzione orizzontale.)
Per creare il diagramma a destra, il Date
campo è stato convertito da un fattore a una data effettiva, ogni settimana è stata identificata con un semplice calcolo (interrompendo le settimane tra sabato e domenica) e le linee sono state interrotte nei fine settimana ripetendo ciclicamente le settimane:
oracle$date <- as.Date(oracle$Date)
oracle$week.num <- (as.integer(oracle$date) + 3) %/% 7
oracle$week <- as.Date(oracle$week.num * 7 - 3, as.Date("1970-01-01", "%Y-%m-%d"))
par(mfrow=c(1,2))
plot(as.factor(unclass(oracle$Date[1:120])), oracle$Open[1:120], type="l",
main="Original Plot: Inset", xlab="Factor code")
plot(oracle$date[1:120], oracle$Open[1:120], type="n", ylab="Price",
main="Oracle Opening Prices")
tmp <- by(oracle[1:120,], oracle$week[1:120], function(x) lines(x$date, x$Open, lwd=2))
(Una data equivalente di ogni settimana, che oracle
indica il lunedì di quella settimana, è stata anche memorizzata nel frame di dati perché può essere utile per tracciare dati aggregati settimanali.)
L'intenzione originale può essere raggiunta semplicemente emulando l'ultima riga per visualizzare tutti i dati. Per aggiungere alcune informazioni sul comportamento stagionale, la seguente trama varia il colore per settimana durante ogni anno solare:
par(mfrow=c(1,1))
colors <- terrain.colors(52)
plot(oracle$date, oracle$Open, type="n", main="Oracle Opening Prices")
tmp <- by(oracle, oracle$week,
function(x) lines(x$date, x$Open, col=colors[x$week.num %% 52 + 1]))