Плотные линии: сделать разрыв строки графика, даже если для этого разрыва нет записей - PullRequest
0 голосов
/ 29 июня 2018

У меня проблема с построением временного ряда с заговором в R. В основном у меня есть данные в фрейме данных, структурированном так:

datetime            | measure
2018-04-09 00:40:05 | 3.4
2018-04-09 00:41:00 | 3.9
2018-04-09 00:42:07 | 3.8
2018-04-09 00:43:00 | 3.7
2018-04-09 00:44:00 | 4.2
2018-04-09 00:45:00 | 5.8
2018-04-09 01:15:00 | 5.8

Наблюдения распределены неравномерно, у меня есть одно наблюдение в каждую минуту, но примерно, может быть разница в несколько секунд. Тогда у меня есть большие промежутки между наблюдениями, в примере, который я привел здесь, есть промежуток в 30 минут между последним наблюдением и предыдущим.

Очевидно, что Plotly соединяет эти два последних наблюдения в линейном графике, и вместо этого я хотел бы получить пустой пробел.

Спасибо за вашу помощь и внимание!

1 Ответ

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

Этого можно добиться, разделив ваши данные на «куски» и нанеся каждый из них на отдельную трассу. Воспроизводимый пример:

df <- data.frame(
  time = Sys.time() - c(1:10, 51:60),
  value = runif(20),
  chunk = rep(c("A", "B"), each = 10)
)

p <- plot_ly(data = df[which(df$chunk == "A"),], x = ~time, y = ~value, name = "chunk A", type = "scatter", mode = "lines") %>%
  add_trace(data = df[which(df$chunk == "B"),], x = ~time, y = ~value, name = "chunk B", type = "scatter", mode = "lines")

# or if there are more 'chunks'
p2 <- plot_ly(data = df, x = ~time, y = ~value, color = ~chunk, type = "scatter", mode = "lines")

Естественно, вам нужно найти осмысленный способ группировки данных, т. Е. Если разница во времени между наблюдениями превышает [укажите отсечение] , перейдите к новому фрагменту.

...