Richten Sie checkBoxGroupInput vertikal und horizontal aus
In einem ähnlichen Beitrag ( So richten Sie eine Gruppe von checkboxGroupInput in R Shiny aus ) werden Kontrollkästchen nur vertikal (wie in meinem Beispiel) oder nur horizontal ( R Shiny zeigt checkboxGroupInput horizontal aus ) ausgerichtet. Ich frage mich, ob es einen Weg gibt, dies in beiden Sinnen zu erreichen (in Spalten).
library(shiny)
examplesubset<-read.table(text="
elements locations
element_One A,M,P,R
element_Two A,B,C,M,P,E,I
element_Three G,M,T,F,O,H,A,B,C,D" , header=TRUE, stringsAsFactors=FALSE)
examplesubset$elements<-as.factor(examplesubset$elements)
ui<-fluidPage(
tags$head(tags$style(HTML("
.multicol {
-webkit-column-count: 3; /* Chrome, Safari, Opera */
-moz-column-count: 3; /* Firefox */
column-count: 3;
-moz-column-fill: auto;
-column-fill: auto;
}
"))),
titlePanel("Panel"),
sidebarLayout(
sidebarPanel(
selectInput("elements", "Select elements:",
choices=examplesubset$elements)
) ,
mainPanel(
fluidRow(
column(3,
uiOutput("checkboxesui")
))))
)
server<-function(input, output,session) {
elementsselected<-reactive({
sp<-examplesubset[examplesubset$elements==input$elements,]
sp<-droplevels(sp)
})
locationsreactive<- reactive({
j<-as.factor(unique(unlist(strsplit(elementsselected()$locations, ",", fixed = TRUE) ) ) )
j<-droplevels(j)
})
output$checkboxesui<-renderUI({
tags$div(align = 'left',
class = 'multicol',
checkboxGroupInput("locationscheckboxes", "locations",
choices=levels(locationsreactive())
, selected=c() )
)
})
}
shinyApp(ui = ui, server = server)
Der folgende Code sollte den Trick machen. Sie mussten die CSS-Spalten ein Div unterhalb der Stelle anwenden, an der Sie sie hatten, und dann die Auffüllung über und unter den Kontrollkästchen entfernen. Außerdem habe ich die Spaltenfüllung in ausgeglichen geändert:
library(shiny)
examplesubset<-read.table(text="
elements locations
element_One A,M,P,A,R,T
element_Two A,B,C,M,P,E,I,N,S
element_Three G,M,T,F,S,V,P" , header=TRUE, stringsAsFactors=FALSE)
examplesubset$elements<-as.factor(examplesubset$elements)
ui<-fluidPage(
tags$head(tags$style(HTML("
.multicol .shiny-options-group{
-webkit-column-count: 3; /* Chrome, Safari, Opera */
-moz-column-count: 3; /* Firefox */
column-count: 3;
-moz-column-fill: balanced;
-column-fill: balanced;
}
.checkbox{
margin-top: 0px !important;
-webkit-margin-after: 0px !important;
}
"))),
titlePanel("Panel"),
sidebarLayout(
sidebarPanel(
selectInput("elements", "Select elements:",
choices=examplesubset$elements)
) ,
mainPanel(
fluidRow(
column(3,
uiOutput("checkboxesui")
))))
)
server<-function(input, output,session) {
elementsselected<-reactive({
sp<-examplesubset[examplesubset$elements==input$elements,]
sp<-droplevels(sp)
})
locationsreactive<- reactive({
j<-as.factor(unique(unlist(strsplit(elementsselected()$locations, ",", fixed = TRUE) ) ) )
j<-droplevels(j)
})
output$checkboxesui<-renderUI({
tags$div(align = 'left',
class = 'multicol',
checkboxGroupInput("locationscheckboxes", "locations",
choices=levels(locationsreactive())
, selected=c() )
)
})
}
shinyApp(ui = ui, server = server)
Die andere Option ist die Verwendung der CSS-Flexbox: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Dies würde die von Ihnen beschriebenen Bestellprobleme lösen, aber Sie müssten sich mit den Größen der glänzenden Optionsgruppe div beschäftigen, damit je nach Inhalt alles so passt, wie Sie es möchten. Es ist wahrscheinlich einfacher, die Kontrollkästchenoptionen neu zu ordnen, damit sie so angezeigt werden, wie Sie es möchten.