Сделайте разрыв линии графика, даже если для этого разрыва нет записей

Я столкнулся с проблемой построения временного ряда с помощью plotly в 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, очевидно, связывает эти два последних наблюдения на линейной диаграмме, вместо этого я бы хотел, чтобы между ними был пустой промежуток.


person carloab    schedule 29.06.2018    source источник


Ответы (2)


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

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")

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

person pieca    schedule 29.06.2018

Попробуйте использовать connectgaps=False; проверьте https://plotly.com/r/line-charts/#connect-data-gaps

person odeya    schedule 20.08.2020