Filter Plotly Bar Chart с выбором выпадающего списка - PullRequest
0 голосов
/ 22 октября 2019

У меня есть статическая гистограмма в Plotly, однако данные, которые я извлекаю, намного больше, чем я предполагал, и на графике слишком много, чтобы показать что-либо значимое. В пользовательском интерфейсе у меня есть выпадающий список с выбором штатов США, и я хотел бы иметь возможность фильтровать гистограмму на основе выбора выпадающего списка пользователей. Есть ли простой способ фильтрации DF?

 output$County_Chart <- renderPlotly({

    validate(
      need(County_data(),""))

    ct_Plot_Data <- County_data()

    Bar <- plot_ly(ct_Plot_Data, x = ct_Plot_Data$Value, y = ct_Plot_Data[,c("COUNTY")], type = 'bar',
                   name = 'Value', marker = list(color = 'rgb((49,130,189)', orientation = 'h')) %>% 
      layout(
        yaxis = list(title = "",
                     categoryorder = "array",
                     categoryarray = ~COUNTY)
      ) %>%
      add_trace(x = ct_Plot_Data$Population, name = 'Population', marker = list(color = 'rgb(204, 204, 204)'))

    Bar

  })

Заранее спасибо

1 Ответ

1 голос
/ 23 октября 2019

Поскольку вы не предоставили пример данных, проверьте следующий пример:

library(shiny)
library(plotly)
library(datasets)

DF <- as.data.frame(state.x77)

ui <- fluidPage(
  selectizeInput("vars", "Select variables", names(DF), multiple = TRUE, options = list('plugins' = list('remove_button'))),
  selectizeInput("states", "Select states", rownames(DF), multiple = TRUE, options = list('plugins' = list('remove_button'))),
  plotlyOutput("Bar")
)

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

  filteredDF <- reactive({
    req(input$states, input$vars)
    cbind(stack(DF[input$states, ], select = input$vars), states = rownames(DF[input$states,]))
  })

  output$Bar <- renderPlotly({
    req(filteredDF())
    p <- plot_ly(filteredDF(), x=~ind, y= ~values, type = "bar", color = ~states)
    p
  })

}

shinyApp(ui, server)
...