gpt4 book ai didi

r - 对于多个图形,保持图形大小为全尺寸

转载 作者:行者123 更新时间:2023-12-05 05:33:34 26 4
gpt4 key购买 nike

以下代码允许使用 patchwork 库拥有多个用户定义的图形。但是,随着图形数量的增加,尺寸会变小。有什么方法可以使每个图形的大小保持在预定义的高度和宽度,或者将总高度保持在 100%?

library(dplyr)
library(ggplot2)
library(shiny)
library(patchwork)

plt_func <- function(x,y){
plt_list <- list()
for (X_var in x){
plt_list[[X_var]] <- mtcars %>% ggplot(aes_string(X_var, y))+
geom_point() +
labs(x = X_var, y = y)
}

if (length(plt_list) == 1) {
return(plt_list[[1]])
} else {
patchwork::wrap_plots(plt_list, ncol = min(length(plt_list), 2)) %>% print(.)
}
}


ui <- fluidPage(
sidebarLayout(
sidebarPanel(
selectInput(inputId = "dataset",
label = "Choose a dataset:",
choices = c("mtcars")),
selectizeInput(inputId = "x",label = "X", choices = names(mtcars), multiple = T),
selectInput(inputId = "y",label = "Y", choices = names(mtcars),multiple = F),
selectInput(inputId = "t",label = "Treatment", choices = names(mtcars),multiple = F),
actionButton("plot", label = "Plot")),
mainPanel(
plotOutput("plots")

)
)
)

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

observeEvent(input$plot, {
req(input$x, input$y)
x <- input$x
y <- input$y

output$plots <- renderPlot({

plt_func(x,y)


})


})


}

shinyApp(ui, server)

有两个数字时的数字大小:

enter image description here

6个数字时的数字大小:

enter image description here

最佳答案

默认高度为 400px。您可以使用 renderPlotheight 参数更改它:

  observeEvent(input$plot, {
req(input$x, input$y)
x <- input$x
y <- input$y
nplots <- (length(x) + 1L) %/% 2L

output$plots <- renderPlot({
plt_func(x,y)
}, height = nplots * 400)

})

但是不建议在观察者内部定义输出槽。最好这样做:

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

output[["plots"]] <- renderPlot({
req(input$x, input$y)
x <- input$x
y <- input$y
plt_func(x,y)
}, height = exprToFunction(400 * ((length(input[["x"]]) + 1L) %/% 2L)) %>%
bindEvent(input[["plot"]])

}

我们需要 exprToFunction 因为 input[["x"]] 是一个 react 变量。

关于r - 对于多个图形,保持图形大小为全尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73799341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com