当数据为 POSIXct 时,ggplotly() 不显示 geom_vline / geom_hline
ggplotly() does not display geom_vline / geom_hline when data is POSIXct
我正在尝试用 "time markers" 制作图表。这些时间标记是某些日期的垂直线。时间数据为 POSIXct 格式。我想使用 Plotly 出色的交互界面,并在其中使用我的 ggplot 对象。
问题是这些 "time markers" 在使用 ggplotly() 后没有显示。我已经尝试使用 plotly::add_segments()
但它不起作用。
这里有两个可重现的例子:
1.对于非 POSIXct 数据,它工作正常
# dummy dataset
df2 = data.frame(id = 1:10, measure = runif(10, 0, 20))
events2 = data.frame(number = c(2,3,8))
# ggplot graph
p2 = ggplot() + geom_line(data = df2, aes(x = id, y = measure)) +
geom_vline(data = events2, aes(xintercept = events2$number), color = "red")
p2
# plotly graph that displays the geom_vline properly
ggplotly(p2)
2。使用 POSIXct 数据不会显示正确的结果
# dummy dataset
df = data.frame(date = seq(as.POSIXct("2017-07-01", tz = "UTC", format = "%Y-%m-%d"),
as.POSIXct("2018-04-15", tz = "UTC", format = "%Y-%m-%d"),
"1 month"),
measure = runif(10, 0, 20))
events = data.frame(date_envents = as.POSIXct(c("2017-10-12", "2017-11-12", "2018-03-15"), tz = "UTC", format = "%Y-%m-%d"))
# ggplot graph
p = ggplot() + geom_line(data = df, aes(x = date, y = measure)) +
geom_vline(data = events, aes(xintercept = events$date), color = "red")
p
# plotly graph that does not display the geom_vline properly
ggplotly(p)
我看到了一些解决方法(比如这个:),但它是 "complicated"。有没有更简单的方法来解决这个问题?
我正在使用 Windows 10 和 R 版本 3.5.0、RStudio 和以下软件包:
library(tidyverse)
和 library(plotly)
一个简单的解决方法是将 geom_vline
的 xintecept
设置为数字。
示例数据
df = data.frame(date = seq(as.POSIXct("2017-07-01", tz = "UTC", format = "%Y-%m-%d"),
as.POSIXct("2018-04-15", tz = "UTC", format = "%Y-%m-%d"),
"1 month"),
measure = runif(10, 0, 20))
events = data.frame(date_envents = as.POSIXct(c("2017-10-12", "2017-11-12", "2018-03-15"), tz = "UTC", format = "%Y-%m-%d"))
代码
p = ggplot() + geom_line(data = df, aes(x = date, y = measure)) +
geom_vline(data = events, aes(xintercept = as.numeric(events$date)), color = "red")
结果
ggplotly(p)
我正在尝试用 "time markers" 制作图表。这些时间标记是某些日期的垂直线。时间数据为 POSIXct 格式。我想使用 Plotly 出色的交互界面,并在其中使用我的 ggplot 对象。
问题是这些 "time markers" 在使用 ggplotly() 后没有显示。我已经尝试使用 plotly::add_segments()
但它不起作用。
这里有两个可重现的例子:
1.对于非 POSIXct 数据,它工作正常
# dummy dataset df2 = data.frame(id = 1:10, measure = runif(10, 0, 20)) events2 = data.frame(number = c(2,3,8)) # ggplot graph p2 = ggplot() + geom_line(data = df2, aes(x = id, y = measure)) + geom_vline(data = events2, aes(xintercept = events2$number), color = "red") p2 # plotly graph that displays the geom_vline properly ggplotly(p2)
2。使用 POSIXct 数据不会显示正确的结果
# dummy dataset df = data.frame(date = seq(as.POSIXct("2017-07-01", tz = "UTC", format = "%Y-%m-%d"), as.POSIXct("2018-04-15", tz = "UTC", format = "%Y-%m-%d"), "1 month"), measure = runif(10, 0, 20)) events = data.frame(date_envents = as.POSIXct(c("2017-10-12", "2017-11-12", "2018-03-15"), tz = "UTC", format = "%Y-%m-%d")) # ggplot graph p = ggplot() + geom_line(data = df, aes(x = date, y = measure)) + geom_vline(data = events, aes(xintercept = events$date), color = "red") p # plotly graph that does not display the geom_vline properly ggplotly(p)
我看到了一些解决方法(比如这个:
我正在使用 Windows 10 和 R 版本 3.5.0、RStudio 和以下软件包:
library(tidyverse)
和 library(plotly)
一个简单的解决方法是将 geom_vline
的 xintecept
设置为数字。
示例数据
df = data.frame(date = seq(as.POSIXct("2017-07-01", tz = "UTC", format = "%Y-%m-%d"),
as.POSIXct("2018-04-15", tz = "UTC", format = "%Y-%m-%d"),
"1 month"),
measure = runif(10, 0, 20))
events = data.frame(date_envents = as.POSIXct(c("2017-10-12", "2017-11-12", "2018-03-15"), tz = "UTC", format = "%Y-%m-%d"))
代码
p = ggplot() + geom_line(data = df, aes(x = date, y = measure)) +
geom_vline(data = events, aes(xintercept = as.numeric(events$date)), color = "red")
结果
ggplotly(p)