выбор нескольких вариантов из selectizeInput и построение нескольких линий для каждого выбора в r - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над простым линейным графиком в r.на данный момент я могу использовать два selectizeInputs в части пользовательского интерфейса, чтобы выбрать сезон и команду, каждый selectizeInput имеет идентификатор, который используется в серверной части в операторе select, в любом случае я хочу настроить код, чтобы я мог выбирать несколько сезонови несколько команд, и когда это произойдет, я хочу построить несколько линий на графике для каждой команды и сезона.У меня вопрос, что я должен изменить в части пользовательского интерфейса и что я должен изменить в серверной части?Большое спасибо за любую помощь!

это часть пользовательского интерфейса

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)

1 Ответ

0 голосов
/ 07 июня 2018

пока вы не поддержали нас своими данными, я сделал аналогичный пример с другим набором данных из 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)

, пожалуйста, не делайте так, чтобы я разделил ваш код на один реактивный и оператор рендеринга.Это лучший дизайн для блеска, тогда все помещается в поле наблюдателя

Надеюсь, это поможет !!

...