gpt4 book ai didi

r - Shiny 中的动态绘图高度

转载 作者:行者123 更新时间:2023-12-04 00:49:41 26 4
gpt4 key购买 nike

我有一个 Shiny 的应用程序,其中的情节需要根据用户输入调整高度。基本上,情节可以有一个、两个或四个子情节。当有一个或两个时,一切都很好,但是如果有四个,子图会被压扁到太小的尺寸。我尝试使用 react 函数为我提供服务器的计算高度,但出现此错误:

Error in .getReactiveEnvironment()$currentContext() : 
Operation not allowed without an active reactive context. (You tried to do something that can only be done from inside a reactive expression or observer.)

我正在尝试做的一个非常简化的版本在这里:
library(shiny)

ui <- fluidPage(

fluidRow(
column(2,
radioButtons( inputId = 'plotcount', label = 'Plot Count',
choices = c('1' = 1,
'2' = 2,
'4' = 4
),
selected = '1'
)
),
column(10,
plotOutput( outputId = 'plots' )
)
)
)

server <- function(input, output) {

PlotHeight = reactive(
return( 500+250*(floor(input$plotcount/4)))
)

output$plots = renderPlot(height = PlotHeight(), {

if( as.numeric(input$plotcount) == 0 ){
plot.new()
return()
}
print(c( floor(sqrt(as.numeric(input$plotcount))),
ceiling(sqrt(as.numeric(input$plotcount)))
))
opar = par( mfrow = c( floor(sqrt(as.numeric(input$plotcount))),
ceiling(sqrt(as.numeric(input$plotcount)))
)
)
for( i in 1:as.numeric(input$plotcount) ){
plot(1:100, 1:100, pch=19)
}
par(opar)
})
}

shinyApp(ui =ui, server = server)

最佳答案

使用 renderUI :

library(shiny)

ui <- fluidPage(
fluidRow(
column(
width = 2
, radioButtons(
inputId = 'plotcount'
, label = 'Plot Count'
, choices = as.character(1:4)
)
),
column(
width = 10
, uiOutput("plot.ui")
)
)
)

server <- function(input, output) {

plotCount <- reactive({
req(input$plotcount)
as.numeric(input$plotcount)
})

plotHeight <- reactive(350 * plotCount())

output$plots <- renderPlot({

req(plotCount())

if (plotCount() == 0){
plot.new()
return()
}

opar <- par(mfrow = c(plotCount(), 1L))

for (i in 1:plotCount()) {
plot(1:100, 1:100, pch = 19)
}

par(opar)
})

output$plot.ui <- renderUI({
plotOutput("plots", height = plotHeight())
})

}

shinyApp(ui = ui, server = server)

关于r - Shiny 中的动态绘图高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31882463/

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