Поскольку эта проблема является общей для многих статистических программных сред, давайте обсудим ее здесь, посвященную перекрестной проверке, а не переносим ее на специализированный форум R (например, StackOverflow).
Реальная проблема в том , что Date
рассматривается как фактор --a дискретной переменной - и поэтому линии не подключены должным образом. (И при этом точки не отображаются совершенно точно в горизонтальном направлении.)
Чтобы составить правый график, Date
поле было преобразовано из фактора в фактическую дату, каждая неделя была идентифицирована с помощью простого вычисления (с разбивкой недель между субботой и воскресеньем), а линии были прерваны в выходные дни с циклическим изменением недель:
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))
(Экран, эквивалентный каждой неделе, с указанием понедельника этой недели, также был сохранен в oracle
кадре данных, поскольку он может быть полезен для построения еженедельных агрегированных данных.)
Исходное намерение может быть достигнуто простым эмуляцией последней строки для отображения всех данных. Чтобы добавить некоторую информацию о сезонном поведении, следующий график меняет цвет по неделям в течение каждого календарного года:
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]))