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