Dado que el problema es común a muchos entornos de software estadístico, vamos a discutirlo aquí en Validación cruzada en lugar de migrarlo a un foro específico de R (como StackOverflow).
El real cuestión es que Date
se trata como un factor --una variable discreta-- y por eso las líneas no se están conectando correctamente. (Tampoco los puntos se trazan con perfecta precisión en la dirección horizontal).
Para realizar el gráfico de la derecha, el Date
El campo se convirtió de un factor a una fecha real, cada semana se identificó con un simple cálculo (rompiendo las semanas entre sábado y domingo) y las líneas se interrumpieron durante los fines de semana haciendo un bucle sobre las semanas:
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))
(Un equivalente a la fecha de cada semana, dando el lunes de esa semana, también se almacenó en el oracle
dataframe porque puede ser útil para trazar datos agregados semanales).
La intención original se puede lograr simplemente emulando la última línea para mostrar todos los datos. Para añadir algo de información sobre el comportamiento estacional, el siguiente gráfico varía el color por semanas a lo largo de cada año natural:
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]))