如何在r-plotly中向线形图的峰动态添加注释?

时间:2019-04-05 18:50:19

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

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

我实际上只是复制粘贴了代码,并做了一些小的更改以使其运行(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 个答案:

答案 0 :(得分: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))