Я работаю над небольшим блестящим приложением R, которое генерирует графики на основе вводимых пользователем данных. Сначала я создал функцию построения графика, и она работает так, как задумано, где ось X фиксируется в течение определенного диапазона времени. Идея состоит в том, чтобы пользовательские параметры добавляли линии/ленты/аннотации.
Однако, когда я использую это приложение на блестящей панели управления, оно отображает неправильное время на оси X ggplot (хотя время на ползунках ввода правильное). Я заметил, что если я изменю часовой пояс своего компьютера с горного времени на время Великобритании/Гринвича, это исправит график приборной панели.
Но если я попытаюсь установить часовой пояс в начале кода с помощью чего-то вроде 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 для значений, min и maxsliderInput, а также передайте timezone = "UTC":
sliderInput(
"window",
"window start and end",
min = as.POSIXct("3:00 PM", format = "%I:%M %p", tz = "UTC"),
max = as.POSIXct("11:59 PM", format = "%I:%M %p", tz = "UTC"),
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"
)
Это ближе! Я вижу ползунки и график одинаковыми, но они отображаются с 13:00 до 22:00. Есть ли способ заставить их обоих отображать время с 15:00 до полуночи? Это время, которое я установил для ввода слайдера и функции построения графика.
@Начо Да, пожалуйста, посмотрите мой обновленный ответ. Вам также понадобится tz = "UTC" в min и max.
Можете ли вы ответить, работает ли ответ? В чем смысл редактирования?