esquisse-module {esquisse}R Documentation

Esquisse module

Description

Use esquisse as a module in a Shiny application.

Usage

esquisse_ui(
  id,
  header = TRUE,
  container = esquisseContainer(),
  controls = c("labs", "parameters", "appearance", "filters", "code"),
  insert_code = FALSE,
  play_pause = TRUE,
  downloads = downloads_labels()
)

esquisse_server(
  id,
  data_rv = NULL,
  name = "data",
  default_aes = c("fill", "color", "size", "group", "facet"),
  import_from = c("env", "file", "copypaste", "googlesheets", "url"),
  drop_ids = TRUE,
  notify_warnings = NULL
)

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

Arguments

id

Module ID.

header

Either TRUE or FALSE to display or not esquisse header, or a named list where names are : settings, close, import and show_data and values are TRUE or FALSE to display or not the corresponding button.

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.

controls

Controls menu to be displayed. Use NULL to hide all menus.

insert_code

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

play_pause

Display or not the play / pause button.

downloads

Export options available or NULL for no export. See downloads_labels().

data_rv

Either:

  • A shiny::reactiveValues() with a slot data containing a data.frame to use in the module and a slot name corresponding to the name of the data.frame used for the generated code.

  • A shiny::reactive() function returning a data.frame. See argument name for the name used in generated code.

  • A data.frame object.

name

The default name to use in generated code. Can be a reactive function return a single character.

default_aes

Default aesthetics to be used, can be a character vector or reactive function returning one.

import_from

From where to import data, argument passed to datamods::import_server(), use NULL to prevent the modal to appear.

drop_ids

Argument passed to datamods::filter_data_server. Drop columns containing more than 90% of unique values, or than 50 distinct values.

notify_warnings

See safe_ggplot(). If NULL, the user can make his or her own choice via the settings menu, default is to show warnings once.

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 :

Examples


### 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
  ),
  checkboxGroupInput(
    inputId = "aes", 
    label = "Aesthetics to use:", 
    choices = c(
      "fill", "color", "size", "shape", 
      "weight", "group", "facet", "facet_row", "facet_col"
    ),
    selected = c("fill", "color", "size", "facet"),
    inline = TRUE
  ),
  esquisse_ui(
    id = "esquisse", 
    header = FALSE, # dont display gadget title
    container = esquisseContainer(height = "700px")
  )
)

server <- function(input, output, session) {
  
  data_rv <- reactiveValues(data = iris, name = "iris")
  
  observeEvent(input$data, {
    if (input$data == "iris") {
      data_rv$data <- iris
      data_rv$name <- "iris"
    } else {
      data_rv$data <- mtcars
      data_rv$name <- "mtcars"
    }
  })
  
  esquisse_server(
    id = "esquisse", 
    data_rv = data_rv, 
    default_aes = reactive(input$aes)
  )
  
}

if (interactive())
  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(
  esquisse_ui(
    id = "esquisse",
    header = list(close = FALSE), # hide the close button
    container = esquisseContainer(fixed = TRUE),
    play_pause = FALSE
  )
)

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

  esquisse_server(id = "esquisse")

}

if (interactive())
  shinyApp(ui, server)



## You can also use a vector of margins for the fixed argument,
# useful if you have a navbar for example

library(shiny)
library(esquisse)
library(datamods)

ui <- navbarPage(
  title = "My navbar app",
  tabPanel(
    title = "esquisse",
    esquisse_ui(
      id = "esquisse", 
      header = FALSE,
      container = esquisseContainer(
        fixed = c(55, 0, 0, 0)
      )
    )
  )
)

server <- function(input, output, session) {
  
  # lauch import data modal
  import_modal(
    id = "import-data",
    from = c("env", "file", "copypaste"),
    title = "Import data"
  )
  data_imported_r <- datamods::import_server("import-data")

  data_rv <- reactiveValues(data = data.frame())
  observeEvent(data_imported_r$data(), {
    data_rv$data <- data_imported_r$data()
    data_rv$name <- data_imported_r$name()
  })
  
  esquisse_server(id = "esquisse", data_rv = data_rv)
  
}

if (interactive())
  shinyApp(ui, server)

[Package esquisse version 1.2.0 Index]