esquisse-module: Esquisse module

esquisse-moduleR 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
)

esquisse_server(
  id,
  data_rv = NULL,
  default_aes = c("fill", "color", "size", "group", "facet"),
  import_from = c("env", "file", "copypaste", "googlesheets")
)

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

Arguments

id

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

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

data_rv

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.

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

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


### 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", 
    container = esquisseContainer(fixed = TRUE)
  )
)

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)

esquisse documentation built on Sept. 1, 2022, 5:05 p.m.