You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R Shiny: 小时维度sliderInput与reactive联动实现绘图时间范围筛选问题求助

问题根因
  • 核心类型错配:原始heure列实际为字符型,未按需求转为hms类型,无法和时间型控件的返回值直接比较
  • 范围完全错位:sliderInput初始设置的时间范围为10:00:00-23:00:00,但测试数据的时间全部为01:05:30-01:05:39,完全落在滑块取值范围外,初始过滤后无任何数据展示
  • 比较逻辑失效:sliderInput默认返回POSIXct类型时间值,与字符型/hms类型的heure列比较时,逻辑判断不生效,拖动滑块无法更新展示范围
修复方案
  • 数据预处理:生成df_test后,执行df_test$heure <- as_hms(df_test$heure)将字符型时间列转为hms类型,匹配业务存储要求
  • 适配滑块参数:若需展示当前测试数据,将滑块的min/max/value修改为适配01:00-02:00的时间范围;若需保留原10:00-23:00的滑块范围,可同步修改测试数据的时间为对应区间
  • 统一比较类型:过滤前将滑块返回值转为与heure列一致的hms类型,保证过滤逻辑生效
修复后可运行代码
library(shiny)
library(ggplot2)
library(dplyr)
library(lubridate)

# 生成测试数据
route_fond_degre <- c(1:10)
heure <- c("01:05:30","01:05:31","01:05:32","01:05:33","01:05:34","01:05:35","01:05:36","01:05:37","01:05:38","01:05:39")
df_test <- data.frame(heure, route_fond_degre)
# 主动转换为hms类型
df_test$heure <- as_hms(df_test$heure)

ui <- fluidPage(
  # 调整滑块范围适配当前测试数据,可按需自行修改时间区间
  sliderInput(inputId = "periode",
              label = "Période",
              min = as_hms("01:00:00"),
              max = as_hms("02:00:00"),
              value = c(as_hms("01:00:00"), as_hms("02:00:00")),
              timeFormat = "%H:%M:%S"),
  plotOutput("graph1")
)

server <- function(input, output) {
  date_filtre <- reactive({
    mini <- input$periode[1]
    maxi <- input$periode[2]
    data_sel <- df_test %>% filter(heure >= mini & heure <= maxi)
    return(data_sel)
  })

  output$graph1 <- renderPlot({
    ggplot(date_filtre(), aes(x = heure, y = route_fond_degre)) +
      geom_point()
  })
}

shinyApp(ui = ui, server = server)

内容的提问来源于stack exchange,提问作者Carine44

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.26 02:24:04