在单个闪亮的应用程序中创建多个时间线

Creating multiple timelines in single shiny app

我正在尝试一个接一个地创建多个时间线以显示在一个闪亮的应用程序中。举一个最小的例子,假设我有一个数据框,我从中创建了一个这样的时间线

library(timevis)
library(shiny)
df1 <- data.frame(start =c('2019-01-08 20:00:00','2019-01-08 20:30:00'))

ui <- fluidPage(timevisOutput("timeline"))
server <- function(input, output) {
  output$timeline <- renderTimevis(
    timevis(df1) 
  )
}
shinyApp(ui, server)
}

它将创建一个时间轴,例如 Basic Timeline

但是,如果数据以这种格式存在

df <- data.frame(id =c(1,2),
                 time1 =c('2019-01-08 20:00:00','2019-01-08 20:30:00'),
                 time2 =c('2019-01-08 21:00:00','2019-01-08 21:10:00'))

如何使用 timevis

创建一个像这样 Desired Output 的闪亮应用

此外,如果在每个时间线之前我可以有一个包含 id 的文本输出,例如时间线 1 之前的 id =1,然后时间线 2 之前的 id =2,这将有助于区分哪个时间线对应哪个 id。

这将根据需要创建时间线并添加一个内容列,将每个时间线的 'name' 显示为 Timeline {id}

library(timevis)
library(shiny)

df <- data.frame(id =c(1,2),
                 time1 =c('2019-01-08 20:00:00','2019-01-08 20:30:00'),
                 time2 =c('2019-01-08 21:00:00','2019-01-08 21:10:00'))


ui <- fluidPage(uiOutput("timelines"))

server <- function(input, output) {
  
  colnames(df) <- c("id", "start", "end")
  
  df$content = paste0("Timeline ", df$id)
  
  timelines <- sapply(1:nrow(df), function(i) {
    renderTimevis(timevis(df[i,]))
  })
  
  output$timelines <- renderUI(timelines)
  
}
shinyApp(ui, server)

这会为每个时间轴添加单独的标签,而不是使用内容列。

library(timevis)
library(shiny)

df <- data.frame(id =c(1,2),
                 time1 =c('2019-01-08 20:00:00','2019-01-08 20:30:00'),
                 time2 =c('2019-01-08 21:00:00','2019-01-08 21:10:00'))


ui <- fluidPage(uiOutput("timelines"))

server <- function(input, output) {
  
  timelines <- sapply(1:nrow(df), function(i) {
    timeline <- timevis(showZoom = FALSE, options = list(margin.axis = 100)) %>% 
      addItems(data.frame(start = c(df[i, "time1"], df[i, "time2"]),
                          content = c("Time1", "Time2"))) %>%
      centerTime(df[i, "time1"],list(animation=FALSE)) %>%
      fitWindow(list(animation=FALSE)) 
    tagList(list(renderText(paste0("Timeline ", i)), renderTimevis(timeline)))
  })
  
  output$timelines <- renderUI({
    timelines
    })
  
}
shinyApp(ui, server)

出于某种原因,在另一台计算机上 date/times 出现问题。

我添加了这个,它似乎解决了问题。

  df$time1 <- as.POSIXct(df$time1,format="%Y-%m-%d %H:%M:%S")
  df$time2 <- as.POSIXct(df$time2,format="%Y-%m-%d %H:%M:%S")