loon.shiny: Automatically Create a 'shiny' App Based on Interactive...

View source: R/loon.shiny.R

loon.shinyR Documentation

Automatically Create a shiny App Based on Interactive Loon Widgets


Interactive loon widgets displayed in a shiny app


  selectBy = c("byDefault", "brushing", "sweeping"),
  showWorldView = TRUE,
  plotRegionWidth = "500px",
  plotRegionHeight = "500px",
  plotRegionBackground = "gray92",
  layoutMatrix = NULL,
  nrow = NULL,
  ncol = NULL,
  widths = NULL,
  heights = NULL,
  displayedPanel = "",
  colorList = loon::l_getColorList(),
  inspectorLocation = c("auto", "auto", "60px", "20px"),
  inspectorWidth = "350px",
  inspectorHeight = "auto",
  toolboxWidth = "300px",
  toolboxLocation = c(10, -20),
  options = list(),



A loon widget or a list of loon widgets. If the input is a ggplot object, the ggplot object will be turned into a loon widget via ggplot2loon.


The way to brush, can be 'brushing' (keep the brush whenever the plot is updated), 'sweeping' (clear the brush whenever the plot is updated) or 'byDefault' (determined by loon widget 'selectBy')


Logical; whether to show the world view.


Plot region width. Must be a valid CSS unit (like '100 which will be coerced to a string and have 'px' appended.


Plot region height.


Plot region background color


Optional layout matrix to place loon widgets. See layout_matrix in grid.arrange.


Number of rows, see grid.arrange.


Number of columns, see grid.arrange.


A unit vector giving the width of each plot.


A unit vector giving the height of each plot.


A string vector. The default is an empty string "" so that none inspector components (Plot, Linking, Select, etc) are open automatically. The available strings are c("Plot", "Select", "Linking", "Modify", "Layer", "Glyph")


A list of colors displayed on modify panel.


A length four vector representing the distance between the bottom, left, top and right of the inspector panel and the bottom, left, top and right of the page or parent container.


Width of the inspector panel.


Height of the inspector panel.


The width of a toolbox


The position of a toolbox (if any) which is a length two numerical vector ("pixel") representing the location (x, y) of the top-left corner. A positive x pushes the toolbox to the right of the mouse and a positive y pushes the toolbox down.


shinyApp argument that should be passed to the runApp call, see shinyApp.


Named arguments to modify shiny app.


  • Useful hints for a loon.shiny app

    • The inspector can be switched either by “toggling tabpanel” in the bar menu or the last mouse gesture input (<double-click>) on the plot region

    • To downlight the selected elements, one has to double click on the plot region

    • In loon, holding down the <shift> key while pressing the left button keeps the current selection states. In loon.shiny app, <shift> key is replaced by a 'sticky' radiobutton. If the 'sticky' mode is on, while sweeping, current selection states remain; else new selection will eliminate the previous selection states.

  • Useful hints for a loon.shiny markdown file

    • Based on our experience, setting 'out.width' or 'out.height' (try "10px") in the chunk could give a better layout

    • To modify the app size, set 'options = list(height = **, width = **)' in loon.shiny()


A shiny.appobj object that represents the loon.shiny app. Printing the object or passing it to runApp will run the app.


## Only run this example in interactive R sessions
if(interactive()) {
  ############## Querying ##############
  lp <- with(mpg,
             l_plot(displ, hwy,
                    showItemLabels = TRUE,
                    itemLabel = with(mpg,
                      paste0("model:", manufacturer, " ",
                              model, "\n",
                             "year:", year, "\n",
                             "drive way:", drv, "\n",
                             "fuel type:", fl)),
                    color = "black"))

  ############### Link multiple plots ###############
  p1 <- l_plot(iris,
               linkingGroup = 'iris',
               showLabels = FALSE)
  p2 <- l_hist(iris$Sepal.Length,
               linkingGroup = 'iris',
               showLabels = FALSE,
               showStackedColors = TRUE)
  p3 <- l_hist(iris$Sepal.Width, linkingGroup = 'iris',
               color = iris$Species, sync = 'push',
               showLabels = FALSE, swapAxes = TRUE,
               showStackedColors = TRUE)
  loon.shiny(list(p1, p2, p3),
             layoutMatrix = matrix(c(2,NA,1,3),
             nrow = 2, byrow = TRUE))

if (requireNamespace('loon.ggplot', quietly = TRUE)) {
    # ggplot -> loon -> shiny
    p <- ggplot(mpg, aes(displ, hwy)) +
      geom_point(data = transform(mpg, class = NULL), colour = 'grey85') +
      geom_point() +
    g <- loon.ggplot(p,
                     activeGeomLayers = 2,
                     itemLabel = mpg$model) # active the second layer
    # with facets
    loon.shiny(g, toolboxWidth = "100px")

loon.shiny documentation built on Oct. 8, 2022, 5:05 p.m.