0

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

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)
}

它将创建一个时间线,如 基本时间线

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

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。

4

1 回答 1

1

这将根据需要创建时间线,并添加一个内容列,将每个时间线的“名称”显示为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)

由于某种原因,在另一台计算机上出现了日期/时间问题。

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

  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")

在此处输入图像描述

于 2021-09-15T15:02:19.980 回答