R Shiny中动态选择dataframe列作为plotly图表y轴的优化方案问询
问题根因
你写的y = ~input$select_col不生效的原因是:~是plotly识别的公式语法,直接传入字符串形式的列名时,plotly会把它当作普通字符串常量处理,不会解析为dataframe对应的列取值。
高效实现方案
不需要重构子集dataframe、修改列名,仅修改y参数的取值即可,有两种常用写法:
方案1:简洁get()写法
适合快速开发的小型项目,仅需修改一行代码:
server <- function(input, output) { output$plot <- renderPlotly({ plot_ly(USArrests, x = ~state, y = ~get(input$select_col), type = 'bar') }) }
get()函数会根据传入的字符串列名,在当前dataframe的环境中查找对应的列数据。
方案2:规范.data代词写法
符合tidyverse生态最佳实践,避免环境查找冲突,适合复杂项目:
server <- function(input, output) { output$plot <- renderPlotly({ plot_ly(USArrests, x = ~state, y = ~.data[[input$select_col]], type = 'bar') }) }
.data是rlang提供的代词,专门用于在动态语法中指代当前操作的dataframe,通过[[即可传入字符串形式的列名提取对应数据。
内容的提问来源于stack exchange,提问作者Antjes
相关产品推荐
相关产品推荐

