尝试使用ggplotly
用垂直线表示时间序列数据以表示感兴趣的日期。
调用失败,并在Ops.Date(z [[xy]],86400000)中出现错误:*未为“日期”对象定义。我尝试使用最新的CRAN和ggplot2的开发版本均未成功(根据建议)。其他SO问题(例如ggplotly and geom_bar when using dates - latest version of plotly (4.7.0))无法解决我的问题。
如下图所示,图形对象p
-ggplot
和ggplotly
均按预期工作。但是,将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
答案 0 :(得分:0)
我只是使用@Axeman的建议解决了这个问题。就您而言,您只需替换日期即可:
lubridate::ymd("2019-01-01")
成为
as.numeric(lubridate::ymd("2019-01-01"))
不漂亮,但是可以。
答案 1 :(得分:0)
供以后参考:
通过日期(或POSIX *)创建的垂直线到数字转换的弹出窗口相当空白。这对于通常无法直接读取确切时间的POSIX *应用程序尤其有效。
如果您需要更多重要的弹出内容,则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"))