如何使 R 闪亮图和滑块上的时区保持一致?

问题描述 投票:0回答:1

我正在开发一个闪亮的 R 小应用程序,它根据用户输入生成图表。我首先制作了一个绘图函数,它按预期工作,其中 x 轴在一段时间内固定。这个想法是让用户参数添加线条/色带/注释。

但是,当我在闪亮的仪表板上使用此应用程序时,它在 ggplot 的 x 轴上显示不正确的时间(尽管输入滑块上的时间是正确的)。我注意到,如果我将计算机的时区从山区时间更改为英国/格林威治时间,就会修复仪表板图。

但是,如果我尝试在代码开头使用类似

Sys.setenv(TZ='UTC')
的内容设置时区,它会修复绘图并弄乱滑块的时间...

我也尝试在每次使用

as.POSIXct()
时指定时区以使其保持一致,但也没有运气。

似乎无法找到一种方法让滑块和绘图都位于一致的时区。有什么建议吗?

这是我的代码的一个更简单且可重现的版本:

library(tidyverse)
library(shiny)

# plotting function
plot_fc <- function(window_start, window_end){
  
  plot <- ggplot() +
    geom_ribbon(data = data.frame(time = c(as.POSIXct(window_start, format = "%I:%M %p"), as.POSIXct(window_end, format = "%I:%M %p"))), aes(x = time, ymin = -Inf, ymax = Inf), fill = "orange", alpha = 0.5) + 
    ylim(-8, 12) +
    xlim(as.POSIXct("3:00 PM", format = "%I:%M %p"), as.POSIXct("11:59 PM", format = "%I:%M %p"))
  
  return(plot)
  
}

# ui
ui <- fluidPage(
  titlePanel("test"),
  sidebarLayout(
    sidebarPanel(
      sliderInput("window", "window start and end",
                  min = as.POSIXct("3:00 PM", format = "%I:%M %p"),
                  max = as.POSIXct("11:59 PM", format = "%I:%M %p"),
                  value = c(as.POSIXct("5:30 PM", format = "%I:%M %p"), as.POSIXct("8:00 PM", format = "%I:%M %p")),
                  step = 60,
                  timeFormat = "%I:%M %p")),
    mainPanel(plotOutput("plot"))))

# server 
server <- function(input, output, session) {
  output$plot <- renderPlot({plot_fc(input$window[1],input$window[2])})
  }

shinyApp(ui = ui, server = server)

提前致谢!

r ggplot2 shiny timezone
1个回答
0
投票

tz = "UTC"
内使用
as.POSIXct
作为
sliderInput
的值,并传递
timezone = "UTC"
:

sliderInput(
  "window",
  "window start and end",
  min = as.POSIXct("3:00 PM", format = "%I:%M %p"),
  max = as.POSIXct("11:59 PM", format = "%I:%M %p"),
  value = c(
    as.POSIXct("5:30 PM", format = "%I:%M %p", tz = "UTC"),
    as.POSIXct("8:00 PM", format = "%I:%M %p", tz = "UTC")
  ),
  step = 60,
  timeFormat = "%I:%M %p",
  timezone = "UTC"
)

© www.soinside.com 2019 - 2024. All rights reserved.