нерегулярные временные ряды с использованием графика ggplot2 неправильно масштабируются и выглядят забитыми - PullRequest
0 голосов
/ 01 июня 2018

У меня есть некоторые почасовые данные, которые я хочу построить, используя ggplot2;Я сделаю TSA для этого и хотел бы добавить слой к исходному графику позже.

пример моих данных выглядит следующим образом:

                   Date Volume
1   2018-03-01 10:30:00 143432
2   2018-03-01 11:30:00  93522
3   2018-03-01 12:30:00 152178
4   2018-03-01 13:30:00 117424
5   2018-03-01 14:30:00 268167
6   2018-03-01 15:30:00 245504
7   2018-03-01 15:59:00 288977
8   2018-03-02 10:30:00 230484
9   2018-03-02 11:30:00 265244
10  2018-03-02 12:30:00 183313
11  2018-03-02 13:30:00 130850
12  2018-03-02 14:30:00 139846
13  2018-03-02 15:30:00 257797
14  2018-03-02 15:59:00 261628
15  2018-03-05 10:30:00 140620
16  2018-03-05 11:30:00 171228
17  2018-03-05 12:30:00 118685
18  2018-03-05 13:30:00 107209
19  2018-03-05 14:30:00 116918
20  2018-03-05 15:30:00 225035

Я создал объект zoo(Я знаю, мы могли бы также использовать xts или irts):

temp <- read.csv('somefile.csv')
zt <- zoo(x = temp, order.by = as.POSIXct(temp$Date))

Затем я попытался создать объект ggplot с помощью:

a <- ggplot(data = zt, aes(x = index(zt), y = coredata(zt)))
a + geom_line()

график выглядел следующим образом:

enter image description here

По-видимому, он неправильно масштабирован, и график очень переполнен.

Как правильно построить его, используя ggplot2?

Из какой-то справки я знаю, что могу использовать chart_series из quantmod для ее построения, но я не уверен, что функция предназначена для анализа временных рядов (возможно, больше для построения графиков финансовых данных) и, следовательно, не может бытьдостаточно гибкий для добавления на слои.

РЕДАКТИРОВАТЬ

обычно я хотел бы, чтобы мой график выглядел так:

library(xts)
library(quantmod)
xxt <- xts(x = temp$Volume, order.by = as.POSIXct(temp$Date))
chart_series(xxt)

enter image description here

Мне не нужна вся эстетика, просто то, как она нарисована, - то, что я хотел.Такое ощущение, что график quantmod убрал все пробелы.

1 Ответ

0 голосов
/ 03 июня 2018

Я пытался в течение 45 минут заставить ggplot хорошо играть и вышел пустым.Я поговорю с командой 'zoo' о добавлении опции autoplot.zoo(), чтобы вы могли просто позвонить autoplot(zt, new.option = TRUE), чтобы сгенерировать нужный вам сюжет.


Вы правы, что quantmod::chart_Series() в первую очередьдля финансовых временных рядов.Похоже, вы знакомы с zoo и xts, которые являются классами данных, поддерживающими любые временные ряды.

Вы можете использовать plot.xts().Обязательно установите observation.based = TRUE, чтобы ось x имела одинаковое пространство между наблюдениями независимо от количества времени между ними.

# reproducible data
x <- structure(c(143432L, 93522L, 152178L, 117424L, 268167L, 245504L, 288977L,
230484L, 265244L, 183313L, 130850L, 139846L, 257797L, 261628L, 140620L, 171228L,
118685L, 107209L, 116918L, 225035L), .Dim = c(20L, 1L),
index = structure(c(1519921800, 1519925400, 1519929000, 1519932600, 1519936200,
1519939800, 1519941540, 1520008200, 1520011800, 1520015400, 1520019000,
1520022600, 1520026200, 1520027940, 1520267400, 1520271000, 1520274600,
1520278200, 1520281800, 1520285400), tzone = "", tclass = c("POSIXct", "POSIXt")),
class = c("xts", "zoo"), .indexCLASS = c("POSIXct", "POSIXt"),
tclass = c("POSIXct", "POSIXt"), .indexTZ = "", tzone = "")

Теперь вызовите plot() для объекта xts.

plot(x, observation.based = TRUE, major.ticks = "hours")

enter image description here

...