首页 > 解决方案 > 从 selectizeInput 中选择多个选项并为 r 中的每个选项绘制多条线

问题描述

我正在研究 r 中的简单折线图。现在我可以在 UI 部分使用两个 selectizeInputs 来选择一个赛季和一个团队,每个 selectizeInput 都有一个在 select 语句中用于服务器部分的 ID,无论如何我想调整代码以便我可以选择多个赛季和多个团队,当发生这种情况时,我想在图表上为每个团队和每个赛季绘制多条线。我的问题是我应该在 UI 部分更改什么以及我应该在服务器部分更改什么?非常感谢您的帮助!

这是 UI 部分

libraries("plotly","ggplot2","plotrix")

ui <- fluidPage(
fluidRow(
column ( width = 3,

         h4(span(tagList(icon("filter")), "Select season")),
         selectizeInput('season', "", choices = shots$SeasonNr, selected = TRUE, multiple = TRUE),
         br(),


         h4(span(tagList(icon("filter")), "Select team")),
         selectizeInput('team', "", choices = shots$TeamName, selected = TRUE, multiple = TRUE),
         br()
)),


 plotlyOutput("pos1")

)

这是我的服务器部分

server <- function(input,output, session){
  observeEvent(c(input$team), {

team1 <- input$team
Season1 <- input$season

tp <- sqldf(sprintf("select TeamName,  Training_ID, SeasonNr, Position, ShotAverage from shots where TeamName is '%s'", team1,"AND SeasonNr is '%s'", Season1))
dfNew<- aggregate(ShotAverage ~ tp$TeamName  +tp$Position, data=tp, FUN=mean)
#creates empty dataframe
dfF <- data.frame()
#bind
dfF <- rbind(dfF, dfNew)
colnames(dfF) <- c("Team Name", "Position", "Average")
 # render the plot
 output$pos1 <-renderPlotly({ 
   plot_ly(x = ~dfF$Position, y = ~dfF$Average, type = 'scatter', mode = 'bar')%>%
     layout(title = 'Seasonal team statistics', xaxis = list(title = "Position"),yaxis = list(title = "Average")) 
 })
 })}
shinyApp(ui, server)

标签: rplotshinyplotly

解决方案


直到你用你的数据支持我们,我用另一个数据集做了一个类似的例子ggplot2

library("plotly","ggplot2","plotrix")

ui <- fluidPage(
  fluidRow(
    column ( width = 3,

             h4(span(tagList(icon("filter")), "Select season")),
             selectizeInput('season', "", choices = txhousing$year %>% unique(),selected = TRUE,  multiple = TRUE),
             br(),


             h4(span(tagList(icon("filter")), "Select city")),
             selectizeInput('city', "", choices = txhousing$city %>% unique(), selected = TRUE, multiple = TRUE),
             br()
    )),


  plotlyOutput("pos1")

)
server <- function(input,output, session){
  dta <- reactive({

    req(input$city,input$season)

    txhousing %>% 
      select(city,year,month,median) %>% 
      filter(city %in% input$city, year %in% input$season) %>% 
      group_by(city,month) %>% 
      summarise(median = mean(median))
  })
  output$pos1 <-renderPlotly({ 
    plot_ly(data = dta(),x = ~month, y = ~median,type = "area",color = ~city) %>%
      layout(title = 'Seasonal team statistics', xaxis = list(title = "Month"),yaxis = list(title = "Average")) 
  })
}
shinyApp(ui, server)

请不要说我已将您的代码分成一个反应式和一个渲染语句。这是一个更好的闪亮设计,然后将所有内容放在观察者声明中

希望这可以帮助!!


推荐阅读