我正在开发一个闪亮的 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)
提前致谢!
在
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"
)