Launch esquisse in a classic Shiny app.

  data = NULL,
  dataModule = c("GlobalEnv", "ImportFile"),
  sizeDataModule = "m"

  header = TRUE,
  container = esquisseContainer(),
  choose_data = TRUE,
  insert_code = FALSE,
  disable_filters = FALSE

esquisseContainer(width = "100%", height = "700px", fixed = FALSE)


input, output, session

Standards shiny server arguments.


A reactiveValues with at least a slot data containing a data.frame to use in the module. And a slot name corresponding to the name of the data.frame.


Data module to use, choose between "GlobalEnv" or "ImportFile".


Size for the modal window for selecting data.


Module's id.


Logical. Display or not esquisse header.


Container in which display the addin, default is to use esquisseContainer, see examples. Use NULL for no container (behavior in versions <= 0.2.1). Must be a function.


Logical. Display or not the button to choose data.


Logical, Display or not a button to insert the ggplot code in the current user script (work only in RStudio).


Logical. Disable the menu allowing to filter data used.

width, height

The width and height of the container, e.g. '400px', or '100%'; see validateCssUnit.


Use a fixed container, e.g. to use use esquisse full page. If TRUE, width and height are ignored. Default to FALSE. It's possible to use a vector of CSS unit of length 4 to specify the margins (top, right, bottom, left).


A reactiveValues with 3 slots :

  • code_plot : code to generate plot.

  • code_filters : a list of length two with code to reproduce filters.

  • data : data.frame used in plot (with filters applied).


For the module to display correctly, it is necessary to place it in a container with a fixed height. Since version >= 0.2.2, the container is added by default.


if (interactive()) { ### Part of a Shiny app ### library(shiny) library(esquisse) ui <- fluidPage( tags$h1("Use esquisse as a Shiny module"), radioButtons( inputId = "data", label = "Data to use:", choices = c("iris", "mtcars"), inline = TRUE ), esquisserUI( id = "esquisse", header = FALSE, # dont display gadget title choose_data = FALSE, # dont display button to change data, container = esquisseContainer(height = "700px") ) ) server <- function(input, output, session) { data_r <- reactiveValues(data = iris, name = "iris") observeEvent(input$data, { if (input$data == "iris") { data_r$data <- iris data_r$name <- "iris" } else { data_r$data <- mtcars data_r$name <- "mtcars" } }) callModule(module = esquisserServer, id = "esquisse", data = data_r) } shinyApp(ui, server) ### Whole Shiny app ### library(shiny) library(esquisse) # Load some datasets in app environment my_data <- data.frame( var1 = rnorm(100), var2 = sample(letters[1:5], 100, TRUE) ) ui <- fluidPage( esquisserUI( id = "esquisse", container = esquisseContainer(fixed = TRUE) ) ) server <- function(input, output, session) { callModule(module = esquisserServer, id = "esquisse") } shinyApp(ui, server) ## You can also use a vector of margins for the fixed argument, # useful if you have a navbar for example ui <- navbarPage( title = "My navbar app", tabPanel( title = "esquisse", esquisserUI( id = "esquisse", header = FALSE, container = esquisseContainer( fixed = c(55, 0, 0, 0) ) ) ) ) server <- function(input, output, session) { callModule(module = esquisserServer, id = "esquisse") } shinyApp(ui, server) }