Как интерактивно строить графики параллельно из пользовательского интерфейса, выбирая состояния из checkboxGroup?

#r #shiny

#r #блестящий

Вопрос:

Данные состоят из состояний США, их типов построения (символьных), потерь переменных и стоимости потерь для 2 моделей (т. е. 4 факторов) и их соответствующих значений (float). Тип построения будет указан по оси X, стоимость потерь будет отображаться в виде гистограммы, а потери будут отображаться в виде линейного графика. checkboxgroup должна принимать входные данные от пользователя и отображать четыре графика рядом в порядке, в котором они выбраны.

Я попытался построить график, но не могу отобразить его правильным образом.

Пожалуйста, помогите

Код отображает список графиков, принимающих входные данные от пользователя. Например: график 1, График2, график 3, График4 и график 5. Если я выберу опцию 1,2,4,5, это оставит пустое место для графика 3 и построит графики в столбик

 ui <- fluidPage(

  headerPanel("Construction"),
  sidebarPanel(

    dropdownButton(label= "City", status = "default",width=400,tooltip = TRUE,circle = FALSE,

                   checkboxGroupInput("check","Check" ,choices = unique(raw$City), selected = NULL)),
    actionButton("plot","Display")

  ),

  mainPanel(

    lapply(1:length(unique(raw$City)), function(i)  {  
       plotOutput(paste0('plot',i))

    }
    )
  )
)



server <- function(input, output) {

  takinput <- reactive({

    a<- subset(raw, City %in% input$check)
    return(a)
  })

  plotlist <- lapply(1:length(unique(raw$City)), function(i)  { 

    output[[paste0('plot',i)]] <- renderPlot({

      input$plot 
      isolate(

        if(any(choice[i] %in% input$check)){

          b<- takinput()
          #View(b)
          ggplot(data = b,aes(x= Construction.Type, y= value,fill = variable))  
            geom_bar(data = subset(b, variable %in%  c("RMS.AAL.per..Million","AIR.Loss.Cost.per..Million")
                                   amp; City == choice[i]) ,stat = 'sum' , position = "dodge", na.rm=TRUE) 

            guides(fill =  FALSE) 
            geom_line(data = subset(b, variable %in% c("RMS.Relative.AAL","AIR.Relative.Loss.Cost")
                                    amp; City == choice[i]), linetype = "dashed", 
                      aes(y = value*(1400/1.4),group =variable, colour= variable)) 

            scale_color_manual(values =c("RMS.Relative.AAL" = "#7030A0","AIR.Relative.Loss.Cost" = "#FFC000"))  
            scale_fill_manual(values = c("#FFC000","#FFC000","#7030A0",'#7030A0')) 
            scale_y_continuous(name = expression("AAL Per Million"), sec.axis =sec_axis( ~.*1.4/1400, name = "Relative AAL")) 
            theme(axis.text.x = element_text(angle= 25, vjust = 1.0,hjust = 1.0), legend.position = "none",
                  panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
                  panel.background = element_blank(), axis.line=element_line(colour = "black"))  
            labs(title= as.vector(choice[i])) 
            annotate(geom="text",x = c(4,4),y= c(1200,1140),label = c("RMS","AIR")) 
            annotate(geom="rect",xmin = c(3.3,3.3),xmax = c(3.7,3.7), ymin = c(1120,1180),ymax = c(1165,1225),
                     colour = c("#FFC000","#7030A0"), fill = c("#FFC000","#7030A0"))
        }

      )
    })
  })

}

shinyApp(ui,server)
  

Ожидаемые результаты: 4 графика в сетке 2 на 2 в порядке ввода от пользователя

Фактические результаты: Код отображает список графиков, принимающих входные данные от пользователя. Например: график 1, График2, график 3, График4 и график 5. Если я выберу опцию 1,2,4,5 , это оставит пустое место для графика 3 и построит графики в столбик.

Комментарии:

1. Может кто-нибудь, пожалуйста, разобраться в этом?

2. нужна помощь… Пожалуйста, ознакомьтесь с этим

3. Что вы хотите увидеть, если выбрано 2 графика? 3 ? 5 ?