在Shiny应用中实现日历选择器与散点图联动的技术咨询
实现Shiny日历与散点图联动的完整方案
我对你的代码做了核心适配,直接运行下方代码即可实现需求:
- 日历仅开放有数据的日期可选,其余日期自动禁用
- 选中任意日期后自动刷新对应5个类别的散点图,数值完全匹配你提供的数据集
library(shiny) library(shinythemes) library(ggplot2) # 工具函数返回全量数据集,供服务端动态过滤 function.cl<-function(){ df <- structure(list(date = c("2021-01-01","2021-01-02","2021-01-03","2021-01-04","2021-01-05"), D1 = c(3,1,4,5,6), DR01 = c(2,4,5,6,7), DR02 = c(6,3,2,6,1),DR03 = c(5,2,8,9,7), DR04 = c(3,5,3,3,7)),class = "data.frame", row.names = c(NA, -5L)) return(df) } ui <- fluidPage( shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE, br(), tabPanel("", sidebarLayout( sidebarPanel( uiOutput("date"), br(), ), mainPanel( tabsetPanel( tabPanel("",plotOutput("Graph",width = "95%", height = "600"))), )) ))) server <- function(input, output,session) { full_data <- reactive(function.cl()) output$date <- renderUI({ all_dates <- seq(as.Date('2021-01-01'), as.Date('2021-01-15'), by = "day") disabled <- as.Date(setdiff(all_dates, as.Date(full_data()$date)), origin = "1970-01-01") dateInput(input = "date", label = "Select Date", min = min(full_data()$date), max = max(full_data()$date), value = max(full_data()$date), format = "dd-mm-yyyy", datesdisabled = disabled) }) output$Graph <- renderPlot({ req(input$date) # 过滤选中日期对应数据 selected_row <- full_data()[full_data()$date == as.character(input$date),] # 转换为绘图用长格式 plot_df <- data.frame( category = c("D1","DR01","DR02","DR03","DR04"), value = c(selected_row$D1, selected_row$DR01, selected_row$DR02, selected_row$DR03, selected_row$DR04) ) # 生成散点图 ggplot(plot_df, aes(x = category, y = value)) + geom_point(size = 4, color = "#2c3e50") + labs(title = paste0("日期:", input$date, " 指标散点图"), x = "类别", y = "数值") + theme_minimal(base_size = 15) }) } shinyApp(ui = ui, server = server)
内容的提问来源于stack exchange,提问作者Antonio
相关产品推荐
相关产品推荐

