如何阻止Shiny浏览器缩放时重新渲染地图绘图?
解决Shiny应用缩放屏幕时重复计算地图的问题
问题根源
默认状态下,renderPlot()会监听浏览器窗口的尺寸变化,一旦容器尺寸改变就会重新渲染绘图——这就是缩放屏幕时地图重复计算的原因,而非直接缩放已生成的内容。
可行解决方案
方法1:通过outputOptions()禁用尺寸响应
在server函数中,给目标输出设置固定尺寸规则,禁止尺寸变化触发重绘:
server <- function(input, output, session) { krig <- reactive({ filename <- paste0('mapname',input$date) read_grid(filename) }) output$map_xx <- renderPlot({ map_rmax(krig(),input$date) }) # 配置输出规则,阻止尺寸变化触发重绘 outputOptions(output, "map_xx", sizePolicy = list( width = function() 1000, # 固定宽度,与plotOutput的height匹配,按需调整 height = function() 1000, resizing = FALSE # 关闭尺寸变化响应 )) }
方法2:固定plotOutput尺寸并关闭自动调整
在UI的plotOutput中明确设置固定宽高,同时关闭自动适配:
mainPanel( plotOutput(outputId = "map_xx", height = 1000, width = "100%", autosize = FALSE), )
搭配方法1的server端配置,效果会更稳定。
额外优化:缓存绘图结果
如果map_rmax()计算成本较高,可使用bindCache()缓存结果,仅在日期选择变化时重新计算:
output$map_xx <- renderPlot({ map_rmax(krig(),input$date) }) %>% bindCache(input$date)
内容的提问来源于stack exchange,提问作者ramon vazquez
相关产品推荐
相关产品推荐

