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

Posted

技术标签:

【中文标题】在单个闪亮的应用程序中创建多个时间线【英文标题】: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。

【问题讨论】:

【参考方案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。

以上是关于在单个闪亮的应用程序中创建多个时间线的主要内容,如果未能解决你的问题,请参考以下文章

如何在闪亮中创建加载事件或默认事件?

如何使用 Shinyauthr 库在闪亮中创建登录而不在 R 中显示主面板?

编辑表时如何使用数据表在闪亮表中创建下拉列表?

在单个存储过程中创建两个或多个表

r 为多个文件上传和单个读取步骤演示闪亮的应用程序

如何使用单个工匠命令在 Laravel 8 中创建多个模型?