如何在R Shiny中基于双输入响应式表格绘制月度统计柱状图?
修正方案
你现有代码的核心问题是图表调用了静态原始数据集,没有关联你已经定义好的动态筛选逻辑,同时下拉选项存在重复冗余,修改如下:
核心修改点
- 下拉选项用
unique()去重,避免同一个组织/项目重复出现 - 图表代码改为调用reactive的
claims()动态数据集,实现随选择同步更新 - 优化柱状图的坐标轴标签,提升可读性
完整可运行代码
--- title: "月度索赔统计" output: flexdashboard::flex_dashboard: orientation: columns vertical_layout: fill graphics: yes runtime: shiny --- ```{r setup, include=FALSE} library(flexdashboard) library(ggplot2) library(plotly) library(DT) library(htmltools) library(readr) library(shiny) library(knitr) monthly_claims <- data.frame(OrgName = c("Alpha","Alpha","Alpha","Alpha","Alpha","Alpha","Alpha","Alpha", "Beta","Beta","Beta","Beta","Beta","Beta","Beta","Beta","Beta", "Delta","Delta","Delta","Delta","Delta","Delta","Delta","Delta"), Claimed_By_Project = c("Alpha 1","Alpha 1","Alpha 2","Alpha 2","Alpha 2","Alpha 3","Alpha 3","Alpha 3", "Beta 1","Beta 1","Beta 1","Beta 1","Beta 2","Beta 2","Beta 2","Beta 2","Beta 2", "Delta 1","Delta 1","Delta 1","Delta 1","Delta 2","Delta 2","Delta 2","Delta 2"), Month_Claimed = c(1,1,1,2,2,2,3,3,3, 1,2,2,2,2,3,3,3,3, 1,1,1,1,2,2,3 ))
# 下拉选项去重 selectInput("input_type","选择组织: ", c("All", unique(monthly_claims$OrgName))) selectInput("input_type2", "选择项目: ", c("All", unique(monthly_claims$Claimed_By_Project))) claims <- reactive({ mc <- monthly_claims if(input$input_type !="All") mc <- subset(mc, OrgName == input$input_type) if(input$input_type2 !="All") mc <- subset(mc, Claimed_By_Project == input$input_type2) mc })
数据看板
月度索赔数量柱状图
renderPlot({ # 调用动态筛选后的数据集统计月度数量 data <- as.data.frame(table(claims()$Month_Claimed)) colnames(data) <- c("月份", "索赔数量") ggplot(data, aes(月份, 索赔数量)) + geom_bar(stat = "identity", fill = "#2c7fb8") + labs(x = "月份", y = "索赔总数量") + theme_minimal() })
内容的提问来源于stack exchange,提问作者RL_Pug
相关产品推荐
相关产品推荐

