【问题标题】:How to dynamically add annotation to peak of line graph in r-plotly?如何在 r-plotly 中为折线图的峰值动态添加注释?
【发布时间】:2019-08-27 17:32:04
【问题描述】:

我正在尝试重现this page 中显示的代码,特别是名为“混合数据操作和可视化动词”的代码。

我实际上只是复制粘贴了代码并进行了一些小改动以使其运行(plot_ly 现在需要使用“~”来引用列名等)。但是,我的图表看起来非常不同:

我有什么

我查看了 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))

我希望它看起来像它在网站上的样子(如下),但似乎注释文本只是在整行中被垃圾邮件而不是仅仅停留在最大值:

它应该是什么样子

谁能告诉我我做错了什么?

【问题讨论】:

    标签: r ggplot2 plotly data-visualization r-plotly


    【解决方案1】:

    为什么不先预先计算峰值,然后再将其放入链中

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

    【讨论】: