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显示数值的交互效果,可做如下调整:
- UI中将
plotOutput("plot")替换为plotlyOutput("plot") - 服务端绘图代码调整为:
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
相关产品推荐
相关产品推荐

