R plot_ly() 向时间数据添加垂直线

R plot_ly() adding vertical lines to time data

我想在我的情节中添加一条特殊日期的垂直线。我正在使用 R 中 plotly 包中的 plot_ly() 函数。

 p <- plot_ly(dt.allDataFvsS, x = dt.allDataFvsS$date, y = dt.allDataFvsS$meanDifference, mode = 'lines',
              type = "scatter", line = list(color = " #007d3c")) %>%
      layout(title = "Average Price Difference Forward vs. Spot", xaxis = list(title = "Date"),
             yaxis = list(title = "EUR / MWh"))
 

     

日期具有以下形式:例如"2018-10-01" ("Y-M-D")

我的剧情是这样的:

PLOT

所以,我的问题是 如何在日期 "2018-10-01" 得到一条黑色垂直线? 是否也可以在每年的开头有竖线?还是每年每个季度(1 月 - 4 月 - 7 月 - 10 月)?

如果有人能帮助我,我会很高兴吗?不幸的是,在网上浏览了一天后,我找不到任何有用的东西。

由于没有提供数据来重现您的问题,我建议使用 add_trace() 函数的下一种方法,您可以在其中定义线的坐标:

p <- plot_ly(dt.allDataFvsS, x = dt.allDataFvsS$date, y = dt.allDataFvsS$meanDifference, mode = 'lines',
             type = "scatter", line = list(color = " #007d3c")) %>%
  add_trace(x =as.Date("2018-10-01"),type = 'scatter', mode = 'lines',
            line = list(color = 'black'),name = '') %>%
  layout(title = "Average Price Difference Forward vs. Spot", xaxis = list(title = "Date"),
         yaxis = list(title = "EUR / MWh"))

如果可行,请告诉我!

这是基于shapes的另一种方法,而不是添加另一条轨迹(缩小时可以看到差异+垂直线没有图例项):

library(plotly)

dates <- seq(from = as.Date("2018-08-01"), to = as.Date("2018-12-31"), by = 1)
dt.allDataFvsS <- data.frame(date = dates, meanDifference = sin(seq_along(dates)*0.1))

vline <- function(x = 0, color = "red") {
  list(
    type = "line", 
    y0 = 0, 
    y1 = 1, 
    yref = "paper",
    x0 = x, 
    x1 = x, 
    line = list(color = color)
  )
}

p <- plot_ly(dt.allDataFvsS, x = dt.allDataFvsS$date, y = dt.allDataFvsS$meanDifference, mode = 'lines',
             type = "scatter", line = list(color = " #007d3c")) %>%
  layout(title = "Average Price Difference Forward vs. Spot", xaxis = list(title = "Date"),
         yaxis = list(title = "EUR / MWh"))

p %>% layout(shapes = list(vline(as.Date("2018-10-01"))))

基于this answer