ggplotly失败,带有带有xintercept Date值的geom_vline()

时间:2019-03-13 19:45:03

标签: r ggplot2 r-plotly ggplotly

尝试使用ggplotly用垂直线表示时间序列数据以表示感兴趣的日期。

调用失败,并在Ops.Date(z [[xy]],86400000)中出现错误:*未为“日期”对象定义。我尝试使用最新的CRAN和ggplot2的开发版本均未成功(根据建议)。其他SO问题(例如ggplotly and geom_bar when using dates - latest version of plotly (4.7.0))无法解决我的问题。

如下图所示,图形对象p-ggplotggplotly均按预期工作。但是,将geom_vline()添加到p2中的绘图中时,它只能在ggplot中正常工作,调用ggplotly(p2)时会失败。

library(plotly)
library(ggplot2) 
library(magrittr)

set.seed(1)
df <- data.frame(date = seq(from = lubridate::ymd("2019-01-01"), by = 1, length.out = 10),
                 y = rnorm(10))

p <- df %>% 
  ggplot(aes(x = date, y = y)) + 
  geom_line() 
p ## plots as expected
ggplotly(p) ## plots as expected

p2 <- p + geom_vline(xintercept = lubridate::ymd("2019-01-08"), linetype = "dashed")
p2 ## plots as expected
ggplotly(p2) ##fails

2 个答案:

答案 0 :(得分:0)

我只是使用@Axeman的建议解决了这个问题。就您而言,您只需替换日期即可:

 lubridate::ymd("2019-01-01")

成为

 as.numeric(lubridate::ymd("2019-01-01"))

不漂亮,但是可以。

答案 1 :(得分:0)

供以后参考:

通过日期(或POSIX *)创建的垂直线到数字转换的弹出窗口相当空白。这对于通常无法直接读取确切时间的POSIX *应用程序尤其有效。

numeric

如果您需要更多重要的弹出内容,则text美学的定义可能会有所帮助(只需忽略“未知美学”警告,因为它似乎并不适用)。然后,只需通过tooltip参数指定鼠标悬停时要查看的内容,即。排除xintercept,一切都准备就绪。

p2 = p + 
  geom_vline(
    aes(
      xintercept = as.numeric(lubridate::ymd("2019-01-08"))
      , text = "date: 2019-01-08"
    )
    , linetype = "dashed"
  )

ggplotly(p2, tooltip = c("x", "y", "text"))

date