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

Shiny应用通过输入州名筛选绘制all_pass数值柱状图问题

代码问题修复

以下是你代码中存在的问题和修复后的完整可运行版本:

错误点梳理

  • UI组件嵌套错误:plotOutput("plot")被错误写入selectizeInput的参数列表中,未作为独立组件注册,导致绘图区域无法渲染
  • 响应式对象调用错误:你定义的响应式数据对象名称为data,但绘图代码中错误调用了不存在的df()对象
  • 输入校验函数误用:require()是R用于加载扩展包的函数,Shiny中判断输入是否存在的专用函数为req()

修复后完整代码

library(ggplot2)
library(plotly)
library(dplyr)
library(shiny)

# 运行前请确保你的数据集df7已提前加载到全局环境,包含all_pass、st_name两列
ui <- basicPage(
  h1("第110届国会各州议会提交通过法案总数"),
  selectizeInput(inputId = "bins",
                 label = "选择州",
                 choices = c("AK","AL","AR","AS","AZ","CA","CO","CT","DC","DE","FL","GA","GU","HI","IA","ID","IL","IN","KS","KY","LA","MA","MD","ME","MI","MN","MO","MS","MT","NC","NE","ND","NH","NJ","NM","NV","NY","OH","OK","OR","PA","PR","RI","SC","SD","TN","TX","UT","VA"),
                 multiple = TRUE),
  plotOutput("plot")
)

server <- function(input, output) {
  filter_data <- reactive({
    req(input$bins)
    df7 %>% filter(st_name %in% input$bins)
  })
  output$plot <- renderPlot({
    ggplot(filter_data(), aes(y= all_pass, x=st_name)) +
      geom_bar(stat = "sum") +
      labs(x = "州名", y = "通过法案总数")
  })
}

shinyApp(ui = ui, server = server)

可选优化(交互图表)

如果你需要hover显示数值的交互效果,可做如下调整:

  1. UI中将plotOutput("plot")替换为plotlyOutput("plot")
  2. 服务端绘图代码调整为:
output$plot <- renderPlotly({
  p <- ggplot(filter_data(), aes(y= all_pass, x=st_name)) +
    geom_bar(stat = "sum") +
    labs(x = "州名", y = "通过法案总数")
  ggplotly(p)
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:48:01