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

Я сталкиваюсь с проблемой построения временного ряда с помощью графика в 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 ответ

Решение

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

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

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

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

Другие вопросы по тегам