Ponieważ problem jest wspólny dla wielu środowisk oprogramowania statystycznego, omówmy go tutaj na Cross Validated, a nie migrujemy go na forum specyficzne dla języka R (takiego jak StackOverflow).
Prawdziwym problemem jest to, że Date
jest traktowany jako czynnik -A zmiennej dyskretnej - i tak linie nie są prawidłowo podłączone. (Punkty nie są drukowane idealnie dokładnie w kierunku poziomym.)
Aby wykonać prawostronny wykres, Date
pole zostało przekształcone ze współczynnika na rzeczywistą datę, każdy tydzień był identyfikowany za pomocą prostego obliczenia (przerywanie tygodni między sobotą a niedzielą), a linie były przerywane w weekendy przez zapętlanie w ciągu tygodni:
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))
(Odpowiednik daty każdego tygodnia, podając poniedziałek tego tygodnia, również został zapisany w oracle
ramce danych, ponieważ może być przydatny do kreślenia tygodniowych danych zagregowanych).
Pierwotny zamiar można osiągnąć po prostu przez emulację ostatniego wiersza w celu wyświetlenia wszystkich danych. Aby dodać informacje o sezonowym zachowaniu, poniższy wykres zmienia kolor w zależności od tygodnia w każdym roku kalendarzowym:
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]))