在Shiny的隐藏容器元素内渲染图

时间:2019-09-30 21:04:31

标签: r shiny

一个非常简单的问题...当尝试将绘图渲染为不可见的Error: unable to start png() device时,我收到一个错误div(请参见下面的示例)。

我一直在尝试通过创建一个闪亮的模块来解决该问题,但是我不确定该解决这个问题。

我还没有尝试过shinyjs(如果可以的话很酷,但是如果可能的话,宁愿避免依赖包)。

作为旁注,我想避免在屏幕外/低z顺序下渲染到可见元素中,以更好地了解光泽如何处理隐藏元素。请注意,实际绘图基于隐藏容器div时可能会变化的反应性内容,并且生成的绘图将需要是交互式的(画笔/悬停/等)。

更新:我已安装Cairo软件包作为尝试的解决方案,现在收到错误Error: Failed to create Cairo backend(还尝试直接调用png()和{ Cairo()内的{1}},没有任何不同的效果。

RepEx:

obeserve({})

预期输出:

鼠标悬停在网页上会显示两个图。

环境

require(tidyverse) require(shiny) a_plot <- tibble(x=1:10,y=rnorm(10)) %>% ggplot(aes(x=x,y=y)) + geom_point() server <- function(input, session, output) { output$p1 <- renderPlot({a_plot}) output$p2 <- renderPlot({a_plot}) outputOptions(output,’p2’, suspendWhenHidden=FALSE) } ui <- fluidPage( fluidRow(plotOutput(‘p1’)), fluidRow(div(id=‘plot_container’, style=‘display: none’, plotOutput(‘p2’))), withTags(head(script(HTML(‘window.onmouseover = function(event) {document.getElementById(“plot_container”).style.display = “block” }’)))) ) shinyApp(ui=ui, server=server) on R 3.6.0

1 个答案:

答案 0 :(得分:0)

renderPlot()的'height'和'width'参数指定显式值将解决错误。参见Shiny github issue #1409