--- title: "Layout" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Layout} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Adding and removing plots As you have probably seen in other vignettes, you can add plots using the various `add_plot` functions: ```{r} library(plotscaper) names(airquality) <- c("ozone", "solar radiation", "wind", "temperature", "month", "day") schema <- create_schema(airquality) |> add_scatterplot(c("solar radiation", "ozone")) |> add_barplot(c("day")) |> add_histogram(c("wind")) |> add_pcoords(names(airquality)) schema |> render() ``` You can also remove plots: ```{r} schema |> remove_plot("bar1") |> # Remove the first barplot added to the figure pop_plot() |> # Remove the last plot added to the figure - typically, the bottom-right one render() ``` This does not make much sense server-side, since, if you don't want a specific plot to be in the figure, you can just not add the figure in the first place. However, on the client-side, this can be very useful, since you can modify the figure on the fly: ```{r} #| eval: false # NOT RUN - this only makes sense inside a running R session scene <- create_schema(airquality) |> render() scene |> add_scatterplot(c("solar radiation", "ozone")) scene |> add_barplot(c("day")) # Oops, maybe I want a histogram instead scene |> pop_plot() scene |> add_histogram(c("wind")) ``` Some of this was already discussed in the [Get started](plotscaper.html) section. ## Layout We can also modify the layout of a plotscaper figure, using an interface that's very similar to `graphics::layout`. If you're not familiar with this function, we can provide it a numeric matrix, with values identifying plotting regions as contiguous rectangles, and the plots will be appropriately resized: ```{r} # 1. Big scatterplot on the top left # 2. Small barplot on the top right # 3. Small histogram on the right # 4. Wide parallel coordinates plot on the bottom # 0. (empty space on the bottom right) layout <- matrix(c( 1, 1, 2, 1, 1, 3, 4, 4, 0 ), ncol = 3, byrow = TRUE) schema |> set_layout(layout) |> render() ``` The matrix can be of any size, the only requirement is that the plot areas must be contiguous, meaning that e.g. this would not be a valid layout: ```{r} #| eval: false layout <- matrix(c( 2, 1, # Cannot split plotting regions like this 1, 2 ), ncol = 2) ``` Also, all of the plots should be included in the layout. If they are not, a pop-up warning will show up. You can decide whether you want to proceed with the figure, however, be warned that the layout may not work well. Finally, you can call the `set_layout` function from inside a running R session with `scene |> set_layout(...)` (and you will get a client-side update to the current figure).