plotly :: renderPlotly()不允许NULL值。我该如何解决?

时间:2017-09-07 17:28:26

标签: r shiny plotly

标题基本上说。对于复杂的Shiny App,我必须能够将NULL值发送到renderPlotly(),因为我只想在满足某些条件时才显示绘图。正常shiny::renderPlot()能够做到这一点。 一个小例子,它给出了我不想要的错误:

library(shiny)
library(plotly)

ui <- fluidPage(
  plotlyOutput("plotly"),
  plotOutput("plot")
)

server <- function(input, output) {

  # I need to be able to put NULL in here or anything so that
  # there is no output and also no error message.
  output$plotly <- renderPlotly({
    NULL
  })

  # This works and sends no error message
  output$plot <- renderPlot({
    NULL
  })

}

shinyApp(ui, server)

请注意,Web App仅显示一条错误消息,即renderPlotly()中的消息。 我正在寻找任何解决方法。如何在应用程序中同一位置显示的两个图之间切换,并根据其他输入始终忽略其中一个?

2 个答案:

答案 0 :(得分:2)

当数据为空时,您可以使用plotly_empty()函数。

假设您将情节(或NULL)分配给名为“myplotly”的变量,您可以使用以下内容:

  output$plotly <- renderPlotly({
    if(is.null(myplotly)) plotly_empty() else myplotly
  })

答案 1 :(得分:1)

使用shiny::conditionalPanel的示例。只有在满足某些条件时才会显示绘图。

library(ggplot2)
library(plotly)
library(shiny)

ui <- fluidPage(
    selectInput("shouldShow", "show plot", c("yes", "no"), "yes"),
    conditionalPanel(
        condition = "input.shouldShow == 'yes'",
        plotlyOutput("foo")
    )
)

server <- function(input, output) {
    output$foo <- renderPlotly({
        gg <- ggplot(mtcars, aes(cyl, mpg)) + geom_point()
        ggplotly(gg)
    })
}
shinyApp(ui, server)