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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:54:03