R Shiny:如何在NULL时不显示绘图

时间:2015-12-23 03:23:02

标签: r shiny rstudio

如果在R studio中运行此代码,您会发现NULL数据的图仍然是一个巨大的白色块。

当数据为NULL时,我们怎么能不显示它。

在其他图表中,大白板看起来不那么好。

library(shiny)

server <- function(input, output) {
  output$x = renderPlot(NULL)
}

ui <- fluidPage(
  br(),
  plotOutput("x"),
  tags$head(tags$style(HTML("
                            body {
                            margin: 0;
                            font-family: helvetica, sans-serif;
                            background: #F2F0F0;
                            }

                            .shiny-plot-output{
                            max-width: 100%;
                            box-shadow: 0px 0px 6px #888;
                            margin-left: auto;
                            margin-right: auto;
                            }
                            ")))  
  )

shinyApp(ui = ui, server = server)

2 个答案:

答案 0 :(得分:4)

我找到了另一种解决方案(因为上面的解决方案对我不起作用)。它使用shinyjs包。这是一个可重复性最小的例子。

library(shinyjs)
library(shinythemes)


shinyApp(
  ui = fluidPage(theme = shinytheme("darkly"),
    useShinyjs(), # IMPORTANT, you have to call this function in your UI to use shinyjs
    numericInput("num","Number", 5),
    plotOutput("text1")
  ),
  server = function(input, output) {
    output$text1 <- renderPlot({
      if (input$num < 5) {
        hide("text1")
      } else {
        show("text1")
      }
      plot(rnorm(input$num))
    })
  }
)

仅在x> 0时显示图表。 5.否则,情节(以及在闪亮主题中使用darkly主题突出显示的空白 - 不存在)

答案 1 :(得分:2)

你可以在server.R中执行类似的操作:

  if(is.null(df)){}
  else{
  output$x = renderPlot(df)
  }

这将检查您发送到renderPlot的数据是否为NULL,如果数据存在则仅执行renderPlot。这可能会使画布不显示为白色,而是灰色背景。唯一的问题是,当你出现阴影效果时,它也会出现在灰色上。