我有一个像
这样的UI元素fluidRow(column(12, rbokehOutput("linePlots")) )
server.R返回
grid_plot(p1,ncol=3,byrow=TRUE, same_axes=FALSE,width=1500)
这是一个rbokeh人物。当窗口调整大小时,我想返回一个替代的grid_plot,其中ncol的值不同。这有可能在Shiny?
答案 0 :(得分:4)
是的,这是可能的,您可以在页面Javascript中创建一个Shiny绑定,并在窗口重新调整大小事件上调用R函数。结合此renderUI
,您可以将DOM事件绑定到更新UI的R函数。
require(shiny)
shinyApp(
ui = shinyUI(fluidPage(
tags$head(
tags$script(HTML('
$(window).resize(function(event){
var w = $(this).width();
var h = $(this).height();
var obj = {width: w, height: h};
Shiny.onInputChange("pltChange", obj);
});
'))
),
fluidRow( column(12, uiOutput('ui')) ),
fluidRow( column(12, textOutput('txt')) )
)),
server = shinyServer( function(input,output,session){
data <- list(x=runif(10),y=runif(10),main="no resize")
observeEvent(input$pltChange,{
output$ui <- renderUI({
plotOutput("linePlots")
})
str <- sprintf('Window height: %d, Window width %d', input$pltChange$height, input$pltChange$width)
output$txt <- renderText({
print(str)
})
data$main <- str
output$linePlots <- renderPlot({ plot(data,main=data$main) })
})
})
)
此示例创建一个plotOutput
并在窗口重新调整大小后填充它。这只是其基本原理的一个例子。由于您没有提供可重现的示例,这可能有助于您了解如何执行此操作。