在 Shiny 中单击 dygraph 中的一个点并在 POSIXct 中打印出其相应的日期

clicking on a point in dygraph in Shiny and printing out its corresponding date in POSIXct

我想点击 dygraph 中的一个点并以 "%Y-%m-%d %H:%M:%S" 格式获取其对应的日期。在这里我重现了我的问题:

library(dygraphs)
library(tidyverse)
library(data.table)
library(shiny)


dates <- seq(as.POSIXct("2021-01-01 05:00:00"), as.POSIXct("2021-01-05 05:00:00"), by = 8*3600)

set.seed(24)

df <- data.table(date = dates,
                 percentage = round(runif(length(dates), min = 0, max = 1), digits = 2)
                 )


ui <- fluidPage(
  fluidRow(
    column(width = 12,
           dygraphOutput("dygraph")
    )
  ),
  fluidRow(
    verbatimTextOutput("click")
  )
)

server <- function(input, output){
  
  output$dygraph <- renderDygraph({
    dygraph(df) 
  })
  
  output$click <- renderPrint({
    input$dygraph_click$x
  })
}

shinyApp(ui = ui, server = server)

输出结果如下:

我的问题是它没有给我正确的格式。我尝试使用格式功能,但没有用。我在 renderprint 中使用了以下行:

format(as.POSIXct(input$dygraph_click$x), "%Y-%m-%d %H:%M:%S")

这是输出:

它没有正确显示 hour:minute:second。

有谁知道如何点击相应的点打印日期的POSIXct格式?如果有任何帮助,我将不胜感激。

您可以使用lubridate::ymd_hmsinput$dygraph_click$x转换为POSIXct格式并使用format显示输出。

output$click <- renderPrint({
    format(lubridate::ymd_hms(input$dygraph_click$x, tz = Sys.timezone()))
  })

完整代码-

library(dygraphs)
library(tidyverse)
library(data.table)
library(shiny)

dates <- seq(as.POSIXct("2021-01-01 05:00:00"), 
             as.POSIXct("2021-01-05 05:00:00"), by = 8*3600)

set.seed(24)

df <- data.table(date = dates,
                 percentage = round(runif(length(dates), min = 0, max = 1), digits = 2)
)

ui <- fluidPage(
  fluidRow(
    column(width = 12,
           dygraphOutput("dygraph")
    )
  ),
  fluidRow(
    verbatimTextOutput("click")
  )
)

server <- function(input, output){
  
  output$dygraph <- renderDygraph({
    dygraph(df) 
  })
  
  output$click <- renderPrint({
    format(lubridate::ymd_hms(input$dygraph_click$x, tz = Sys.timezone()))
  })
}

shinyApp(ui = ui, server = server)