R Shiny中plot_geo分级统计图z参数绑定UI输入不生效问题
问题翻译
我正在做一个R语言项目,使用plotly库的plot_geo()函数制作分级统计地图。如果直接给z参数传入固定变量,不管是在app.R文件运行还是控制台测试都能生成符合预期的统计图;但当我尝试把z参数设置为UI侧的用户输入值时,地图无法按照选中的变量填充颜色。
问题原因
你的代码存在两个错误导致功能失效:
z = ~input$agg_data的传参逻辑错误:input$agg_data返回的是选中列的名称字符串,~运算符不会自动把字符串解析为数据框的对应列,相当于你给z参数传入了一个固定的字符串值,而非你想要的列数据。selectInput的默认选中值拼写错误:你聚合生成的列名是median_itinerary_fare,但默认选中值写的是不存在的median_itin_fare,初始加载时也会报错。
修复方案
你只需要修改server部分的代码即可,修改后逻辑如下:
server <- function(input, output, session) { output$state_map <- renderPlotly({ # 用[[直接提取数据框中对应列的数值向量 selected_col <- data2[[input$agg_data]] state_plot <- plot_geo(data = data2) %>% add_trace(locations = ~ORIGIN_STATE_ABR, z = selected_col, locationmode = 'USA-states', colors = 'Blues') %>% layout(geo = g, # 动态生成标题,匹配当前选中的变量 title = paste(input$agg_data, " Across All States")) }) }
如果想要保留公式写法,也可以把z参数替换为z = ~get(input$agg_data),效果完全一致。
另外建议同步修正selectInput的默认值,避免初始加载报错:
selectInput( inputId = "agg_data", label = "Select an Aggregated Variable: ", choices = colnames(data2)[2:7], selected = "median_itinerary_fare" # 修正为实际存在的列名 )
内容的提问来源于stack exchange,提问作者Dan Luettgen
相关产品推荐
相关产品推荐

