Skip to contents

Safely render a ggplot in Shiny application

Usage

safe_ggplot(
  expr,
  data = NULL,
  show_notification = c("always", "once", "never"),
  session = shiny::getDefaultReactiveDomain()
)

Arguments

expr

Code to produce a ggplot object.

data

Argument passed to eval_tidy to evaluate expression.

show_notification

Strategy for notifications when a warning occurs:

  • "always" : default, show notifications for each warnings

  • "once : show notification once per warning

  • "never" : do not display notifications.

session

Session object to send notification to.

Value

Output of ggplot_build.

Examples

if (interactive()) {
  library(shiny)
  library(ggplot2)

  ui <- fluidPage(
    fluidRow(
      column(
        width = 3,
        selectInput(
          inputId = "var",
          label = "Var:",
          choices = c("Sepal.Width", "Do.Not.Exist")
        )
      ),
      column(
        width = 9,
        plotOutput(outputId = "plot")
      )
    )
  )

  server <- function(input, output, session) {

    output$plot <- renderPlot({
      p <- ggplot(iris) +
        geom_point(aes_string("Sepal.Length", input$var))
      safe_ggplot(p)
    })

  }

  shinyApp(ui, server)
}