uiOutput()@lz100 帮助我在切换到显示/隐藏侧面板时自动缩放。但是,当我实现 时esquisserUI(),当您在侧面板中的单选按钮之间来回切换时,与之关联的小部件会移位。
另一个问题 - 在 esquisse 的参考页面(https://dreamrs.github.io/esquisse/articles/shiny-usage.html)中,它们在 UI 级别呈现了绘图,但它如何通过服务器来实现呢?
library(shiny)
library(shinyjs)
library(shinyWidgets)
library(esquisse)
#Credit: @lz100 helped with auto uiOutput() scaling when sidebar is collapsed. Thank you.
#ui.r
ui <- fluidPage(
useShinyjs(),
# a switch for toggles
dropdownButton(
tags$h3("Toggle"),
materialSwitch(inputId = "toggleSidebar",label = "Hide Table? ",
value = TRUE, status = "success"),
circle = TRUE, status = "info",
icon = icon("gear"), width = "300px",
tooltip = tooltipOptions(title = "Choose for more options!")
),
# Sidebar layout with input and output definitions
sidebarLayout(
div( id ="Sidebar",
# Sidebar panel for inputs
sidebarPanel(
uiOutput("rad")
)),
# Main panel for displaying outputs
mainPanel(
id = "main_panel",
uiOutput("tabers")
)
)
)
#server.r
server <- function(input, output) {
data_sets <- list(df1 = data.frame(),
df2= iris,
df3 = mtcars,
df4= ToothGrowth)
# an oberserevent for toggle given by @lz100
observeEvent(input$toggleSidebar, {
shinyjs::toggle(id = "Sidebar", condition = input$toggleSidebar)
if(!isTRUE(input$toggleSidebar)) {
shinyjs::runjs("$('#main_panel').removeClass('col-sm-8').addClass('col-sm-12')")
} else {
shinyjs::runjs("$('#main_panel').removeClass('col-sm-12').addClass('col-sm-8')")
}
})
output$rad<-renderUI({
radioButtons("radio", label = "",
choices = list("Navigation" = 1, "Iris" = 2, "Mtcars" = 3),
selected = character(0))
})
observeEvent(input$tabs, {
callModule(module = esquisserServer,id = "esquisse",
data_table = reactive(data_sets[[as.integer(input$radio)]]),
data_name = reactive(names(data_sets[paste0("df",input$radio)])))
})
output$tabers<- renderUI({
if(is.null(input$radio)) {
tabsetPanel(
id="tabC",
type = "tabs",
tabPanel("Welcome!")
)
}
else if(input$radio==1){
tabsetPanel(
id="tabA",
type = "tabs",
tabPanel("Navigation...")
)
}
else if(input$radio==2){
tabsetPanel(
id="tabA",
type = "tabs",
tabPanel("Data", DT::renderDataTable({ data_sets[[as.integer(input$radio)]]}, filter = 'top',
options = list(scrollX = TRUE, lengthChange = TRUE, widthChange= TRUE))),
tabPanel("Summary",renderPrint({ summary(data_sets[[as.integer(input$radio)]]) }) ),
tabPanel(
title = "Plot",
esquisserUI(
id = "esquisse",
header = FALSE,
choose_data = FALSE
)
)
)
}
else if(input$radio==3){
tabsetPanel(
id="tabA",
type = "tabs",
tabPanel("Data", DT::renderDataTable({ data_sets[[as.integer(input$radio)]]}, filter = 'top',
options = list(scrollX = TRUE, lengthChange = TRUE, widthChange= TRUE))),
tabPanel(
title = "Plot",
esquisserUI(
id = "esquisse",
header = FALSE,
choose_data = FALSE
)
)
)
}
})
}
shinyApp(ui, server)
如果我能在这两件事上得到一些帮助,我将不胜感激。


