Как динамически добавить аннотацию к пику линейного графа в r-plotly? - PullRequest
2 голосов
/ 05 апреля 2019

Я пытаюсь воспроизвести код, показанный на этой странице , в частности, код с именем "Смешать глаголы манипулирования данными и визуализации."

Я буквально просто скопировал код и внес несколько незначительных изменений, чтобы запустить его (plot_ly теперь требует, чтобы имена столбцов ссылались на "~" и т. Д.). Однако мой график выглядит совсем иначе:

Что у меня есть What I have

Я посмотрел аннотации в plot_ly, но похоже, что точку нужно жестко закодировать, вместо того, чтобы использовать filter автоматически, как это сделал автор. (Если я не неправильно понимаю.) Вот что я использую:

p4 <- plot_ly(economics, x = economics$date, y = economics$uempmed)

p4 %>%
  add_trace(y = fitted(loess(economics$uempmed ~ as.numeric(economics$date)))) %>%
  add_lines(x = economics$date, y = economics$uempmed) %>%
  layout(title = "Median duration of unemployment (in weeks)",
         showlegend = FALSE) %>%
  dplyr::filter(economics$uempmed == max(economics$uempmed)) %>%
  layout(annotations = list(x = economics$date, y = economics$uempmed, text = "Peak", showarrow = T))

Я ожидал, что это будет выглядеть на веб-сайте (ниже), но похоже, что текст аннотации просто рассылается по всей строке, а не остается на максимуме:

Как это должно выглядеть

What it should look like

Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

1 голос
/ 05 апреля 2019

Почему бы не предварительно рассчитать пик прежде, чем поместить его в цепочку

peak <- dplyr::filter(economics, uempmed == max(uempmed))
p4 %>%
  add_trace(y = fitted(loess(economics$uempmed ~ as.numeric(economics$date)))) %>%
  add_lines(x = economics$date, y = economics$uempmed) %>%
  layout(title = "Median duration of unemployment (in weeks)",
         showlegend = FALSE) %>%
  layout(annotations = list(x = peak$date, y = peak$uempmed, text = "Peak", showarrow = T))
...