Построение временных рядов с метками даты и времени POSIXct на оси x

#r #plot #time-series #axis-labels #posixct

#r #построение #временные ряды #ось-метки #posixct

Вопрос:

У меня есть данные в следующем формате:

my.XYZ$datetime<- as.POSIXct(myXYZ$datetime, format = «%Y-%m-%d %H:%M:%S»)

head(my.XYZ)

 units            datetime
1     1 0012-08-03 07:49:02
2     1 0012-08-05 12:27:21
3     1 0012-08-17 06:55:07
4     1 0012-08-20 10:56:49
5     1 0012-08-08 10:14:36
6     1 0012-08-20 16:12:26
  

Я хочу создать график временных рядов, где ось x представляет время и дату, а ось y — единицы измерения. Это то, что я делал до сих пор:

 > # make it a zoo object
> zoo.XYZ<- zoo(my.XYZ)

> # make it a ts
> ts.XYZ<- ts(zoo.XYZ)

> #plotting the ts object
> plot(ts.XYZ, plot.type="single")

>Warning messages:
> 1: In xy.coords(x = matrix(rep.int(tx, k), ncol = k), y = x, log = log) :
> NAs introduced by coercion
> 2: In xy.coords(x, y) : NAs introduced by coercion
  

Здесь я получаю правильный график, но моя ось x задается не по дате, а по номеру переменной (переменная 1, 2, 3 … 430)

Я также попробовал следующее:

 ># plot as plot.ts
> plot.ts(ts.XYZ)

>Error in plot.window(...) : need finite 'ylim' values
>In addition: Warning messages:
>1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
>2: In min(x) : no non-missing arguments to min; returning Inf
>3: In max(x) : no non-missing arguments to max; returning -Inf

> plot.ts(ts.XYZ, xaxt = "n")

>Error in plot.window(...) : need finite 'ylim' values
>In addition: Warning messages:
>1: In xy.coords(x, y, xlabel, ylabel, log) : NAs introduced by coercion
>2: In min(x) : no non-missing arguments to min; returning Inf
>3: In max(x) : no non-missing arguments to max; returning -Inf

> axis(1, my.XYZ$datetime, format(my.XYZ$datetime, "%Y-%m-%d %H:%M:%S"), cex.axis = .7)
  

Опять же, график правильный, а ось x — нет.

Кто-нибудь знает, как с этим справиться?

Спасибо.

Giulia

Ответ №1:

Когда вы создаете свой zoo() объект, вам необходимо указать, в каком столбце содержится значение даты / времени с помощью order.by= параметра. Попробуйте

 zoo.XYZ <- zoo(my.XYZ[,-2], order.by=my.XYZ[,2])
  

Также похоже, что ваша строка формата для дней может быть неправильной. Я сомневаюсь, что ваши наблюдения произошли в 12 году нашей эры. Измените свою строку на %y-%m-%d %H:%M:%S" , если у вас есть только двузначные годы для интерпретации этих значений как 2012.