Shinylive App在Quarto中渲染尺寸异常(内容截断)求助
问题:Shinylive在Quarto中渲染Shiny应用时内容截断
我开发的Shiny应用本身运行正常,通过Shinylive在Quarto中也能渲染,但渲染后应用内容出现截断(见下图)。我尝试过调整body-width和viewer-height参数,但都没解决问题。
应用代码
Quarto YAML配置
--- title: "demo" format: html: grid: body-width: 1400px filters: - shinylive --- --- title: "Our first r-shinylive Quarto document!" filters: - shinylive ---
Shiny应用代码
```{shinylive-r} #| standalone: true #| viewer-height: 600 library(shiny) library(ggplot2) library(dplyr) library(bslib) theme <- bs_theme(font_scale=1.5) ui <- fluidPage( titlePanel("ShinyLive: Visualizing X ~ N(μ_x, 1) and Custom Y Transformations"), sidebarLayout( sidebarPanel( textInput("y_formula", "Enter Y formula (use 'X'):", "2 + 2*X"), helpText("Use 'X' to define the function, e.g., '2 + 2*X' or '2 + 4*X'."), textInput("mu_x_values", "Enter up to 3 values for μ_x (comma-separated):", "0,2"), numericInput("n", "Number of Samples:", value = 1000, min = 100, max = 5000, step = 100) ), mainPanel( plotOutput("distPlotX"), plotOutput("distPlotY"), verbatimTextOutput("error_message") ) ) ) server <- function(input, output) { data <- reactive({ mu_x_values <- unlist(strsplit(input$mu_x_values, ",")) mu_x_values <- suppressWarnings(as.numeric(mu_x_values)) mu_x_values <- mu_x_values[!is.na(mu_x_values) & mu_x_values != ""] if (length(mu_x_values) == 0 || length(mu_x_values) > 3) { output$error_message <- renderText("Please enter 1 to 3 valid numeric values for μ_x, separated by commas.") return(NULL) } df_list <- lapply(mu_x_values, function(mu) { x <- rnorm(input$n, mean = mu, sd = 1) y <- tryCatch( eval(parse(text = gsub("X", "x", input$y_formula))), error = function(e) { output$error_message <- renderText("Invalid Y formula. Please check your input.") return(rep(NA, length(x))) } ) data.frame(X = x, Y = y, mu_x = paste("μ_x =", mu)) }) bind_rows(df_list) }) output$distPlotX <- renderPlot({ req(data()) # Compute density peak and mean for X density_data <- data() %>% group_by(mu_x) %>% summarize(density_peak = max(density(X)$y), mean_X = mean(X)) ggplot(data(), aes(x = X)) + geom_histogram(aes(y = ..density..), bins = 30, alpha = 0.5, fill = "blue", color = "black") + geom_density(linewidth = 1, color = "red") + geom_segment(data = density_data, aes(x = mean_X, xend = mean_X, y = 0, yend = density_peak), color = "black", linetype = "dashed", linewidth = 1) + # Clipped vertical mean line facet_wrap(~mu_x) + labs(title = "Distribution of X ~ N(μ_x, 1)", x = "X", y = "Density") + theme_minimal() }) output$distPlotY <- renderPlot({ req(data()) # Compute density peak and mean for Y density_data <- data() %>% group_by(mu_x) %>% summarize(density_peak = max(density(Y, na.rm = TRUE)$y), mean_Y = mean(Y, na.rm = TRUE)) ggplot(data(), aes(x = Y)) + geom_histogram(aes(y = ..density..), bins = 30, alpha = 0.5, fill = "green", color = "black") + geom_density(linewidth = 1, color = "darkgreen") + geom_segment(data = density_data, aes(x = mean_Y, xend = mean_Y, y = 0, yend = density_peak), color = "black", linetype = "dashed", linewidth = 1) + # Clipped vertical mean line facet_wrap(~mu_x) + labs(title = expression(paste("Distribution of Y = f(X) for each ", mu[x])), x = "Y", y = "Density") + theme_minimal() }) } shinyApp(ui, server)
渲染截断效果

解决方法
修复重复YAML配置:代码中存在两个独立的YAML头部,这会导致Quarto解析异常,保留一个完整配置即可:
--- title: "Our first r-shinylive Quarto document!" format: html: grid: body-width: 1400px overflow: scroll page-layout: full filters: - shinylive ---调整Shinylive视图参数:增大
viewer-height并开启滚动,确保超出内容可查看:```{shinylive-r} #| standalone: true #| viewer-height: 1000 #| viewer-overflow: scroll固定图表高度:给
plotOutput设置明确高度,避免图表自动撑爆容器:mainPanel( plotOutput("distPlotX", height = "400px"), plotOutput("distPlotY", height = "400px"), verbatimTextOutput("error_message") )
优先尝试移除重复YAML和设置viewer-overflow: scroll,这两个是解决此类截断问题的核心方案。
内容的提问来源于stack exchange,提问作者Richard Hayes
相关产品推荐
相关产品推荐

