esquisse (version 0.3.0)

esquisserServer: Esquisse Shiny module

Description

Launch esquisse in a classic Shiny app.

Usage

esquisserServer(
  input,
  output,
  session,
  data = NULL,
  dataModule = c("GlobalEnv", "ImportFile"),
  sizeDataModule = "m"
)

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

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

Arguments

input, output, session

Standards shiny server arguments.

data

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.

dataModule

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

sizeDataModule

Size for the modal window for selecting data.

id

Module's id.

header

Logical. Display or not esquisse header.

container

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.

choose_data

Logical. Display or not the button to choose data.

insert_code

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

disable_filters

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.

fixed

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).

Value

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).

Examples

Run this code
# NOT RUN {
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(50, 0, 0, 0)
        )
      )
    )
  )
  
  server <- function(input, output, session) {
    
    callModule(module = esquisserServer, id = "esquisse")
    
  }
  
  shinyApp(ui, server)
  
}
# }

Run the code above in your browser using DataLab