如何在vistime中绘制垂直线?

问题描述

我想在vistime图中添加一条表示当前日期的垂直线。我尝试了多种方法,但仍无法弄清楚。 这是您可以构建的可复制的小代码

library(shiny)
library(plotly)
library(vistime)

pres <- data.frame(Position = rep(c("President","Vice"),each = 3),Name = c("Washington",rep(c("Adams","Jefferson"),2),"Burr"),start = c("1789-03-29","1797-02-03","1801-02-03"),end = c("1797-02-03","1801-02-03","1809-02-03"),color = c('#cbb69d','#603913','#c69c6e'),fontcolor = c("black","white","black"))

shinyApp(
  ui = plotlyOutput("myVistime"),server = function(input,output) {
    output$myVistime <- renderPlotly({
      vistime(pres,col.event = "Position",col.group = "Name")
    })
  }
)

解决方法

您可以使用add_segments向使用plotly制作的vistime时间线添加一条垂直线。在此示例中,xaxis将为年份。 yaxis的首长位于y = 1、3、5、7,因此在此示例中,线段应从0扩展到8(y = 0yend = 8)。

编辑:要自动从plotly对象获取yaxis范围,您可以尝试使用plotly_build并以这种方式提取布局属性。

curr_year = 1801

p <- vistime(pres,col.event = "Position",col.group = "Name") %>%
  layout(showlegend = FALSE)
      
pb <- plotly_build(p)

add_segments(p,x = curr_year,xend = curr_year,y = pb$x$layout$yaxis$range[1],yend = pb$x$layout$yaxis$range[2],color = I("light green"))

图解

plot with vertical segment

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...