diff --git a/.CLAUDE.md b/.CLAUDE.md
index 8d9da08d..bc7f0b67 100644
--- a/.CLAUDE.md
+++ b/.CLAUDE.md
@@ -135,7 +135,12 @@ Tests use `tinytest` + `tinysnapshot`. Snapshot tests produce SVG output with Li
2. Command Palette → "Dev Containers: Reopen in Container"
3. Dependencies install automatically
-Non-snapshot tests (logical assertions, error checks, etc.) run fine on any platform. Even with the devcontainer, a small number of snapshot tests (~2-3) may produce false positive failures on macOS hosts due to imperceptible rendering differences. These show up in `inst/tinytest/_tinysnapshot_review/` but the visual differences are too small to detect by eye. This is a known quirk — don't worry about these specific persistent failures. However, if you see more than ~3 snapshot failures, something real is likely broken and needs investigation.
+Non-snapshot tests (logical assertions, error checks, etc.) run fine on any platform. Even with the devcontainer, a small number of snapshot tests (~2-3) may produce false positive failures on macOS hosts due to imperceptible rendering differences. These show up in `inst/tinytest/_tinysnapshot_review/` but the visual differences are too small to detect by eye. Known false positives:
+
+- `xaxl_yaxl`
+- `palette_manual_continuous`
+
+This is a known quirk — don't worry about these specific persistent failures. However, if you see more than ~3 snapshot failures, something real is likely broken and needs investigation.
### Running Tests
```bash
diff --git a/DESCRIPTION b/DESCRIPTION
index 4dc431ed..4f4886b2 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,7 +1,7 @@
Package: tinyplot
Type: Package
Title: Lightweight Extension of the Base R Graphics System
-Version: 0.6.1
+Version: 0.6.1.99
Date: 2026-03-28
Authors@R:
c(
diff --git a/NEWS.md b/NEWS.md
index 27402614..2bd2a57c 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -4,6 +4,35 @@ _If you are viewing this file on CRAN, please check the
[latest NEWS](https://grantmcdermott.com/tinyplot/NEWS.html) on our website
where the formatting is also better._
+## Development
+
+### Aesthetic changes
+
+- **Dynamic themes**. We have significantly refactored how our _dynamic_ themes
+ work. Recall, these are themes like `"dynamic"`, `"clean"`, `"bw"`, etc. that
+ automatically adjust margin spacing and other elements to reduce whitespace.
+ Our refactoring and internal changes have some user-facing implications,
+ insofar as they can affect the appearance of your plots. Technically, these
+ are "breaking" aesthetic changes---since your plot might look slightly
+ different from before---but we hope that you will agree that these are clear
+ improvements. (#549 @grantmcdermott, @vincentarelbundock)
+
+ - Plot margins now correctly respond to missing and/or multi-line `main`,
+ `sub`, and `x`/`y` axis titles. For example, a plot with a `main` (or `sub`)
+ title will expand to the top of the device region to reduce excess
+ whitespace. (#303)
+ - Left-justified `main` and `sub` titles now correctly anchor to the y-axis
+ line, even when long horizontal tick labels widen the left margin. (#479)
+ - Similarly, center-justified axis titles are now anchored on the relevant
+ axis alone, rather than the full plot region. (#573)
+ - `cex.xlab` and `cex.ylab` now correctly control axis title size. The
+ more general `cex.lab` is still respected as a fallback. (#574)
+
+### New features
+
+- New `"dynamic"` theme that now serves as the foundation for all other dynamic
+ (tiny)themes. (#549 @grantmcdermott)
+
## v0.6.1
### Aesthetic changes
diff --git a/R/facet.R b/R/facet.R
index fde5f529..3d1b1b95 100644
--- a/R/facet.R
+++ b/R/facet.R
@@ -31,10 +31,15 @@ draw_facet_window = function(
draw,
grid,
has_legend,
+ main,
+ sub,
type,
+ xlab,
x, xmax, xmin,
+ ylab,
y, ymax, ymin,
- tpars = NULL
+ tpars = NULL,
+ dynmar_computed = NULL
) {
if (is.null(tpars)) tpars = tpar()
@@ -114,6 +119,23 @@ draw_facet_window = function(
## Dynamic plot margin adjustments
if (dynmar) {
+ # Margins were pre-computed in tinyplot.default (dynmar_computed).
+ # Use that as the base instead of par("mar") which may have been
+ # reset by the before.plot.new hook.
+ side.sub = get_tpar("side.sub", tpar_list = tpars, default = 3)
+ omar = dynmar_computed
+ # Under facets, main/sub sit ABOVE the top facet strip. Bump the
+ # outer top margin by the strip height so sub doesn't collide with
+ # the strip. fmar[3] already captures facet_newlines and the
+ # facet_grid adjustment; add back the 0.5 line that was stripped
+ # when frame.plot is FALSE (that reduction is meant to tighten
+ # inter-panel gaps, not the top strip).
+ strip_bump = fmar[3]
+ if (isFALSE(frame.plot) && !isTRUE(facet.args[["free"]])) {
+ strip_bump = strip_bump + 0.5
+ }
+ omar[3] = omar[3] + strip_bump
+
if (par("las") %in% 1:2) {
# extra whitespace bump on the y axis
## overrides for ridge and some types that use integer spacing with (named) axis labels ## FXIME
@@ -155,6 +177,9 @@ draw_facet_window = function(
fmar[1] = fmar[1] - (whtsbp * cex_fct_adj)
}
}
+
+ if (type == "spineplot") omar[4] = 2.1 # FIXME catch for spineplot RHS axis labs
+
# FIXME: Is this causing issues for lhs legends with facet_grid?
# catch for missing rhs legend
if (isTRUE(attr(facet, "facet_grid")) && !has_legend) {
@@ -183,9 +208,11 @@ draw_facet_window = function(
# on our earlier calculations.
par(mfrow = c(nfacet_rows, nfacet_cols))
} else if (dynmar) {
- # Dynamic plot margin adjustments
- omar = par("mar")
- omar = omar - c(0, 0, 1, 0) # reduce top whitespace since no facet (title)
+ # Dynamic plot margin adjustments (no facets). Margins were pre-computed
+ # in tinyplot.default and passed via dynmar_computed; use them directly.
+ # Tick-label *width/height* (whtsbp) is added further below.
+ side.sub = get_tpar("side.sub", tpar_list = tpars, default = 3)
+ omar = dynmar_computed
if (type == "spineplot") omar[4] = 2.1 # FIXME catch for spineplot RHS axis labs
if (par("las") %in% 1:2) {
# extra whitespace bump on the y axis
@@ -218,6 +245,7 @@ draw_facet_window = function(
omar[1] = omar[1] + whtsbp
}
}
+
par(mar = omar)
}
diff --git a/R/legend.R b/R/legend.R
index c41ecb71..f341a3a8 100644
--- a/R/legend.R
+++ b/R/legend.R
@@ -124,7 +124,7 @@ legend_outer_margins = function(legend_env, apply = TRUE) {
if (legend_env$dynmar) {
omar = par("mar")
if (legend_env$outer_bottom) {
- omar[1] = theme_clean$mgp[1] + 1 * par("cex.lab")
+ omar[1] = theme_dynamic$mgp[1] + 1 * par("cex.lab")
if (legend_env$has_sub && (is.null(.tpar[["side.sub"]]) || .tpar[["side.sub"]] == 1)) {
omar[1] = omar[1] + 1 * par("cex.sub")
}
@@ -407,7 +407,7 @@ prepare_legend = function(settings) {
}
legend_draw_flag = (is.null(legend) || !is.character(legend) || legend != "none" || bubble) && !isTRUE(add)
- has_sub = !is.null(sub)
+ has_sub = text_line_count(sub) > 0L
# Generate labels for discrete legends
if (legend_draw_flag && isFALSE(by_continuous) && (!bubble || multi_legend)) {
@@ -487,6 +487,10 @@ build_legend_args = function(
# Configuration
gradient
) {
+ # Ensure legend_args[["x"]] is populated. When called from the main
+ # tinyplot pipeline, this is a no-op (sanitize_legend short-circuits on
+ # the is.null guard); when called standalone via the public draw_legend
+ # entry point, this normalizes the input.
legend_args = sanitize_legend(legend, legend_args)
# Set defaults
diff --git a/R/legend_multi.R b/R/legend_multi.R
index 8bc4b082..4b26cf82 100644
--- a/R/legend_multi.R
+++ b/R/legend_multi.R
@@ -35,8 +35,6 @@ prepare_legend_multi = function(settings) {
)
)
- legend_args = sanitize_legend(legend, legend_args)
-
# Legend for grouping variable (by)
lgby = list(
legend_args = modifyList(
@@ -162,10 +160,15 @@ draw_multi_legend = function(
sub_positions = c("bottomleft!", "topleft!")
}
- # Assign positions of individual legends
+ # Assign positions of individual legends. Re-sanitize so the new per-legend
+ # position string ("bottomright!" etc.) populates legend_args[["x"]], which
+ # downstream code (e.g. build_legend_args) reads without further normalization.
for (ll in seq_along(legend_list)) {
legend_list[[ll]][["legend"]] = sub_positions[ll]
legend_list[[ll]][["legend_args"]][["x"]] = NULL
+ legend_list[[ll]][["legend_args"]] = sanitize_legend(
+ sub_positions[ll], legend_list[[ll]][["legend_args"]]
+ )
}
#
diff --git a/R/tinyplot.R b/R/tinyplot.R
index 3a980165..ef289e86 100644
--- a/R/tinyplot.R
+++ b/R/tinyplot.R
@@ -833,6 +833,17 @@ tinyplot.default = function(
} else {
settings$legend_args = list(x = NULL)
}
+ # normalize legend position up front so downstream code can read
+ # legend_args[["x"]] directly (idempotent: guarded inside sanitize_legend).
+ # Use settings$legend (captured via substitute()) rather than the raw
+ # `legend` promise, since the latter may be an unevaluated call like
+ # `legend("bottom!", ...)` that would error if forced by is.null() etc.
+ # Skip when add=TRUE: no new legend is drawn in add-mode, and
+ # settings$legend is coerced to FALSE which sanitize_legend would
+ # spuriously normalize to the "right!" default.
+ if (!isTRUE(add)) {
+ settings$legend_args = sanitize_legend(settings$legend, settings$legend_args)
+ }
# alias: bg = fill
if (is.null(bg) && !is.null(fill)) settings$bg = fill
@@ -938,6 +949,115 @@ tinyplot.default = function(
env2env(settings, environment())
+ #
+ ## dynmar: compute margins up front -----
+ #
+ # Under dynmar themes, compute the full margin once before any drawing.
+ # theme_mar (from the theme) is the baseline padding; dynmar_side() adds
+ # space for ticks, axis labels, main, and sub. whtsbp adds tick-label
+ # width/height for horizontal y-labels or vertical x-labels.
+ # For outer legends ("bottom!", "left!", etc.), skip dynmar_side on the
+ # legend's side — the legend code owns that side's mar via oma.
+ #
+ dynmar_computed = NULL
+ .whtsbp = c(0, 0, 0, 0)
+ if (!add && isTRUE(get_tpar("dynmar"))) {
+ .side.sub = get_tpar("side.sub", default = 3)
+ # Read the theme's intended mar. Also build a tpars list from the theme
+ # definition so dynmar_side uses theme mgp/tcl/las (which aren't in
+ # par() yet since the before.plot.new hook hasn't fired).
+ .tinytheme = get_tpar("tinytheme", default = "default")
+ .theme_def = if (!is.null(.tinytheme) && .tinytheme != "default") {
+ get(paste0("theme_", .tinytheme), envir = asNamespace("tinyplot"))
+ } else NULL
+ .theme_mar = if (!is.null(.theme_def[["mar"]])) .theme_def[["mar"]] else par("mar")
+ .tpars = if (!is.null(.theme_def)) .theme_def else tpar()
+ # Merge pending before.plot.new hook values into .tpars so user
+ # overrides passed via tinytheme(..., las = 2) (or tpar(...)) are
+ # visible to dynmar_side()/whtsbp before plot.new fires. Without this,
+ # user overrides for par-level values (las, cex.lab, mgp, tcl, etc.)
+ # are queued in hook closures and unreachable from par() at this point.
+ .pending_hooks = get_environment_variable(".tpar_hooks")
+ for (.h in .pending_hooks) {
+ .bp = environment(.h)[["base_par"]]
+ if (is.list(.bp)) .tpars = modifyList(.tpars, .bp)
+ }
+
+ # Detect outer-legend sides (order: bottom, left, top, right).
+ .lgnd_pos = settings$legend_args[["x"]]
+ .outer_sides = c(
+ grepl("bottom!$", .lgnd_pos),
+ grepl("left!$", .lgnd_pos),
+ grepl("top!$", .lgnd_pos),
+ grepl("right!$", .lgnd_pos)
+ )
+
+ .dyn = c(
+ dynmar_side(1, xlab, main = main, sub = sub, side.sub = .side.sub,
+ axis_on = !identical(xaxt, "none") && !identical(xaxt, "n"),
+ tpars = .tpars),
+ dynmar_side(2, ylab,
+ axis_on = !identical(yaxt, "none") && !identical(yaxt, "n"),
+ tpars = .tpars),
+ dynmar_side(3, NULL, main = main, sub = sub, side.sub = .side.sub,
+ tpars = .tpars),
+ dynmar_side(4, NULL, tpars = .tpars)
+ )
+ # Drop the theme's baseline padding on outer-legend sides so the plot
+ # region meets the legend's oma flush. Only .theme_mar is zeroed — the
+ # axis-driven bumps in .dyn (tick rows, axis labels, main/sub) are kept
+ # so that "left!" and "bottom!" legends don't collide with axis content.
+ .theme_mar[.outer_sides] = 0
+
+ # whtsbp uses strwidth(units="figure") + grconvertX("nfc" → "lines"),
+ # both of which give device-default font metrics without requiring
+ # plot.new()/plot.window() first. A preparatory plot.new() here would
+ # advance par("mfg") (breaking mfrow layouts) and create a blank page
+ # in IDE plot panes (Positron). Left/bottom/top margin sizing for
+ # title alignment is handled later by draw_legend or the no-legend
+ # path's own plot.new(), after which the margins are reinstated
+ # via dynmar_computed + .whtsbp before draw_title runs.
+
+ # Compute whtsbp (tick-label width/height bump). Read `las` from .tpars
+ # (the theme definition) rather than par() — par("las") isn't set to the
+ # theme's intended value until the before.plot.new hook fires, but this
+ # block runs before that.
+ .whtsbp = c(0, 0, 0, 0)
+ .las = get_tpar("las", tpar_list = .tpars, default = par("las"))
+ if (.las %in% 1:2) {
+ if (type == "ridge") {
+ yaxlabs = levels(y)
+ } else if (!is.null(ylabs)) {
+ yaxlabs = if (!is.null(names(ylabs))) names(ylabs) else ylabs
+ } else if (type == "boxplot" && isTRUE(flip) && !is.null(xlabs)) {
+ yaxlabs = if (!is.null(names(xlabs))) names(xlabs) else xlabs
+ } else {
+ yaxlabs = axisTicks(usr = extendrange(ylim, f = 0.04), log = par("ylog"))
+ }
+ if (!is.null(yaxl)) yaxlabs = tinylabel(yaxlabs, yaxl)
+ whtsbp_y = grconvertX(max(strwidth(yaxlabs, "figure")), from = "nfc", to = "lines") -
+ grconvertX(0, from = "nfc", to = "lines") - 1
+ if (is.finite(whtsbp_y) && whtsbp_y > 0) .whtsbp[2] = whtsbp_y
+ }
+ if (.las %in% 2:3) {
+ xaxlabs = if (is.null(xlabs)) axisTicks(usr = extendrange(xlim, f = 0.04), log = par("xlog")) else
+ if (!is.null(names(xlabs))) names(xlabs) else xlabs
+ if (!is.null(xaxl)) xaxlabs = tinylabel(xaxlabs, xaxl)
+ whtsbp_x = grconvertX(max(strwidth(xaxlabs, "figure")), from = "nfc", to = "lines") - 1
+ if (is.finite(whtsbp_x) && whtsbp_x > 0) .whtsbp[1] = whtsbp_x
+ }
+
+ # Under facets, per-facet tick labels render smaller (scaled by
+ # cex_fct_adj), so whtsbp — which is computed from device font metrics
+ # — needs the same scaling to match the actual rendered margin used by
+ # draw_facet_window. Without this, draw_title's mar reserves too much
+ # space on the LHS and anchors the title too far right.
+ if (cex_fct_adj != 1) .whtsbp = .whtsbp * cex_fct_adj
+
+ dynmar_computed = .theme_mar + .dyn
+ par(mar = dynmar_computed + .whtsbp)
+ }
+
if (legend_draw_flag) {
if (!multi_legend) {
## simple case: single legend only
@@ -988,7 +1108,17 @@ tinyplot.default = function(
#
if (!add) {
- draw_title(main, sub, xlab, ylab, legend, legend_args, opar)
+ # Reinstate dynmar margins and user coordinates after draw_legend
+ # (which may have called plot.new and reset par via hooks).
+ if (!is.null(dynmar_computed)) {
+ par(mar = dynmar_computed + .whtsbp)
+ if (!is.null(xlim) && !is.null(ylim)) {
+ plot.window(xlim = xlim, ylim = ylim)
+ }
+ }
+ draw_title(main, sub, xlab, ylab, legend, legend_args, opar,
+ xlab_line_offset = if (!is.null(dynmar_computed)) .whtsbp[1] else 0,
+ ylab_line_offset = if (!is.null(dynmar_computed)) .whtsbp[2] else 0)
}
@@ -1062,10 +1192,15 @@ tinyplot.default = function(
draw = draw,
grid = grid,
has_legend = has_legend,
+ main = main,
+ sub = sub,
type = type,
+ xlab = xlab,
x = x, xmax = xmax, xmin = xmin,
+ ylab = ylab,
y = y, ymax = ymax, ymin = ymin,
- tpars = tpars
+ tpars = tpars,
+ dynmar_computed = dynmar_computed
),
list = list(
add = add,
@@ -1086,16 +1221,20 @@ tinyplot.default = function(
draw = draw,
grid = grid,
has_legend = has_legend,
+ main = main,
+ sub = sub,
type = type,
+ xlab = xlab,
x = datapoints$x, xmax = datapoints$xmax, xmin = datapoints$xmin,
+ ylab = ylab,
y = datapoints$y, ymax = datapoints$ymax, ymin = datapoints$ymin,
- tpars = tpar() # https://github.com/grantmcdermott/tinyplot/issues/474
+ tpars = tpar(), # https://github.com/grantmcdermott/tinyplot/issues/474
+ dynmar_computed = dynmar_computed
),
getNamespace("tinyplot")
)
list2env(facet_window_args, environment())
-
#
## split and draw datapoints -----
#
diff --git a/R/tinytheme.R b/R/tinytheme.R
index 5fc29348..166518f0 100644
--- a/R/tinytheme.R
+++ b/R/tinytheme.R
@@ -16,12 +16,13 @@
#'
#' - `"default"`: inherits the user's default base graphics settings.
#' - `"basic"`: light modification of `"default"`, only adding filled points, a panel background grid, and light gray background to facet titles.
-#' - `"clean"` (*): builds on `"basic"` by moving the subtitle above the plotting area, adding horizontal axis labels, employing tighter default plot margins and title gaps to reduce whitespace, and setting different default palettes ("Tableau 10" for discrete colors and "agSunset" for gradient colors). The first of our dynamic themes and the foundation for several derivative themes that follow below.
+#' - `"dynamic"` (*): builds on `"basic"` by enabling dynamic margin adjustment with tighter default margins, horizontal axis labels, and the subtitle moved above the plotting area. Turns off the panel grid. Provides the foundation for all other dynamic themes and is a good starting point for users who wish to build custom dynamic themes.
+#' - `"clean"` (*): builds on `"dynamic"` by re-enabling the panel background grid and setting different default palettes ("Tableau 10" for discrete colors and "agSunset" for gradient colors).
#' - `"clean2"` (*): removes the plot frame (box) from `"clean"`.
-#' - `"classic"` (*): connects the axes in a L-shape, but removes the other top and right-hand edges of the plot frame (box). Also sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the **ggplot2** theme of the same name.
-#' - `"bw"` (*): similar to `"clean"`, except uses thinner lines for the plot frame (box), solid grid lines, and sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the **ggplot2** theme of the same name.
-#' - `"minimal"` (*): removes the plot frame (box) from `"bw"`, as well as the background for facet titles. Inspired by the **ggplot2** theme of the same name.
-#' - `"ipsum"` (*): similar to `"minimal"`, except subtitle is italicised and axes titles are aligned to the far edges. Inspired by the **hrbrthemes** theme of the same name for **ggplot2**.
+#' - `"classic"` (*): builds on `"dynamic"` with L-shaped axes (removing the top and right-hand edges of the plot frame). Also sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the **ggplot2** theme of the same name.
+#' - `"bw"` (*): similar to `"clean"`, except uses thinner lines for the plot frame (box), solid grid lines, and sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the **ggplot2** theme of the same name.
+#' - `"minimal"` (*): removes the plot frame (box) from `"bw"`, as well as the background for facet titles. Inspired by the **ggplot2** theme of the same name.
+#' - `"ipsum"` (*): similar to `"minimal"`, except subtitle is italicised and axes titles are aligned to the far edges. Inspired by the **hrbrthemes** theme of the same name for **ggplot2**.
#' - `"dark"` (*): similar to `"minimal"`, but set against a dark background with foreground and a palette colours lightened for appropriate contrast.
#' - `"ridge"` (*): a specialized theme for ridge plots (see [`type_ridge()`]). Builds off of `"clean"`, but adds ridge-specific tweaks (e.g. default "Zissou 1" palette for discrete colors, solid horizontal grid lines, and minor adjustments to y-axis labels). Not recommended for non-ridge plots.
#' - `"ridge2"` (*): removes the plot frame (box) from `"ridge"`, but retains the x-axis line. Again, not recommended for non-ridge plots.
@@ -49,8 +50,6 @@
#' Known current limitations include:
#'
#' - Themes do not work well when `legend = "top!"`.
-#' - Dynamic margin spacing does not account for multi-line strings (e.g., axes
-#' or main titles that contain "\\n").
#'
#' @return The function returns nothing. It is called for its side effects.
#'
@@ -119,7 +118,7 @@
#' @export
tinytheme = function(
theme = c(
- "default", "basic",
+ "default", "basic", "dynamic",
"clean", "clean2", "bw", "classic",
"minimal", "ipsum", "dark",
"ridge", "ridge2",
@@ -138,8 +137,8 @@ tinytheme = function(
theme,
c(
"default",
- sort(c("basic", "bw", "classic", "clean", "clean2", "dark", "ipsum",
- "minimal", "ridge", "ridge2", "tufte", "void"))
+ sort(c("basic", "bw", "classic", "clean", "clean2", "dark", "dynamic",
+ "ipsum", "minimal", "ridge", "ridge2", "tufte", "void"))
)
)
@@ -151,6 +150,7 @@ tinytheme = function(
"clean" = theme_clean,
"clean2" = theme_clean2,
"dark" = theme_dark,
+ "dynamic" = theme_dynamic,
"ipsum" = theme_ipsum,
"minimal" = theme_minimal,
"ridge" = theme_ridge,
@@ -196,8 +196,8 @@ theme_default = list(
cex = par("cex"), #1,
cex.axis = par("cex.axis"), #1,
cex.main = par("cex.main"), #1.2,
- cex.xlab = par("cex.axis"), #1,
- cex.ylab = par("cex.axis"), #1,
+ cex.xlab = NULL, # defer to par("cex.lab") unless set explicitly
+ cex.ylab = NULL, # defer to par("cex.lab") unless set explicitly
col.axis = par("col.axis"), #1,
col.xaxs = par("col.axis"), #1,
col.yaxs = par("col.axis"), #1,
@@ -273,56 +273,60 @@ theme_void = modifyList(theme_default, list(
yaxt = "none"
))
-# derivatives of "basic"
-# - clean
+# derivatives of "basic"
+# - dynamic
-theme_clean = modifyList(theme_basic, list(
+theme_dynamic = modifyList(theme_basic, list(
## Notes:
- ## - 1. Reduce axis title gap by 0.5 lines and also reduce tcl to 0.3 lines.
- ## - 2. Sub moves to top.
- ## - 3. Also want to remove excess white on rhs of plot margin (when no legend).
- ## - Together, 1, 2, and 3 imply that...
- ## -- mgp[1] should be adjusted by 0.8 (= 0.5 + 0.3)
- ## -- mgp[2] should be adjusted by 0.3
- ## -- mar[1] should be adjusted by 1.8 (= 1 (no sub) + 0.5 + 0.3 (tighter axis labs))
- ## -- mar[2] should be adjusted by 0.8 (= 0.5 + 0.3)
- ## -- mar[3] should remain unchanged (main + sub will adjust automatically)
- ## -- mar[4] should be adjusted by 1.5 (relative to 2.1)
+ ## - Dynamic themes start from an (almost) zero `mar` baseline. The
+ ## `draw_facet_window()` helper builds each side's margin up from this
+ ## pad, adding only what the plot actually needs (tick row, axis label,
+ ## main, sub). See `dynmar_side()` in utils.R.
+ ## - `side.sub = 3` moves the sub-caption above the plot (below main).
+ ## - `tcl = -0.3` tightens axis tick marks relative to the base default.
##
- tinytheme = "clean",
+ tinytheme = "dynamic",
adj.main = 0,
adj.sub = 0,
dynmar = TRUE,
+ grid = FALSE,
las = 1,
- mar = c(5.1, 4.1, 4.1, 2.1) - c(1+0.5+0.3, 0.5+0.3, 0, 1.5), ## test
+ mar = c(0.1, 0.1, 0.6, 0.6),
mgp = c(3, 1, 0) - c(0.5+0.3, 0.3, 0), # i.e., subtract 0.5 lines + the (abs) value of the tcl adjustment
- palette.qualitative = "Tableau 10",
- palette.sequential = "ag_Sunset",
side.sub = 3,
tcl = -0.3
))
-# derivatives of "clean"
-# - clean2
+# derivatives of "dynamic"
+# - clean
# - classic
-# - bw
-theme_clean2 = modifyList(theme_clean, list(
- tinytheme = "clean2",
- facet.border = "gray90",
- xaxt = "labels",
- yaxt = "labels"
+theme_clean = modifyList(theme_dynamic, list(
+ tinytheme = "clean",
+ grid = TRUE,
+ palette.qualitative = "Tableau 10",
+ palette.sequential = "ag_Sunset"
))
-theme_classic = modifyList(theme_clean, list(
+theme_classic = modifyList(theme_dynamic, list(
tinytheme = "classic",
bty = "l",
facet.bg = NULL,
font.main = 1,
- grid = FALSE,
palette.qualitative = "Okabe-Ito"
))
+# derivatives of "clean"
+# - clean2
+# - bw
+
+theme_clean2 = modifyList(theme_clean, list(
+ tinytheme = "clean2",
+ facet.border = "gray90",
+ xaxt = "labels",
+ yaxt = "labels"
+))
+
theme_bw = modifyList(theme_clean, list(
tinytheme = "bw",
font.main = 1,
@@ -372,7 +376,7 @@ theme_dark = modifyList(theme_minimal, list(
palette.sequential = "Sunset"
))
-# derivative of clean/clean2
+# derivatives of clean/clean2
theme_ridge = modifyList(theme_clean, list(
tinytheme = "ridge",
diff --git a/R/title.R b/R/title.R
index 74311d05..64e4a69f 100644
--- a/R/title.R
+++ b/R/title.R
@@ -1,4 +1,6 @@
-draw_title = function(main, sub, xlab, ylab, legend, legend_args, opar) {
+draw_title = function(main, sub, xlab, ylab, legend, legend_args, opar,
+ xlab_line_offset = 0,
+ ylab_line_offset = 0) {
# main title
# Note that we include a special catch for the main title if legend is
# "top!" (and main is specified in the first place).
@@ -20,17 +22,29 @@ draw_title = function(main, sub, xlab, ylab, legend, legend_args, opar) {
if (isTRUE(adj_title)) {
line_main = par("mar")[3] - opar[["mar"]][3] + 1.7 + 0.1
+ } else if (isTRUE(get_tpar("dynmar", FALSE))) {
+ # Anchor main at a fixed line above the plot box so it stays in the same
+ # position regardless of whether sub is also present (the sub branch
+ # below adds a +1.2 shift on top of this baseline when needed).
+ line_main = get_tpar("mgp")[3] + 0.7 - 0.1
} else {
line_main = NULL
}
+ # When sub sits on top (side.sub == 3), push main up by the sub block
+ # height so main is above sub rather than overlapping it. Treat NA/empty
+ # sub as absent so main stays at its normal position. First sub row gets
+ # a small (0.2-line) extra bump for visual breathing room.
+ sub_lines = text_line_count(sub)
+ if (sub_lines > 0L && isTRUE(get_tpar("side.sub", 1) == 3)) {
+ if (is.null(line_main)) line_main = get_tpar("mgp")[3] + 0.7 - 0.1
+ cex_sub = get_tpar("cex.sub", 1.2)
+ line_main = line_main + (cex_sub + 0.2) + (sub_lines - 1) * cex_sub
+ }
+
if (!is.null(sub)) {
if (isTRUE(get_tpar("side.sub", 1) == 3)) {
- if (is.null(line_main)) line_main = par("mgp")[3] + 1.7 - .1
- line_main = line_main + 1.2
- }
- if (isTRUE(get_tpar("side.sub", 1) == 3)) {
- line_sub = get_tpar("line.sub", 1.7)
+ line_sub = get_tpar("line.sub", 0.7)
} else {
line_sub = get_tpar("line.sub", 4)
}
@@ -49,6 +63,10 @@ draw_title = function(main, sub, xlab, ylab, legend, legend_args, opar) {
}
if (!is.null(main)) {
+ # title() stacks multi-line main *above* `line_main` (line N at
+ # `line_main`, extra lines extend upward). The reserved top margin
+ # already accounts for (N-1)*cex_main extra lines, so no line-shift
+ # adjustment is needed here.
args = list(
main = main,
line = line_main,
@@ -61,11 +79,32 @@ draw_title = function(main, sub, xlab, ylab, legend, legend_args, opar) {
}
- # Axis titles
+ # Axis titles. For multi-line labels, base R places line 1 at
+ # `line = mgp[1] - (N-1)*cex`, which pushes line 1 up into the tick-label
+ # zone. Shift `line` down so line 1 aligns with where a single-line xlab
+ # would be (and the extra lines extend below).
+ # Also push down by xlab_line_offset (= .whtsbp[1]) when dynmar has
+ # reserved extra space for rotated (las=2/3) x-tick labels.
args = list(xlab = xlab)
+ xlab_lines = text_line_count(xlab)
+ cex_xlab = get_tpar(c("cex.xlab", "cex.lab"), 1)
+ if (xlab_lines > 1L || xlab_line_offset != 0) {
+ args[["line"]] = get_tpar("mgp")[1] +
+ (xlab_lines - 1) * cex_xlab +
+ xlab_line_offset
+ }
args[["adj"]] = get_tpar(c("adj.xlab", "adj"))
+ args[["cex.lab"]] = cex_xlab
do.call(title, args)
+
+ # ylab: base R already places multi-line text correctly (outermost line at
+ # mgp[1], subsequent lines closer to the plot), so no line shift needed.
args = list(ylab = ylab)
+ cex_ylab = get_tpar(c("cex.ylab", "cex.lab"), 1)
+ if (ylab_line_offset != 0) {
+ args[["line"]] = get_tpar("mgp")[1] + ylab_line_offset
+ }
args[["adj"]] = get_tpar(c("adj.ylab", "adj"))
+ args[["cex.lab"]] = cex_ylab
do.call(title, args)
}
diff --git a/R/utils.R b/R/utils.R
index c680235d..c8658875 100644
--- a/R/utils.R
+++ b/R/utils.R
@@ -3,6 +3,87 @@ if (getRversion() <= "4.4.0") {
`%||%` = function(x, y) if (is.null(x)) y else x
}
+# Count text lines. Returns 0 for absent text and 1 for expression objects.
+text_line_count = function(x) {
+ if (is.null(x)) return(0L)
+ if (identical(x, NA) || identical(x, NA_character_)) return(0L)
+ if (!is.character(x)) return(1L)
+ if (!length(x)) return(0L)
+ keep = !is.na(x) & nzchar(x)
+ if (!any(keep)) return(0L)
+ x = x[which(keep)[1L]]
+ as.integer(1L + nchar(gsub("[^\n]", "", x)))
+}
+
+# Compute additive margin "build" for a given side under dynmar.
+# Starts from zero and adds only what the plot actually needs. The tick
+# row and the axis-label row occupy overlapping vertical space (tick row
+# ends at ~|tcl| + mgp[2] + 1, axis label baseline sits at mgp[1]), so the
+# margin is the max of:
+# - tick-row height (|tcl| + mgp[2] + 1), when the axis is drawn
+# - axis-label extent (mgp[1] + (N - 1) * cex + 1 line for asc/desc), when present
+# Main/sub sit above/below the plot box on the top/bottom side and add to the
+# margin additively.
+# Tick-label *width* for sides 2/4 (and *height* for 1/3 under las 2:3) is
+# handled separately by the existing whtsbp logic in draw_facet_window().
+# The caller is expected to take max(theme_mar[side], dynmar_side(...)) so
+# that the theme's starting `mar` acts as a baseline padding.
+dynmar_side = function(side, label, main = NULL, sub = NULL,
+ side.sub = 3, axis_on = TRUE, tpars = NULL) {
+ mgp = get_tpar("mgp", tpar_list = tpars)
+ tcl = get_tpar("tcl", tpar_list = tpars, default = par("tcl"))
+ tick_extent = if (side %in% 1:2 && isTRUE(axis_on)) {
+ # |tcl| = tick mark length (outward); mgp[2] = tick-label distance from
+ # axis; +1 = one line for the tick-label text itself. These mirror base
+ # R's default layout: par(tcl = -0.5, mgp = c(3,1,0)) gives 0.5+1+1=2.5.
+ max(0, -tcl) + mgp[2] + 1
+ } else 0
+ label_extent = 0
+ lines = text_line_count(label)
+ if (side %in% 1:2 && lines >= 1L) {
+ cex_lab = get_tpar(
+ if (side == 1L) c("cex.xlab", "cex.lab") else c("cex.ylab", "cex.lab"),
+ tpar_list = tpars, default = 1
+ )
+ # Last-line baseline sits at mgp[1] + (N-1)*cex (after line-shift in
+ # draw_title); add a full line to cover ascender+descender so the text
+ # doesn't clip against the device edge.
+ # TODO: the +1 constant doesn't scale with cex_lab, so large values
+ # (e.g. cex.xlab = 3) under-reserve margin and the title overlaps
+ # tick labels. Fixing this requires also pushing the draw-position
+ # (line arg in draw_title) further out. See "P.S." in #574.
+ label_extent = mgp[1] + (lines - 1) * cex_lab + 1
+ }
+ mar = max(tick_extent, label_extent)
+ if (side == 3L) {
+ mlines = text_line_count(main)
+ if (mlines >= 1L) {
+ cex_main = get_tpar("cex.main", tpar_list = tpars, default = 1.2)
+ # 0.7 = distance (in lines) from plot box to main baseline. Matches
+ # line_main = mgp[3] + 0.7 - 0.1 in draw_title (mgp[3] default 0).
+ # Chosen to visually match base R's default title gap at cex.main=1.2
+ # with par(mar=c(5.1,4.1,4.1,2.1), mgp=c(3,1,0)).
+ # 0.6 = empirical ascender fraction: the top line's visible extent
+ # reaches ~0.6 * cex_main above its baseline. Derived from
+ # strheight("X") / par("csi") ≈ 0.6 on standard devices.
+ mar = mar + 0.7 + (mlines - 1 + 0.6) * cex_main
+ }
+ }
+ slines = text_line_count(sub)
+ if (slines >= 1L && side == side.sub && side %in% c(1L, 3L)) {
+ cex_sub = get_tpar("cex.sub", tpar_list = tpars, default = 1.2)
+ # Sub sits between the plot box and main (when side.sub = 3).
+ # 0.2 = breathing room between sub baseline and the element above it
+ # (plot box or main). Tuned visually to avoid crowding at default cex.
+ # 0.6 = same ascender fraction as main (see above). Applied only when
+ # main is absent, since main's ascender already covers the top.
+ has_main_here = side == 3L && text_line_count(main) >= 1L
+ asc = if (has_main_here) 0 else 0.6 * cex_sub
+ mar = mar + (cex_sub + 0.2) + (slines - 1) * cex_sub + asc
+ }
+ mar
+}
+
## Function that computes an appropriate bandwidth kernel based on a string
## input
diff --git a/inst/tinytest/_tinysnapshot/margins_facet_multiline.svg b/inst/tinytest/_tinysnapshot/margins_facet_multiline.svg
new file mode 100644
index 00000000..07c0270c
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/margins_facet_multiline.svg
@@ -0,0 +1,124 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/margins_missing_labels.svg b/inst/tinytest/_tinysnapshot/margins_missing_labels.svg
new file mode 100644
index 00000000..5f73f727
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/margins_missing_labels.svg
@@ -0,0 +1,81 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/margins_multiline_2x2.svg b/inst/tinytest/_tinysnapshot/margins_multiline_2x2.svg
new file mode 100644
index 00000000..2908f662
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/margins_multiline_2x2.svg
@@ -0,0 +1,330 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/margins_multiline_labels.svg b/inst/tinytest/_tinysnapshot/margins_multiline_labels.svg
new file mode 100644
index 00000000..e07d83e3
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/margins_multiline_labels.svg
@@ -0,0 +1,93 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/margins_sub_na_bottom_legend.svg b/inst/tinytest/_tinysnapshot/margins_sub_na_bottom_legend.svg
new file mode 100644
index 00000000..70168c2f
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/margins_sub_na_bottom_legend.svg
@@ -0,0 +1,118 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/pointrange_with_layers_flipped.svg b/inst/tinytest/_tinysnapshot/pointrange_with_layers_flipped.svg
index f2ca5b15..1b33106b 100644
--- a/inst/tinytest/_tinysnapshot/pointrange_with_layers_flipped.svg
+++ b/inst/tinytest/_tinysnapshot/pointrange_with_layers_flipped.svg
@@ -26,8 +26,8 @@
-y
-x
+y
+x
@@ -39,34 +39,34 @@
10
20
30
-
-
-
-
-
-(Intercept)
-hp
-factor(cyl)6
-factor(cyl)8
-
+
+
+
+
+
+(Intercept)
+hp
+factor(cyl)6
+factor(cyl)8
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge.svg b/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge.svg
index 207520e8..5168817a 100644
--- a/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge.svg
@@ -26,8 +26,8 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
@@ -43,32 +43,32 @@
3.5
4.0
4.5
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-setosa
-versicolor
-virginica
+
+
+
+
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge2.svg b/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge2.svg
index e0194521..f200d154 100644
--- a/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge2.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_basic_theme_ridge2.svg
@@ -26,8 +26,8 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
1.5
2.0
2.5
@@ -37,25 +37,25 @@
4.5
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-setosa
-versicolor
-virginica
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge.svg b/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge.svg
index 75ba956f..1cf08158 100644
--- a/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge.svg
@@ -26,18 +26,18 @@
-
- 2.0
- 2.5
- 3.0
- 3.5
- 4.0
-- -
-- -
-- -
-- -
-- -
-Sepal.Width
+
+ 2.0
+ 2.5
+ 3.0
+ 3.5
+ 4.0
+- -
+- -
+- -
+- -
+- -
+Sepal.Width
@@ -45,1584 +45,1584 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
-
+
-
+
-
-
+
+
1.5
2.0
2.5
-3.0
+3.0
3.5
-4.0
-4.5
-
+4.0
+4.5
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-setosa
-versicolor
-virginica
+
+
+
+
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge2.svg b/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge2.svg
index 6ffce087..0c024823 100644
--- a/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge2.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_by_x_theme_ridge2.svg
@@ -26,18 +26,18 @@
-
- 2.0
- 2.5
- 3.0
- 3.5
- 4.0
-- -
-- -
-- -
-- -
-- -
-Sepal.Width
+
+ 2.0
+ 2.5
+ 3.0
+ 3.5
+ 4.0
+- -
+- -
+- -
+- -
+- -
+Sepal.Width
@@ -45,1579 +45,1579 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
1.5
2.0
2.5
-3.0
+3.0
3.5
-4.0
-4.5
+4.0
+4.5
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-setosa
-versicolor
-virginica
-
+setosa
+versicolor
+virginica
+
-
+
-
-
+
+
diff --git a/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge.svg b/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge.svg
index 1a99a67a..c49809a7 100644
--- a/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge.svg
@@ -26,75 +26,75 @@
-
-
-
-Species
-virginica
-versicolor
-setosa
+
+
+
+Species
+virginica
+versicolor
+setosa
-
-
+
+
-
-Sepal.Width
-Species
+
+Sepal.Width
+Species
-
+
-
-
-
-
-
+
+
+
+
+
1.5
2.0
-2.5
-3.0
-3.5
-4.0
-4.5
-
+2.5
+3.0
+3.5
+4.0
+4.5
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-virginica
+
+
+virginica
-
-
-
-
+
+
+
+
-
-
-versicolor
+
+
+versicolor
-
-
-
-
+
+
+
+
-
-
-setosa
+
+
+setosa
diff --git a/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge2.svg b/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge2.svg
index 2155309d..ab221ec4 100644
--- a/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge2.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_by_y_theme_ridge2.svg
@@ -26,84 +26,84 @@
-
-
-
-Species
-virginica
-versicolor
-setosa
+
+
+
+Species
+virginica
+versicolor
+setosa
-
-
+
+
-
-Sepal.Width
-Species
+
+Sepal.Width
+Species
1.5
2.0
-2.5
-3.0
-3.5
-4.0
-4.5
+2.5
+3.0
+3.5
+4.0
+4.5
-
-
+
+
-
-
-
-
+
+
+
+
-virginica
-
+virginica
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-versicolor
-
+versicolor
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-setosa
-
+setosa
+
-
-
-
-
-
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge.svg b/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge.svg
index 80ffa81f..1b1ebf32 100644
--- a/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge.svg
@@ -27,14 +27,14 @@
mpg
-am
+am
-
-
+
+
-
+
@@ -54,16 +54,16 @@
30
35
40
-
-0
-
+
+0
+
-
-
+
+
-
+
@@ -83,2090 +83,2090 @@
30
35
40
-
-1
-
+
+1
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-0
-1
+
+
+
+0
+1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-0
-1
+
+
+
+0
+1
-
-
+
+
-
+
diff --git a/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge2.svg b/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge2.svg
index 0e355975..f3ebe371 100644
--- a/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge2.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_gradient_facet_theme_ridge2.svg
@@ -27,14 +27,14 @@
mpg
-am
+am
-
-
+
+
-
+
5
@@ -45,15 +45,15 @@
30
35
40
-
-0
+
+0
-
-
+
+
-
+
5
@@ -64,1042 +64,1042 @@
30
35
40
-
-1
+
+1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-0
-1
+0
+1
@@ -1110,1039 +1110,1039 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-0
-1
+0
+1
@@ -2154,11 +2154,11 @@
-
-
+
+
-
+
diff --git a/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge.svg b/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge.svg
index 3cceee10..10cfe16b 100644
--- a/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge.svg
@@ -26,8 +26,8 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
@@ -43,1565 +43,1565 @@
3.5
4.0
4.5
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-setosa
-versicolor
-virginica
+
+
+
+
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge2.svg b/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge2.svg
index 5a866458..f18d999d 100644
--- a/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge2.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_gradient_theme_ridge2.svg
@@ -26,8 +26,8 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
1.5
2.0
2.5
@@ -37,1558 +37,1558 @@
4.5
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-setosa
-versicolor
-virginica
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/ridge_theme_bg_numeric.svg b/inst/tinytest/_tinysnapshot/ridge_theme_bg_numeric.svg
index 7acdb280..3c840d53 100644
--- a/inst/tinytest/_tinysnapshot/ridge_theme_bg_numeric.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_theme_bg_numeric.svg
@@ -26,8 +26,8 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
1.5
2.0
2.5
@@ -37,25 +37,25 @@
4.5
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-setosa
-versicolor
-virginica
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/ridge_theme_palette.svg b/inst/tinytest/_tinysnapshot/ridge_theme_palette.svg
index 7138677a..69fa6e1d 100644
--- a/inst/tinytest/_tinysnapshot/ridge_theme_palette.svg
+++ b/inst/tinytest/_tinysnapshot/ridge_theme_palette.svg
@@ -26,8 +26,8 @@
-Sepal.Width
-Species
+Sepal.Width
+Species
1.5
2.0
2.5
@@ -37,37 +37,37 @@
4.5
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-setosa
-versicolor
-virginica
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/tinylabel.svg b/inst/tinytest/_tinysnapshot/tinylabel.svg
index 07a3a30f..f89ccaa8 100644
--- a/inst/tinytest/_tinysnapshot/tinylabel.svg
+++ b/inst/tinytest/_tinysnapshot/tinylabel.svg
@@ -26,128 +26,128 @@
-
- 0.5%
- 1.0%
- 1.5%
- 2.0%
- 2.5%
-- -
-- -
-- -
-- -
-- -
-Illiteracy
+
+ 0.5%
+ 1.0%
+ 1.5%
+ 2.0%
+ 2.5%
+- -
+- -
+- -
+- -
+- -
+Illiteracy
-
-
+
+
-
-Income
-Life.Exp
+
+Income
+Life.Exp
-
+
-
-
-
-
-
-
+
+
+
+
+
+
$3,000
-$3,500
-$4,000
-$4,500
-$5,000
-$5,500
-$6,000
-
-
-
-
-
-
-
-68
-69
-70
-71
-72
-73
-
+$3,500
+$4,000
+$4,500
+$5,000
+$5,500
+$6,000
+
+
+
+
+
+
+
+68
+69
+70
+71
+72
+73
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_bw.svg b/inst/tinytest/_tinysnapshot/tinytheme_bw.svg
index b8170063..45ad1965 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_bw.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_bw.svg
@@ -26,99 +26,99 @@
-
-
-factor(am)
-0
-1
-tinytheme("bw")
+
+
+factor(am)
+0
+1
+tinytheme("bw")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
-
+
-
+
-
-
+
+
50
100
-150
+150
200
-250
-300
-
-
-
-
-
-
-10
-15
-20
-25
-30
-
+250
+300
+
+
+
+
+
+
+10
+15
+20
+25
+30
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_classic.svg b/inst/tinytest/_tinysnapshot/tinytheme_classic.svg
index d19f4f19..866cbc38 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_classic.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_classic.svg
@@ -26,88 +26,88 @@
-
-
-factor(am)
-0
-1
-tinytheme("classic")
+
+
+factor(am)
+0
+1
+tinytheme("classic")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
-
+
-
+
-
-
+
+
50
100
-150
+150
200
-250
-300
-
-
-
-
-
-
-10
-15
-20
-25
-30
-
+250
+300
+
+
+
+
+
+
+10
+15
+20
+25
+30
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_clean.svg b/inst/tinytest/_tinysnapshot/tinytheme_clean.svg
index 7a0275d6..41582919 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_clean.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_clean.svg
@@ -26,99 +26,99 @@
-
-
-factor(am)
-0
-1
-tinytheme("clean")
+
+
+factor(am)
+0
+1
+tinytheme("clean")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
-
+
-
+
-
-
+
+
50
100
-150
+150
200
-250
-300
-
-
-
-
-
-
-10
-15
-20
-25
-30
-
+250
+300
+
+
+
+
+
+
+10
+15
+20
+25
+30
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_clean2.svg b/inst/tinytest/_tinysnapshot/tinytheme_clean2.svg
index 63c78a6f..f45fd079 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_clean2.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_clean2.svg
@@ -26,85 +26,85 @@
-
-
-factor(am)
-0
-1
-tinytheme("clean2")
+
+
+factor(am)
+0
+1
+tinytheme("clean2")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
50
100
-150
+150
200
-250
-300
-10
-15
-20
-25
-30
+250
+300
+10
+15
+20
+25
+30
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dark.svg b/inst/tinytest/_tinysnapshot/tinytheme_dark.svg
index 15c45365..e529c236 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dark.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dark.svg
@@ -26,85 +26,85 @@
-
-
-factor(am)
-0
-1
-tinytheme("dark")
+
+
+factor(am)
+0
+1
+tinytheme("dark")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
50
100
-150
+150
200
-250
-300
-10
-15
-20
-25
-30
+250
+300
+10
+15
+20
+25
+30
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic.svg
new file mode 100644
index 00000000..6451150f
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic.svg
@@ -0,0 +1,113 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_boxplot_flip.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_boxplot_flip.svg
index 5c9c39f4..79bdee34 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_boxplot_flip.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_boxplot_flip.svg
@@ -26,23 +26,23 @@
-Flipped boxplot version
-Dynamic plot adjustment and whitespace reduction
-weight
-feed
-
-
-
-
-
-
-
-casein
-horsebean
-linseed
-meatmeal
-soybean
-sunflower
+Flipped boxplot version
+Dynamic plot adjustment and whitespace reduction
+weight
+feed
+
+
+
+
+
+
+
+casein
+horsebean
+linseed
+meatmeal
+soybean
+sunflower
@@ -58,72 +58,72 @@
300
350
400
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean.svg
index 4784c827..9071cf55 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean.svg
@@ -26,231 +26,231 @@
-
-
-
-Species
-setosa
-versicolor
-virginica
-For themes with las = 1, etc.
+
+
+
+Species
+setosa
+versicolor
+virginica
+For themes with las = 1, etc.
-
-
+
+
-
-Dynamic plot adjustment and whitespace reduction
-Petal.Length
-I(Sepal.Length * 1e+09)
+
+Dynamic plot adjustment and whitespace reduction
+Petal.Length
+I(Sepal.Length * 1e+09)
-
+
-
-
-
-
-
-
+
+
+
+
+
+
1
-2
-3
-4
-5
-6
-7
-
-
-
-
-
-
-
-
-
-4.5e+09
-5.0e+09
-5.5e+09
-6.0e+09
-6.5e+09
-7.0e+09
-7.5e+09
-8.0e+09
-
+2
+3
+4
+5
+6
+7
+
+
+
+
+
+
+
+
+
+4.5e+09
+5.0e+09
+5.5e+09
+6.0e+09
+6.5e+09
+7.0e+09
+7.5e+09
+8.0e+09
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_facet.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_facet.svg
index d8545ef9..597fadf2 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_facet.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_facet.svg
@@ -26,370 +26,370 @@
-
- 100
- 200
- 300
- 400
-- -
-- -
-- -
-- -
-disp
-Works with facets too
+
+ 100
+ 200
+ 300
+ 400
+- -
+- -
+- -
+- -
+disp
+Works with facets too
-
-
+
+
-
-Dynamic plot adjustment and whitespace reduction
-I(hp * 100)
-I(mpg * 1000)
+
+Dynamic plot adjustment and whitespace reduction
+I(hp * 100)
+I(mpg * 1000)
-
-
+
+
-
+
-
-
-
-
-
-
-
-5000
-10000
-15000
-20000
-25000
-30000
-
-
-
-
-
-
-10000
-15000
-20000
-25000
-30000
-
-0
-
+
+
+
+
+
+
+
+5000
+10000
+15000
+20000
+25000
+30000
+
+
+
+
+
+
+10000
+15000
+20000
+25000
+30000
+
+0
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-5000
-10000
-15000
-20000
-25000
-30000
-
-
-
-
-
-
-10000
-15000
-20000
-25000
-30000
-
-1
-
-4
-
+
+
+
+
+
+
+
+5000
+10000
+15000
+20000
+25000
+30000
+
+
+
+
+
+
+10000
+15000
+20000
+25000
+30000
+
+1
+
+4
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-5000
-10000
-15000
-20000
-25000
-30000
-
-
-
-
-
-
-10000
-15000
-20000
-25000
-30000
-
+
+
+
+
+
+
+
+5000
+10000
+15000
+20000
+25000
+30000
+
+
+
+
+
+
+10000
+15000
+20000
+25000
+30000
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-5000
-10000
-15000
-20000
-25000
-30000
-
-
-
-
-
-
-10000
-15000
-20000
-25000
-30000
-
-6
-
+
+
+
+
+
+
+
+5000
+10000
+15000
+20000
+25000
+30000
+
+
+
+
+
+
+10000
+15000
+20000
+25000
+30000
+
+6
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
5000
-10000
-15000
-20000
-25000
-30000
-
-
-
-
-
-
-10000
-15000
-20000
-25000
-30000
-
+10000
+15000
+20000
+25000
+30000
+
+
+
+
+
+
+10000
+15000
+20000
+25000
+30000
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-5000
-10000
-15000
-20000
-25000
-30000
-
-
-
-
-
-
-10000
-15000
-20000
-25000
-30000
-
-8
-
+
+
+
+
+
+
+
+5000
+10000
+15000
+20000
+25000
+30000
+
+
+
+
+
+
+10000
+15000
+20000
+25000
+30000
+
+8
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_spineplot.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_spineplot.svg
index cde4452b..c2d285c7 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_spineplot.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_clean_spineplot.svg
@@ -26,65 +26,65 @@
-Spineplot version
-Dynamic plot adjustment and whitespace reduction
-Petal.Length
-Species
+Spineplot version
+Dynamic plot adjustment and whitespace reduction
+Petal.Length
+Species
-
-
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -110,23 +110,23 @@
5.5
6
7
-virginica
-versicolor
-setosa
-
+virginica
+versicolor
+setosa
+
-
-
-
-
-
+
+
+
+
+
0.0
-0.2
-0.4
-0.6
-0.8
-1.0
-
+0.2
+0.4
+0.6
+0.8
+1.0
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark.svg
index 698e59e9..afecad7e 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark.svg
@@ -26,213 +26,213 @@
-
-
-
-Species
-setosa
-versicolor
-virginica
-For themes with las = 1, etc.
+
+
+
+Species
+setosa
+versicolor
+virginica
+For themes with las = 1, etc.
-
-
+
+
-
-Dynamic plot adjustment and whitespace reduction
-Petal.Length
-I(Sepal.Length * 1e+09)
+
+Dynamic plot adjustment and whitespace reduction
+Petal.Length
+I(Sepal.Length * 1e+09)
1
-2
-3
-4
-5
-6
-7
-4.5e+09
-5.0e+09
-5.5e+09
-6.0e+09
-6.5e+09
-7.0e+09
-7.5e+09
-8.0e+09
+2
+3
+4
+5
+6
+7
+4.5e+09
+5.0e+09
+5.5e+09
+6.0e+09
+6.5e+09
+7.0e+09
+7.5e+09
+8.0e+09
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark_facet.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark_facet.svg
index f2b84c43..7f78a655 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark_facet.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dark_facet.svg
@@ -26,247 +26,247 @@
-
- 100
- 200
- 300
- 400
-- -
-- -
-- -
-- -
-disp
-Works with facets too
+
+ 100
+ 200
+ 300
+ 400
+- -
+- -
+- -
+- -
+disp
+Works with facets too
-
-
+
+
-
-Dynamic plot adjustment and whitespace reduction
-I(hp * 100)
-I(mpg * 1000)
+
+Dynamic plot adjustment and whitespace reduction
+I(hp * 100)
+I(mpg * 1000)
-
-
+
+
-
+
-10000
-15000
-20000
-25000
-30000
-
-0
+10000
+15000
+20000
+25000
+30000
+
+0
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-1
-
-4
+
+1
+
+4
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-10000
-15000
-20000
-25000
-30000
+10000
+15000
+20000
+25000
+30000
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-6
+
+6
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
5000
-10000
-15000
-20000
-25000
-30000
-10000
-15000
-20000
-25000
-30000
+10000
+15000
+20000
+25000
+30000
+10000
+15000
+20000
+25000
+30000
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-5000
-10000
-15000
-20000
-25000
-30000
-
-8
+5000
+10000
+15000
+20000
+25000
+30000
+
+8
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dynamic.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dynamic.svg
new file mode 100644
index 00000000..1850ee5e
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_dynamic.svg
@@ -0,0 +1,241 @@
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_jitter_flip.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_jitter_flip.svg
index 28b52e18..e64cbd3c 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_jitter_flip.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_jitter_flip.svg
@@ -26,10 +26,10 @@
-Flipped jitter plot version
-Dynamic plot adjustment and whitespace reduction
-weight
-feed
+Flipped jitter plot version
+Dynamic plot adjustment and whitespace reduction
+weight
+feed
@@ -45,111 +45,111 @@
300
350
400
-
-
-
-
-
-
-
-casein
-horsebean
-linseed
-meatmeal
-soybean
-sunflower
-
+
+
+
+
+
+
+
+casein
+horsebean
+linseed
+meatmeal
+soybean
+sunflower
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_ridge.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_ridge.svg
index 907a0c4f..4ea57844 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_ridge.svg
@@ -26,10 +26,10 @@
-Ridge plot version
-Dynamic plot adjustment and whitespace reduction
-Petal.Length
-Species
+Ridge plot version
+Dynamic plot adjustment and whitespace reduction
+Petal.Length
+Species
@@ -45,32 +45,32 @@
5
6
7
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-setosa
-versicolor
-virginica
+
+
+
+
+setosa
+versicolor
+virginica
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_x_boxplot.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_x_boxplot.svg
index 4e5fac5e..bcf23ce9 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_x_boxplot.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_x_boxplot.svg
@@ -26,10 +26,10 @@
-Works for perpendicular x-axis labels too
-Dynamic plot adjustment and whitespace reduction
-feed
-weight
+Works for perpendicular x-axis labels too
+Dynamic plot adjustment and whitespace reduction
+feed
+weight
@@ -43,87 +43,87 @@
meatmeal
soybean
sunflower
-
-
-
-
-
-
-
-
-100
-150
-200
-250
-300
-350
-400
-
+
+
+
+
+
+
+
+
+100
+150
+200
+250
+300
+350
+400
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_yaxl.svg b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_yaxl.svg
index 67e97d5a..a99ea0d4 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_dynamic_yaxl.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_dynamic_yaxl.svg
@@ -26,8 +26,8 @@
-treatment
-I(decrease/100)
+treatment
+I(decrease/100)
@@ -45,99 +45,99 @@
F
G
H
-
-
-
-
-
-
-
-
-0%
-20%
-40%
-60%
-80%
-100%
-120%
-
+
+
+
+
+
+
+
+
+0%
+20%
+40%
+60%
+80%
+100%
+120%
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral.svg b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral.svg
index 11d81648..9b3a4897 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_ephemeral.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_ephemeral.svg
@@ -33,9 +33,9 @@
-Ephemeral theme
-Petal.Length
-Sepal.Length
+Ephemeral theme
+Petal.Length
+Sepal.Length
@@ -53,202 +53,202 @@
5
6
7
-
-
-
-
-
-
-
-
-
-4.5
-5.0
-5.5
-6.0
-6.5
-7.0
-7.5
-8.0
-
+
+
+
+
+
+
+
+
+
+4.5
+5.0
+5.5
+6.0
+6.5
+7.0
+7.5
+8.0
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ipsum.svg b/inst/tinytest/_tinysnapshot/tinytheme_ipsum.svg
index 099ac8be..9b74daa3 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_ipsum.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_ipsum.svg
@@ -26,85 +26,85 @@
-
-
-factor(am)
-0
-1
-tinytheme("ipsum")
+
+
+factor(am)
+0
+1
+tinytheme("ipsum")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
50
100
-150
+150
200
-250
-300
-10
-15
-20
-25
-30
+250
+300
+10
+15
+20
+25
+30
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_legend_bottom.svg b/inst/tinytest/_tinysnapshot/tinytheme_legend_bottom.svg
index 3e2ce5de..c0794510 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_legend_bottom.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_legend_bottom.svg
@@ -26,99 +26,99 @@
-
-
-factor(am)
-0
-1
-tinytheme("clean") + legend = "bottom!"
+
+
+factor(am)
+0
+1
+tinytheme("clean") + legend = "bottom!"
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
-
-
-
-
-
-
-
-50
-100
-150
-200
-250
-300
-
-
-
-
-
-
-10
-15
-20
-25
-30
-
+
+
+
+
+
+
+
+50
+100
+150
+200
+250
+300
+
+
+
+
+
+
+10
+15
+20
+25
+30
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_legend_left.svg b/inst/tinytest/_tinysnapshot/tinytheme_legend_left.svg
index 570e1273..be9bad4c 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_legend_left.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_legend_left.svg
@@ -26,99 +26,99 @@
-
-
-factor(am)
-0
-1
-tinytheme("clean") + legend = "left!"
+
+
+factor(am)
+0
+1
+tinytheme("clean") + legend = "left!"
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
-
-
-
-
-
-
-
-50
-100
-150
-200
-250
-300
-
-
-
-
-
-
-10
-15
-20
-25
-30
-
+
+
+
+
+
+
+
+50
+100
+150
+200
+250
+300
+
+
+
+
+
+
+10
+15
+20
+25
+30
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_minimal.svg b/inst/tinytest/_tinysnapshot/tinytheme_minimal.svg
index ce968468..0e81523f 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_minimal.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_minimal.svg
@@ -26,85 +26,85 @@
-
-
-factor(am)
-0
-1
-tinytheme("minimal")
+
+
+factor(am)
+0
+1
+tinytheme("minimal")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
50
100
-150
+150
200
-250
-300
-10
-15
-20
-25
-30
+250
+300
+10
+15
+20
+25
+30
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ridge.svg b/inst/tinytest/_tinysnapshot/tinytheme_ridge.svg
index 8134008a..15805627 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_ridge.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_ridge.svg
@@ -26,88 +26,88 @@
-
-
-factor(am)
-0
-1
-tinytheme("ridge")
+
+
+factor(am)
+0
+1
+tinytheme("ridge")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
-
+
-
+
-
-
+
+
50
100
-150
+150
200
-250
-300
-
-
-
-
-
-
-10
-15
-20
-25
-30
-
+250
+300
+
+
+
+
+
+
+10
+15
+20
+25
+30
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_ridge2.svg b/inst/tinytest/_tinysnapshot/tinytheme_ridge2.svg
index 5856a7a9..9d3c4f7c 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_ridge2.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_ridge2.svg
@@ -26,74 +26,74 @@
-
-
-factor(am)
-0
-1
-tinytheme("ridge2")
+
+
+factor(am)
+0
+1
+tinytheme("ridge2")
-
-
+
+
-
-Title of the plot
-hp
-mpg
+
+Title of the plot
+hp
+mpg
50
100
-150
+150
200
-250
-300
-10
-15
-20
-25
-30
+250
+300
+10
+15
+20
+25
+30
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_tufte.svg b/inst/tinytest/_tinysnapshot/tinytheme_tufte.svg
index 9800d7d5..faa6f3d7 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_tufte.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_tufte.svg
@@ -31,7 +31,7 @@
factor(am)
0
1
-tinytheme("tufte")
+tinytheme("tufte")
@@ -39,7 +39,7 @@
-Title of the plot
+Title of the plot
hp
mpg
diff --git a/inst/tinytest/_tinysnapshot/tinytheme_void.svg b/inst/tinytest/_tinysnapshot/tinytheme_void.svg
index 14683c3d..bf1366fd 100644
--- a/inst/tinytest/_tinysnapshot/tinytheme_void.svg
+++ b/inst/tinytest/_tinysnapshot/tinytheme_void.svg
@@ -31,7 +31,7 @@
factor(am)
0
1
-tinytheme("void")
+tinytheme("void")
@@ -39,7 +39,7 @@
-Title of the plot
+Title of the plot
hp
mpg
diff --git a/inst/tinytest/test-margins.R b/inst/tinytest/test-margins.R
new file mode 100644
index 00000000..8f56e59d
--- /dev/null
+++ b/inst/tinytest/test-margins.R
@@ -0,0 +1,86 @@
+source("helpers.R")
+using("tinysnapshot")
+
+# Missing labels should reclaim margin space under dynmar themes.
+f = function() {
+ tinyplot(1:10, 1:10, xlab = NA, ylab = NA, main = NA, theme = "clean")
+}
+expect_snapshot_plot(f, label = "margins_missing_labels")
+
+# Multi-line annotation strings should increase margins as needed.
+f = function() {
+ tinyplot(
+ 1000:1010,
+ xlab = "xlab 1\nxlab 2", ylab = "ylab 1\nylab 2",
+ main = "main 1\nmain 2", sub = "sub 1\nsub 2",
+ theme = "clean"
+ )
+}
+expect_snapshot_plot(f, label = "margins_multiline_labels")
+
+# Faceted path should also handle multi-line annotation strings.
+f = function() {
+ tinyplot(
+ mpg ~ wt | cyl, data = mtcars,
+ xlab = "Weight\n(1000 lbs)",
+ theme = "clean"
+ )
+}
+expect_snapshot_plot(f, label = "margins_facet_multiline")
+
+# sub = NA should not reserve extra bottom legend space.
+f = function() {
+ tinytheme("clean", side.sub = 1)
+ tinyplot(mpg ~ wt | factor(cyl), data = mtcars, legend = "bottom!", sub = NA)
+ tinytheme()
+}
+expect_snapshot_plot(f, label = "margins_sub_na_bottom_legend")
+
+# 2x2 layout from reprex should handle mixed single/multiline labels.
+f = function() {
+ tinytheme("clean")
+ on.exit(tinytheme(), add = TRUE)
+
+ set.seed(1)
+ x = 1:20
+ y = x + stats::rnorm(length(x), sd = 2)
+
+ op = par(mfrow = c(2, 2))
+ on.exit(par(op), add = TRUE)
+
+ tinyplot(x, y, main = "xlab = NA", xlab = NA, ylab = "Y")
+ tinyplot(x, y, main = "xlab present", xlab = "X", ylab = "Y")
+ tinyplot(x, y, main = "Multi-line labels",
+ xlab = "X line 1\nX line 2", ylab = "Y line 1\nY line 2")
+ tinyplot(x, y, main = "Multi-line\nmain title", xlab = "X", ylab = "Y")
+}
+expect_snapshot_plot(f, label = "margins_multiline_2x2")
+
+get_plot_mar = function(...) {
+ op = par(no.readonly = TRUE)
+ on.exit(par(op), add = TRUE)
+ tinyplot(...)
+ par("mar")
+}
+
+expect_true(
+ {
+ tinytheme("clean")
+ on.exit(tinytheme(), add = TRUE)
+ mar_with_xlab = get_plot_mar(1:10, 1:10, xlab = "X")
+ mar_without_xlab = get_plot_mar(1:10, 1:10, xlab = NA)
+ mar_without_xlab[1] < mar_with_xlab[1]
+ },
+ info = "bottom_margin_shrinks_when_xlab_missing"
+)
+
+expect_true(
+ {
+ tinytheme("clean")
+ on.exit(tinytheme(), add = TRUE)
+ mar_single_xlab = get_plot_mar(1:10, 1:10, xlab = "X")
+ mar_multiline_xlab = get_plot_mar(1:10, 1:10, xlab = "X\nY")
+ mar_multiline_xlab[1] > mar_single_xlab[1]
+ },
+ info = "bottom_margin_grows_for_multiline_xlab"
+)
diff --git a/inst/tinytest/test-tinytheme.R b/inst/tinytest/test-tinytheme.R
index d58f171d..f71f8338 100644
--- a/inst/tinytest/test-tinytheme.R
+++ b/inst/tinytest/test-tinytheme.R
@@ -53,6 +53,10 @@ f = function() {
)
}
+tinytheme("dynamic")
+f()
+expect_snapshot_plot(f, label = "tinytheme_dynamic_dynamic")
+
tinytheme("clean")
f()
expect_snapshot_plot(f, label = "tinytheme_dynamic_clean")
diff --git a/man/facet.Rd b/man/facet.Rd
index 0c226cb7..bd5f864a 100644
--- a/man/facet.Rd
+++ b/man/facet.Rd
@@ -47,14 +47,19 @@ draw_facet_window(
draw,
grid,
has_legend,
+ main,
+ sub,
type,
+ xlab,
x,
xmax,
xmin,
+ ylab,
y,
ymax,
ymin,
- tpars = NULL
+ tpars = NULL,
+ dynmar_computed = NULL
)
facet_layout(settings)
diff --git a/man/tinytheme.Rd b/man/tinytheme.Rd
index a8906549..85a93a1f 100644
--- a/man/tinytheme.Rd
+++ b/man/tinytheme.Rd
@@ -5,8 +5,8 @@
\title{Set or Reset Plot Themes for \code{tinyplot}}
\usage{
tinytheme(
- theme = c("default", "basic", "clean", "clean2", "bw", "classic", "minimal", "ipsum",
- "dark", "ridge", "ridge2", "tufte", "void"),
+ theme = c("default", "basic", "dynamic", "clean", "clean2", "bw", "classic", "minimal",
+ "ipsum", "dark", "ridge", "ridge2", "tufte", "void"),
...
)
}
@@ -20,9 +20,10 @@ dynamic plots are marked with an asterisk (*) below.
\itemize{
\item \code{"default"}: inherits the user's default base graphics settings.
\item \code{"basic"}: light modification of \code{"default"}, only adding filled points, a panel background grid, and light gray background to facet titles.
-\item \code{"clean"} (*): builds on \code{"basic"} by moving the subtitle above the plotting area, adding horizontal axis labels, employing tighter default plot margins and title gaps to reduce whitespace, and setting different default palettes ("Tableau 10" for discrete colors and "agSunset" for gradient colors). The first of our dynamic themes and the foundation for several derivative themes that follow below.
+\item \code{"dynamic"} (*): builds on \code{"basic"} by enabling dynamic margin adjustment with tighter default margins, horizontal axis labels, and the subtitle moved above the plotting area. Turns off the panel grid. Provides the foundation for all other dynamic themes and is a good starting point for users who wish to build custom dynamic themes.
+\item \code{"clean"} (*): builds on \code{"dynamic"} by re-enabling the panel background grid and setting different default palettes ("Tableau 10" for discrete colors and "agSunset" for gradient colors).
\item \code{"clean2"} (*): removes the plot frame (box) from \code{"clean"}.
-\item \code{"classic"} (*): connects the axes in a L-shape, but removes the other top and right-hand edges of the plot frame (box). Also sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the \strong{ggplot2} theme of the same name.
+\item \code{"classic"} (*): builds on \code{"dynamic"} with L-shaped axes (removing the top and right-hand edges of the plot frame). Also sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the \strong{ggplot2} theme of the same name.
\item \code{"bw"} (*): similar to \code{"clean"}, except uses thinner lines for the plot frame (box), solid grid lines, and sets the "Okabe-Ito" palette as a default for discrete colors. Inspired by the \strong{ggplot2} theme of the same name.
\item \code{"minimal"} (*): removes the plot frame (box) from \code{"bw"}, as well as the background for facet titles. Inspired by the \strong{ggplot2} theme of the same name.
\item \code{"ipsum"} (*): similar to \code{"minimal"}, except subtitle is italicised and axes titles are aligned to the far edges. Inspired by the \strong{hrbrthemes} theme of the same name for \strong{ggplot2}.
@@ -64,8 +65,6 @@ behaviour to our GitHub repo:
Known current limitations include:
\itemize{
\item Themes do not work well when \code{legend = "top!"}.
-\item Dynamic margin spacing does not account for multi-line strings (e.g., axes
-or main titles that contain "\\n").
}
}
\examples{