Проблема преобразования даты для временных рядов с использованием plot.ts () - PullRequest
0 голосов
/ 06 октября 2019

У меня есть фрейм данных с датой в формате yyyy-mm-dd и ценами на акции, но я не вижу дату на оси x при построении графика с использованием plot.ts(). Я попробовал несколько альтернатив, упомянутых ниже, но они не работали.

enter image description here

Я конвертировал дату, используя

  1. data$Date<-as.Date(data$Date, "%Y-%m-%d") ИЛИ
  2. data$Date<-ymd(data$Date) с использованием пакета lubridate

и затем

bby <- ts(data=data$Share_price, frequency=2, start=c(data[1,"Date"]))
plot.ts(bby))

Не удалось.

Я также пытался

bby <- ts(data=data$Share_price, frequency=2,
     start=as.Date("2017-10-05"), end=as.Date("2019-10-04"))`

, а затем plot.ts(bby)

, но опять-таки это не сработало. Я всегда получаю следующий график:

enter image description here

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Обычно класс ts используется для данных за месяц, квартал или год, но не за день.

Предполагая, что DF имеет столбцы даты и числа в соответствии с воспроизводимой формой, показанной в примечании в конце, преобразуйте в зоопарккласс. Тогда мы можем легко построить графику, используя классическую графику, ggplot2 или решетчатую графику.

library(zoo)
z <- read.zoo(DF)

plot(z, main = "classic")

library(ggplot2)
autoplot(z) + 

library(lattice)
xyplot(z)

Построение всех трех вместе с использованием cowplot

library(gridGraphics)
library(cowplot)

plot(z)
p1 <- recordPlot()

library(ggplot2)
p2 <- autoplot(z)

library(lattice)
p3 <- xyplot(z)

plot_grid(p1, p2, p3, labels = c("classic", "ggplot2", "lattice"), nrow = 1)

, давая:

screenshot

Примечание

DF <- structure(list(Date = structure(c(17444L, 17445L, 17448L, 17449L, 
17450L, 17451L), class = "Date"), Share_price = c(1708.84, 1718.4, 
1724.14, 1762.39, 1766.21, 1813.07)), class = "data.frame", row.names = c(NA, 
-6L))
0 голосов
/ 06 октября 2019

Настройка ts немного неуклюжа, и ее сюжеты не всегда самые дружелюбные. Вы можете настроить свои данные следующим образом. Обратите внимание, что вам нужно указать «начало» для объекта временного ряда ниже довольно болезненным образом, а затем (поскольку он принимает только регулярные временные интервалы) вы потеряете дневной разрыв в исходном ряду:

z <- seq.Date(as.Date('2017-10-05'), by = 1, length.out = 8)
data <- data.frame(Date = z[-(3:4)],
                   Share_price = c(1708.84, 1718.40, 1724.14, 1762.39, 1766.21, 1813.07))
myts <- ts(data$Share_price,
           start = c(2017, as.numeric(format(data$Date[1], "%j"))),
           frequency = 365)
plot(myts)

Plot of ts object

Теперь ось x имеет десятичные смещения с 2017 года.

Возможно, пакет xts здесь лучше? Он может обрабатывать нерегулярные временные индексы.

library(xts)
myxts <- xts(data$Share_price, data$Date)
plot(myxts)

enter image description here

Смотрите документацию plot.xts () для всех видов сигналов и свистков, чтобы украсить свой график.

...