Bởi vì vấn đề là phổ biến đối với nhiều môi trường phần mềm thống kê, chúng ta hãy thảo luận về vấn đề này ở đây trên Xác thực chéo thay vì di chuyển nó sang một diễn đàn dành riêng cho R (chẳng hạn như StackOverflow).
Các thực vấn đề là Date
được coi là một yếu tố --một biến rời rạc - và do đó dòng không được kết nối đúng. (Cũng không phải là các điểm được vẽ hoàn toàn chính xác theo hướng ngang.)
Để thực hiện âm mưu bên phải, Date
trường được chuyển đổi từ một yếu tố thành một ngày thực tế, mỗi tuần được xác định bằng một phép tính đơn giản (phá vỡ các tuần giữa Thứ Bảy và Chủ Nhật) và các dòng bị gián đoạn trong những ngày cuối tuần bằng cách lặp qua các tuần:
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))
(Một ngày tương đương với mỗi tuần, vào Thứ Hai của tuần đó, cũng được lưu trữ trong khung oracle
dữ liệu vì nó có thể hữu ích cho việc vẽ dữ liệu tổng hợp hàng tuần.)
Ý định ban đầu có thể đạt được chỉ bằng cách mô phỏng dòng cuối cùng để hiển thị tất cả dữ liệu. Để thêm một số thông tin về hành vi theo mùa, âm mưu sau thay đổi màu theo tuần trong mỗi năm dương lịch:
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]))