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

如何在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

                             ))

Inputs {.sidebar data-width=300}
# 下拉选项去重
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
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:48:03