【问题标题】:Creating multiple timelines in single shiny app在单个闪亮的应用程序中创建多个时间线
【发布时间】:2021-11-10 14:03:48
【问题描述】:

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

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。

【问题讨论】:

    标签: r shiny vis.js-timeline


    【解决方案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")
    

    【讨论】:

    • 嗯,它确实创建了多个时间线,但您将时间戳视为开始和结束时间,而不是如图所示的 2 个单独的点。我想要一个应用程序,以便有一个与时间线分开的文本输出来标记哪个时间线是哪个 id。但这对我来说是一个很好的起点,我会尝试进一步修改它。谢谢! @norie,我将更新所需的输出图片以描述所需的确切输出。
    • 抱歉,我误解了这个问题。我再看看并更新我的答案。
    • 现在,它正在创建 2 个时间线,并显示 TimeLine Number 以区分它。但是所有的时间戳都变成了 000。
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2021-03-05
    • 1970-01-01
    • 2014-12-24
    • 2017-12-28
    • 2014-10-28
    • 1970-01-01
    相关资源
    最近更新 更多