【问题标题】:R plot_ly() adding vertical lines to time data [duplicate]R plot_ly()向时间数据添加垂直线[重复]
【发布时间】:2020-09-01 22:43:35
【问题描述】:

我想在我的情节中添加一条特殊日期的垂直线。我正在使用 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 月)?

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

【问题讨论】:

  • stackoverflow.com/questions/34093169/… 这个 SO 问题能解决您的问题吗?有一些答案可以解决类似的问题(我认为)
  • 感谢您的信息! @vestland
  • @MichaelaKordasch 不客气!并欢迎来到论坛!如果此问题作为重复问题被关闭,请不要灰心。继续学习plotly,不要犹豫再问一个问题。

标签: r date plotly line


【解决方案1】:

由于没有提供数据来重现您的问题,我建议使用 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"))

让我知道这是否有效!

【讨论】:

  • 非常感谢@Duck!你可能知道我是否必须手动输入宿舍,或者是否有一个命令可以自动输入?
  • @MichaelaKordasch 嗨,Michaela,有办法做到这一点。您可以使用您想要垂直线的日期定义一个数据框(可以是特定的日期或您提到的季度),然后使用相同的add_trace() 传递日期,您将拥有这些线条。我希望这对你很清楚和有帮助:)
  • @MichaelaKordasch 如果您认为此答案有用,您可以通过单击此答案左侧的勾号来接受它。这取决于你:)
  • 嗨@Duck :) 谢谢你的帮助。我现在创建了一个像这样的数据框:v.years &lt;- as.Date(c("2004-01-01", "2005-01-01", "2006-01-01", "2007-01-01")) dt.dateYears &lt;- as.data.frame(v.years) ,但使用add_trace(data = dt.dateYears, type = 'scatter', mode = 'lines', line = list(color = "black"), name = ''),这不会绘制线条。
  • @MichaelaKordasch 你好 Michaela,我已经用你提到的问题回答了你的新问题。我草拟了一个解决方案。您可以根据原始数据进行调整。我希望这会有所帮助:)
【解决方案2】:

这是基于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

【讨论】:

  • 你知道我是否必须手动输入年初的季度,还是有一个命令可以自动输入?
  • 在底层 JS 库中,他们刚刚将时间格式选项更新为 support quarters。但是,我不知道 plotly R 库什么时候会更新。因此,我猜这是手动工作。
  • 此外,this 可能会有所帮助。
猜你喜欢
  • 2020-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-28
  • 2018-05-25
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
相关资源
最近更新 更多