## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE, 
                      warning = FALSE,
                      message = FALSE,
                      fig.align = "center", 
                      fig.width = 6, 
                      fig.height = 5,
                      out.width = "60%", 
                      tidy.opts = list(width.cutoff = 65),
                      tidy = FALSE)
set.seed(12314159)
library(loon.data)
library(loon)
library(gridExtra)

imageDirectory <- file.path(".", "images", "savingLoonPlots")
dataDirectory <- file.path(".", "data", "savingLoonPlots")

## ----basic plots, eval = FALSE------------------------------------------------
# library(loon)
# # First, make sure you always assign a loon plot to a variable
# # at the same time that you create it.  This will give you access
# # to it later.
# # (NB: If you haven't assigned it, you can later using l_getFromPath(). )
# #
# #  A histogram, the name for the linkingGroup is arbitrary
# h <- l_hist(iris$Sepal.Length, color = "grey", xlabel = "Sepal length",
#             linkingGroup = "flowers")
# #
# # A scatterplot
# p <- l_plot(iris$Petal.Width, iris$Petal.Length,
#             color = "grey", size = 10,
#             xlabel = "Petal Width", ylabel = "Petal Length",
#             linkingGroup = "flowers")
# #
# # A serial axes plot using the first 4 columns of iris (i.e. no Species info).
# sa <- l_serialaxes(iris[, 1:4],
#             color = "grey", linkingGroup = "flowers")
# #
# # A static version of the plot can be easily produced.
# plot(h)

## ----grid packages, fig.width = 16, fig.height = 5, eval=FALSE----------------
# library(grid); library(gridExtra)

## ----several plots, fig.width = 16, fig.height = 5, eval = FALSE--------------
# # First get the data stuctures corresponding to the static snapshots
# # of the current plots.  Because we want to arrange them, we don't
# # draw them at first.
# plot_h <- plot(h, draw = FALSE)
# plot_p <- plot(p, draw = FALSE)
# plot_sa <- plot(sa, draw = FALSE)
# # Now we draw them
# grid.arrange(plot_h, plot_p, plot_sa, nrow = 1)

## ----several plots changed, fig.width = 16, fig.height = 5, eval = FALSE------
# # Change the colour by changing it *programmatically* on the plot
# #
# h["color"] <- iris$Species  # use species to determine the colours
# plot_h <- plot(h, draw = FALSE)
# plot_p <- plot(p, draw = FALSE)
# plot_sa <- plot(sa, draw = FALSE)
# # And draw them again
# grid.arrange(plot_h, plot_p, plot_sa, nrow = 1)

## ----plot states,eval=FALSE---------------------------------------------------
# # Accessing values
# head(sa["color"])  # will show the current colours of sa
# # Note that these colours are expressed as 12 hexadecimal digits
# # This is what is used in TCL.  To turn them into R's 6 digit hexadecimal
# # (to use in other R static plots, for example) just use hex12tohex6()
# hex12tohex6(sa["color"][1:3])
# # Setting values ... make only specied iris versicolor active
# sa["active"] <- iris$Species == "versicolor"
# plot(sa)
# # Setting values ... make everything active
# sa["active"] <- TRUE
# plot(sa)

## ----l_export, eval = FALSE---------------------------------------------------
# l_export(p, filename = "myplot_via_l_export.pdf", height = 500, width = 600)

## ----png device, eval = FALSE-------------------------------------------------
# if (requireNamespace("png", quietly = TRUE)) {
#   # turn the png graphics device on with name of the file
#   png(file = "myplot_via_R.png", width = 600, height = 500)
#   # Draw the static plot
#   plot(p)
#   # Turn the device off/close the file
#   dev.off()
# } else {
#   message("Please install png to run this example.")
# }

## ----show the saved plots, eval = FALSE---------------------------------------
# # The one exported from RStudio
# knitr::include_graphics("myplot_via_RStudio.png")
# # Followed by the one saved using l_export
# # (note that background grid is missing)
# knitr::include_graphics("myplot_via_l_export.pdf")
# # And finally, the one saved using R's png device
# knitr::include_graphics("myplot_via_R.png")

## ----load the saved plots, echo = FALSE, eval=FALSE---------------------------
# # The one exported from RStudio
# knitr::include_graphics(file.path(imageDirectory, "myplot_via_RStudio.png"))
# # Followed by the one saved using l_export
# # (note that background grid is missing)
# knitr::include_graphics(file.path(imageDirectory, "myplot_via_l_export.pdf"))
# # And finally, the one saved using R's png device
# knitr::include_graphics(file.path(imageDirectory, "myplot_via_R.png"))

## ----p saveStates, eval = FALSE-----------------------------------------------
# l_saveStates(p, file = "p_savedStates")

## ----show get p states back, eval = FALSE-------------------------------------
# p_savedStates <- l_getSavedStates(file = "p_savedStates")

## ----get p states back, echo = FALSE------------------------------------------
p_savedStates <- l_getSavedStates(file = file.path(dataDirectory, "p_savedStates"))

## ----new plot and copy, eval = FALSE------------------------------------------
# new_p <- l_plot(iris$Petal.Width, iris$Petal.Length)
# l_copyStates(source = p_savedStates, target = new_p)

## ----plot new_p, eval = FALSE-------------------------------------------------
# plot(new_p)

## ----default states-----------------------------------------------------------
names(p_savedStates)

## ----zoom and change glyphs on p, echo = FALSE, eval = FALSE------------------
# p["selected"] <- iris$Species == "versicolor"
# l_move_jitter(p, which = "selected")
# l_scaleto_selected(p)
# p["selected"] <- FALSE
# sample <- sample(1:nrow(iris), 50, replace = FALSE)
# p["glyph"][sample] <- "ctriangle"
# p["size"][sample] <- 30
# plot(p)

## ----save states  zooming, eval = FALSE---------------------------------------
# l_saveStates(p,
#              states = names(p),
#              file = "p_focusOnVersicolor")

## ----eval = FALSE-------------------------------------------------------------
# p_focusOnVersicolor <- l_getSavedStates(file = "p_focusOnVersicolor")

## ----echo = FALSE-------------------------------------------------------------
p_focusOnVersicolor <- l_getSavedStates(file = file.path(dataDirectory, "p_focusOnVersicolor"))

## ----copy all but basic states, eval = FALSE----------------------------------
# l_copyStates(source = p_focusOnVersicolor,
#              target = new_p,
#              returnNames = TRUE)

## ----a changed new_p, eval = FALSE--------------------------------------------
# plot(new_p)

## ----copy all states, eval = FALSE--------------------------------------------
# l_copyStates(source = p_focusOnVersicolor,
#              target = new_p,
#              excludeBasicStates = FALSE)

## ----final plot focus on versicolor, eval = FALSE-----------------------------
# plot(new_p)