diff --git a/NEWS.md b/NEWS.md
index 2b17aaa9..3c854978 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -8,7 +8,11 @@ where the formatting is also better._
 
 New features:
 
-- Support for `type = "n"` (empty) plots. (#157 @grantmcdermott)
+- Support for additional plot types:
+  - `type = "n"`, i.e. empty plot. (#157 @grantmcdermott)
+  - `type = "boxplot"`. Simultaneously enables `plt(numeric ~ factor)`
+  support, first raised in #2, so that a boxplot is automatically plotted if a
+  numeric is plotted against a factor. (#154 @grantmcdermott)
 
 Misc:
 
diff --git a/R/by_aesthetics.R b/R/by_aesthetics.R
index 0afda208..8025463f 100755
--- a/R/by_aesthetics.R
+++ b/R/by_aesthetics.R
@@ -127,7 +127,7 @@ by_col = function(ngrps = 1L, col = NULL, palette = NULL, gradient = NULL, order
 by_pch = function(ngrps, type, pch=NULL) {
   
   no_pch = FALSE
-  if (!type %in% c("p", "b", "o", "pointrange", "errorbar")) {
+  if (!type %in% c("p", "b", "o", "pointrange", "errorbar", "boxplot")) {
     no_pch = TRUE
     pch = NULL
     
@@ -167,7 +167,7 @@ by_pch = function(ngrps, type, pch=NULL) {
 by_lty = function(ngrps, type, lty=NULL) {
 
   # We only care about line types, otherwise return NULL
-  if (!type %in% c("l", "b", "o", "c", "h", "s", "S", "ribbon")) {
+  if (!type %in% c("l", "b", "o", "c", "h", "s", "S", "ribbon", "boxplot")) {
     out = NULL
     
     # special "by" convenience keyword
@@ -198,7 +198,11 @@ by_lty = function(ngrps, type, lty=NULL) {
     
     # NULL -> solid (or default) line
   } else if (is.null(lty)) {
-    out = rep(par("lty"), ngrps)
+    if (type == "boxplot") {
+      out = NULL
+    } else {
+      out = rep(par("lty"), ngrps)
+    }
   
   # atomic vector: sanity check length
   } else if (is.atomic(lty) && is.vector(lty)) {
diff --git a/R/draw_legend.R b/R/draw_legend.R
index 0daafd96..44558138 100644
--- a/R/draw_legend.R
+++ b/R/draw_legend.R
@@ -166,10 +166,10 @@ draw_legend = function(
   ) {
     legend_args[["pt.cex"]] = cex
   }
-  if (type %in% c("ribbon", "polygon") || isTRUE(gradient)) {
-    if (is.null(legend_args[["pch"]])) legend_args[["pch"]] = 22
+  if (type %in% c("ribbon", "polygon", "boxplot") || isTRUE(gradient)) {
+    legend_args[["pch"]] = 22
     if (is.null(legend_args[["pt.cex"]])) legend_args[["pt.cex"]] = 3.5
-    if (is.null(legend_args[["pt.lwd"]]) && (!is.null(type) && type != "polygon")) {
+    if (is.null(legend_args[["pt.lwd"]]) && (!is.null(type) && !(type %in% c("polygon", "boxplot")))) {
       legend_args[["pt.lwd"]] = 0
     }
     if (is.null(legend_args[["y.intersp"]])) legend_args[["y.intersp"]] = 1.25
diff --git a/R/tinyplot.R b/R/tinyplot.R
index d5908ac3..1293627e 100644
--- a/R/tinyplot.R
+++ b/R/tinyplot.R
@@ -73,10 +73,11 @@
 #'   lines, "o" for overplotted points and lines, "s" and "S" for stair steps,
 #'   and "h" for histogram-like vertical lines. Specifying "n" produces an empty
 #'   plot over the extent of the data, but with no internal elements.
-#'   - Additional tinyplot types: "density" for densities, "polygon" for
-#'   polygons,  "pointrange" or "errorbar" for segment intervals, and "polygon",
-#'   "ribbon" or "area" for polygon intervals (where area plots are a special
-#'   case of ribbon plots with `ymin` set to 0 and `ymax` set to `y`; see below).
+#'   - Additional tinyplot types: "boxplot" for boxplots, "density" for
+#'   densities,  "pointrange" or "errorbar" for segment intervals, and
+#'   "polygon", "ribbon" or "area" for polygon intervals (where area plots are a
+#'   special case of ribbon plots with `ymin` set to 0 and `ymax` set to `y`;
+#'   see below).
 #' @param xlim the x limits (x1, x2) of the plot. Note that x1 > x2 is allowed
 #'   and leads to a ‘reversed axis’. The default value, NULL, indicates that
 #'   the range of the `finite` values to be plotted should be used.
@@ -565,15 +566,22 @@ tinyplot.default = function(
   }
   by_dep = deparse1(substitute(by))
   facet_dep = deparse1(substitute(facet))
+  facet_by = FALSE
   if (!is.null(facet) && length(facet)==1 && facet=="by") {
     by = as.factor(by) ## if by==facet, then both need to be factors
     facet = by
+    facet_by = TRUE
   } else if (!is.null(facet) && inherits(facet, "formula")) {
     facet = get_facet_fml(facet, data = data)
     if (isTRUE(attr(facet, "facet_grid"))) {
       facet.args[["nrow"]] = attr(facet, "facet_nrow")
     }
   }
+  
+  # enforce boxplot type for y ~ factor(x)
+  if (is.factor(x) && !is.factor(y)) {
+    type = "boxplot"
+  }
 
   ## Catch for density type: recycle through plot.density
   if (type == "density") {
@@ -635,18 +643,23 @@ tinyplot.default = function(
   }
 
   xlabs = NULL
-  if (type %in% c("pointrange", "errorbar", "ribbon")) {
+  if (type == "boxplot") x = as.factor(x)
+  if (type %in% c("pointrange", "errorbar", "ribbon", "boxplot")) {
     if (is.character(x)) x = as.factor(x)
     if (is.factor(x)) {
-      ## Need to maintain order that was observed in the original data
-      ## (i.e., no new sorting by factor)
-      xlvls = unique(x)
-      x = factor(x, levels = xlvls)
+      ## For non-boxplots... Need to maintain order that was observed in the
+      ## original data (i.e., no new sorting by factor)
+      if (type != "boxplot") {
+        xlvls = unique(x)
+        x = factor(x, levels = xlvls)
+      } else {
+        xlvls = levels(x)
+      }
       xlabs = seq_along(xlvls)
       names(xlabs) = xlvls
       x = as.integer(x)
     }
-    if (type == "ribbon") {
+    if (type %in% c("ribbon", "boxplot")) {
       if (is.null(by) && is.null(facet)) {
         xord = order(x) 
       } else if (is.null(facet)) {
@@ -679,10 +692,20 @@ tinyplot.default = function(
   if (!is.null(ymin)) ylim[1] = min(c(ylim, ymin))
   if (!is.null(ymax)) ylim[2] = max(c(ylim, ymax))
 
+  if (type=="boxplot") {
+    xlim = xlim + c(-0.5, 0.5)
+    if (is.null(by) && is.null(palette)) {
+      if (is.null(col)) col = par("fg")
+      if (is.null(bg) && is.null(fill)) bg = "lightgray"
+    } else {
+      fill = bg = "by"
+    }
+  }
+  
   by_ordered = FALSE
   by_continuous = !is.null(by) && inherits(by, c("numeric", "integer"))
   # manual overrides with warning
-  if (isTRUE(by_continuous) && type %in% c("l", "b", "o", "ribbon", "polygon")) {
+  if (isTRUE(by_continuous) && type %in% c("l", "b", "o", "ribbon", "polygon", "boxplot")) {
     warning("\nContinuous legends not supported for this plot type. Reverting to discrete legend.")
     by_continuous = FALSE
   } else if (!is.null(by)){
@@ -734,7 +757,7 @@ tinyplot.default = function(
   } else if (length(bg) != ngrps) {
     bg = rep(bg, ngrps)
   }
-  if (type == "ribbon") {
+  if (type == "ribbon" || (type == "boxplot" && !is.null(by)) ) {
     if (is.null(ribbon.alpha)) ribbon.alpha = .tpar[["ribbon.alpha"]]
     if (!is.null(bg)) {
       bg = adjustcolor(bg, ribbon.alpha)
@@ -1077,32 +1100,50 @@ tinyplot.default = function(
       ## Solution: Only pass on relevant args using name checking and do.call.
       ## Idea borrowed from here: https://stackoverflow.com/a/4128401/4115816
       pdots = dots[names(dots) %in% names(formals(plot.default))]
-      do.call(
-        "plot.window",
-        c(list(xlim = xlim, ylim = ylim, asp = asp, log = log), pdots)
-      )
+      ## catch for flipped boxplots...
+      if (type=="boxplot" && isTRUE(dots[["horizontal"]])) { 
+        log_flip = log
+        if (!is.null(log)) {
+          if (log=="x") log_flip = "y"
+          if (log=="y") log_flip = "x"
+        }
+        do.call(
+          "plot.window",
+          c(list(xlim = ylim, ylim = xlim, asp = asp, log = log_flip), pdots)
+        )
+        xside = 2
+        yside = 1
+      } else {
+        ## ... standard plot window for all other cases
+        do.call(
+          "plot.window",
+          c(list(xlim = xlim, ylim = ylim, asp = asp, log = log), pdots)
+        )
+        xside = 1
+        yside = 2
+      }
       
       # axes, plot.frame and grid
       if (isTRUE(axes)) {
         if (isTRUE(frame.plot)) {
           # if plot frame is true then print axes per normal...
-          if (type %in% c("pointrange", "errorbar", "ribbon") && !is.null(xlabs)) {
-            Axis(x, side = 1, at = xlabs, labels = names(xlabs))
+          if (type %in% c("pointrange", "errorbar", "ribbon", "boxplot") && !is.null(xlabs)) {
+            Axis(x, side = xside, at = xlabs, labels = names(xlabs))
           } else {
-            Axis(x, side = 1)
+            Axis(x, side = xside)
           }
-          Axis(y, side = 2)
+          Axis(y, side = yside)
         } else {
           # ... else only print the "outside" axes.
           if (ii %in% oxaxis) {
-            if (type %in% c("pointrange", "errorbar", "ribbon") && !is.null(xlabs)) {
-              Axis(x, side = 1, at = xlabs, labels = names(xlabs))
+            if (type %in% c("pointrange", "errorbar", "ribbon", "boxplot") && !is.null(xlabs)) {
+              Axis(x, side = xside, at = xlabs, labels = names(xlabs))
             } else {
-              Axis(x, side = 1)
+              Axis(x, side = xside)
             }
           }
           if (ii %in% oyaxis) {
-            Axis(y, side = 2)
+            Axis(y, side = yside)
           }
         }
       }
@@ -1297,20 +1338,25 @@ tinyplot.default = function(
         par(mfg = c(mfgi, mfgj)) 
       }
       
+      # empty plot flag
+      empty_plot = FALSE
+      if (type=="n" || length(xx)==0) {
+        empty_plot = TRUE
+      }
+      
       # Draw the individual plot elements...
       
-      ## polygons before lines
-      if (type == "ribbon") {
+      ## polygons before lines, segments/arrows before points, etc.
+      if (isTRUE(empty_plot)) {
+        
+      } else if (type == "ribbon") {
         polygon(
           x = c(xx, rev(xx)),
           y = c(yymin, rev(yymax)),
           col = bg[i],
           border = FALSE
         )
-      }
-      
-      ## segments/arrows before points
-      if (type == "pointrange") {
+      } else if (type == "pointrange") {
         segments(
           x0 = xx,
           y0 = yymin,
@@ -1320,8 +1366,7 @@ tinyplot.default = function(
           # lty = ilty,
           lwd = ilwd
         )
-      }
-      if (type == "errorbar") {
+      } else if (type == "errorbar") {
         arrows(
           x0 = xx,
           y0 = yymin,
@@ -1336,8 +1381,10 @@ tinyplot.default = function(
         )
       }
       
-      ## now draw the points/lines
-      if (type %in% c("p", "pointrange", "errorbar")) {
+      ## now draw the points/lines/polygons/etc
+      if (isTRUE(empty_plot)) {
+        # empty plot
+      } else if (type %in% c("p", "pointrange", "errorbar")) {
         points(
           x = xx,
           y = yy,
@@ -1372,8 +1419,30 @@ tinyplot.default = function(
           lty = ilty,
           lwd = ilwd
         )
-      } else if (type == "n") {
-        # Blank plot
+      } else if (type == "boxplot") {
+        horizontal = ifelse(!is.null(dots[["horizontal"]]), dots[["horizontal"]], FALSE)
+        boxwex_xx = ifelse(!is.null(dots[["boxwex"]]), dots[["boxwex"]], 0.8)
+        staplewex_xx = ifelse(!is.null(dots[["staplewex"]]), dots[["staplewex"]], 0.5)
+        outwex_xx = ifelse(!is.null(dots[["outwex"]]), dots[["outwex"]], 0.5)
+        at_xx = unique(xx)
+        if (!is.null(by) && isFALSE(facet_by) && length(split_data)>1) {
+          boxwex_xx_orig = boxwex_xx
+          boxwex_xx = boxwex_xx / length(split_data) - 0.01
+          at_xx = at_xx + seq(-((boxwex_xx_orig-boxwex_xx)/2), ((boxwex_xx_orig-boxwex_xx)/2), length.out = length(split_data))[i]
+        }
+        boxplot(
+          formula = yy ~ xx,
+          pch = ipch,
+          lty = ilty,
+          border = icol,
+          col =  ibg,
+          add = TRUE, axes = FALSE,
+          horizontal = horizontal,
+          at = at_xx,
+          boxwex = boxwex_xx,
+          staplewex = staplewex_xx,
+          outwex = outwex_xx
+        )
       } else {
         stop("`type` argument not supported.", call. = FALSE)
       }
diff --git a/inst/tinytest/_tinysnapshot/boxplot_auto_factor.svg b/inst/tinytest/_tinysnapshot/boxplot_auto_factor.svg
new file mode 100644
index 00000000..78ac0aae
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_auto_factor.svg
@@ -0,0 +1,65 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<text x='266.40' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='54.68px' lengthAdjust='spacingAndGlyphs'>factor(am)</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='23.35px' lengthAdjust='spacingAndGlyphs'>mpg</text>
+<line x1='170.40' y1='430.56' x2='362.40' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='170.40' y1='430.56' x2='170.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='362.40' y1='430.56' x2='362.40' y2='437.76' style='stroke-width: 0.75;' />
+<text x='170.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='362.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<line x1='59.04' y1='422.66' x2='59.04' y2='129.89' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='422.66' x2='51.84' y2='422.66' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='349.46' x2='51.84' y2='349.46' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='276.27' x2='51.84' y2='276.27' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='203.08' x2='51.84' y2='203.08' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='129.89' x2='51.84' y2='129.89' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,422.66) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text transform='translate(41.76,349.46) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text transform='translate(41.76,276.27) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text transform='translate(41.76,203.08) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text transform='translate(41.76,129.89) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>30</text>
+<polygon points='59.04,430.56 473.76,430.56 473.76,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='414.72' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng==)'>
+<polygon points='93.60,350.20 247.20,350.20 247.20,287.98 93.60,287.98 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='93.60' y1='315.80' x2='247.20' y2='315.80' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='170.40' y1='416.80' x2='170.40' y2='350.20' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='170.40' y1='211.86' x2='170.40' y2='287.98' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='132.00' y1='416.80' x2='208.80' y2='416.80' style='stroke-width: 0.75;' />
+<line x1='132.00' y1='211.86' x2='208.80' y2='211.86' style='stroke-width: 0.75;' />
+<polygon points='93.60,350.20 247.20,350.20 247.20,287.98 93.60,287.98 ' style='stroke-width: 0.75;' />
+<polygon points='285.60,261.63 439.20,261.63 439.20,124.03 285.60,124.03 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='285.60' y1='235.29' x2='439.20' y2='235.29' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='362.40' y1='349.46' x2='362.40' y2='261.63' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='362.40' y1='72.80' x2='362.40' y2='124.03' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='324.00' y1='349.46' x2='400.80' y2='349.46' style='stroke-width: 0.75;' />
+<line x1='324.00' y1='72.80' x2='400.80' y2='72.80' style='stroke-width: 0.75;' />
+<polygon points='285.60,261.63 439.20,261.63 439.20,124.03 285.60,124.03 ' style='stroke-width: 0.75;' />
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_facet_by.svg b/inst/tinytest/_tinysnapshot/boxplot_facet_by.svg
new file mode 100644
index 00000000..6bf0618a
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_facet_by.svg
@@ -0,0 +1,621 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<rect x='471.31' y='218.43' width='16.75' height='16.75' style='stroke-width: 0.75; fill: #000000; fill-opacity: 0.20;' />
+<rect x='471.31' y='236.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #DF536B; fill: #DF536B; fill-opacity: 0.20;' />
+<rect x='471.31' y='254.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #61D04F; fill: #61D04F; fill-opacity: 0.20;' />
+<rect x='471.31' y='272.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #2297E6; fill: #2297E6; fill-opacity: 0.20;' />
+<text x='485.72' y='207.00' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='21.34px' lengthAdjust='spacingAndGlyphs'>Diet</text>
+<text x='490.49' y='230.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<text x='490.49' y='248.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='490.49' y='266.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>3</text>
+<text x='490.49' y='284.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>4</text>
+</g>
+<defs>
+  <clipPath id='cpMC4wMHw0NTQuNDl8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='454.49' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw0NTQuNDl8MC4wMHw1MDQuMDA=)'>
+<text x='256.76' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='26.22px' lengthAdjust='spacingAndGlyphs'>Time</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='34.69px' lengthAdjust='spacingAndGlyphs'>weight</text>
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8MjQwLjkyfDU5LjA0fDIyMS43Ng=='>
+    <rect x='59.04' y='59.04' width='181.88' height='162.72' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDU5LjA0fDIyMS43Ng==)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='72.79' y1='221.76' x2='227.17' y2='221.76' style='stroke-width: 0.75;' />
+<line x1='72.79' y1='221.76' x2='72.79' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='86.83' y1='221.76' x2='86.83' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='100.86' y1='221.76' x2='100.86' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='114.90' y1='221.76' x2='114.90' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='128.93' y1='221.76' x2='128.93' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='142.96' y1='221.76' x2='142.96' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='157.00' y1='221.76' x2='157.00' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='171.03' y1='221.76' x2='171.03' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='185.07' y1='221.76' x2='185.07' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='199.10' y1='221.76' x2='199.10' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='213.14' y1='221.76' x2='213.14' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='227.17' y1='221.76' x2='227.17' y2='227.74' style='stroke-width: 0.75;' />
+<text x='72.79' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='86.83' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='100.86' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='114.90' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='128.93' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>8</text>
+<text x='157.00' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>12</text>
+<text x='185.07' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>16</text>
+<text x='213.14' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>20</text>
+<line x1='59.04' y1='209.05' x2='59.04' y2='75.32' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='209.05' x2='53.06' y2='209.05' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='186.76' x2='53.06' y2='186.76' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='164.47' x2='53.06' y2='164.47' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='142.18' x2='53.06' y2='142.18' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='119.90' x2='53.06' y2='119.90' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='97.61' x2='53.06' y2='97.61' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='75.32' x2='53.06' y2='75.32' style='stroke-width: 0.75;' />
+<text transform='translate(44.70,209.05) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>50</text>
+<text transform='translate(44.70,186.76) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>100</text>
+<text transform='translate(44.70,142.18) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>200</text>
+<text transform='translate(44.70,97.61) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>300</text>
+<rect x='59.04' y='43.20' width='181.88' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='149.98' y='54.26' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<polygon points='59.04,221.76 240.92,221.76 240.92,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpMjcyLjYwfDQ1NC40OXw1OS4wNHwyMjEuNzY='>
+    <rect x='272.60' y='59.04' width='181.88' height='162.72' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXw1OS4wNHwyMjEuNzY=)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='286.36' y1='221.76' x2='440.73' y2='221.76' style='stroke-width: 0.75;' />
+<line x1='286.36' y1='221.76' x2='286.36' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='300.39' y1='221.76' x2='300.39' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='314.42' y1='221.76' x2='314.42' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='328.46' y1='221.76' x2='328.46' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='342.49' y1='221.76' x2='342.49' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='356.53' y1='221.76' x2='356.53' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='370.56' y1='221.76' x2='370.56' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='384.60' y1='221.76' x2='384.60' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='398.63' y1='221.76' x2='398.63' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='412.66' y1='221.76' x2='412.66' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='426.70' y1='221.76' x2='426.70' y2='227.74' style='stroke-width: 0.75;' />
+<line x1='440.73' y1='221.76' x2='440.73' y2='227.74' style='stroke-width: 0.75;' />
+<text x='286.36' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='300.39' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='314.42' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='328.46' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='342.49' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>8</text>
+<text x='370.56' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>12</text>
+<text x='398.63' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>16</text>
+<text x='426.70' y='243.27' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>20</text>
+<line x1='272.60' y1='209.05' x2='272.60' y2='75.32' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='209.05' x2='266.63' y2='209.05' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='186.76' x2='266.63' y2='186.76' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='164.47' x2='266.63' y2='164.47' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='142.18' x2='266.63' y2='142.18' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='119.90' x2='266.63' y2='119.90' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='97.61' x2='266.63' y2='97.61' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='75.32' x2='266.63' y2='75.32' style='stroke-width: 0.75;' />
+<text transform='translate(258.26,209.05) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>50</text>
+<text transform='translate(258.26,186.76) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>100</text>
+<text transform='translate(258.26,142.18) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>200</text>
+<text transform='translate(258.26,97.61) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>300</text>
+<rect x='272.60' y='43.20' width='181.88' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='363.54' y='54.26' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<polygon points='272.60,221.76 454.49,221.76 454.49,59.04 272.60,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8MjQwLjkyfDI2Ny44NHw0MzAuNTY='>
+    <rect x='59.04' y='267.84' width='181.88' height='162.72' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDI2Ny44NHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='72.79' y1='430.56' x2='227.17' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='72.79' y1='430.56' x2='72.79' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='86.83' y1='430.56' x2='86.83' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='100.86' y1='430.56' x2='100.86' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='114.90' y1='430.56' x2='114.90' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='128.93' y1='430.56' x2='128.93' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='142.96' y1='430.56' x2='142.96' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='157.00' y1='430.56' x2='157.00' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='171.03' y1='430.56' x2='171.03' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='185.07' y1='430.56' x2='185.07' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='199.10' y1='430.56' x2='199.10' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='213.14' y1='430.56' x2='213.14' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='227.17' y1='430.56' x2='227.17' y2='436.54' style='stroke-width: 0.75;' />
+<text x='72.79' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='86.83' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='100.86' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='114.90' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='128.93' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>8</text>
+<text x='157.00' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>12</text>
+<text x='185.07' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>16</text>
+<text x='213.14' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>20</text>
+<line x1='59.04' y1='417.85' x2='59.04' y2='284.12' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='417.85' x2='53.06' y2='417.85' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='395.56' x2='53.06' y2='395.56' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='373.27' x2='53.06' y2='373.27' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='350.98' x2='53.06' y2='350.98' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='328.70' x2='53.06' y2='328.70' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='306.41' x2='53.06' y2='306.41' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='284.12' x2='53.06' y2='284.12' style='stroke-width: 0.75;' />
+<text transform='translate(44.70,417.85) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>50</text>
+<text transform='translate(44.70,395.56) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>100</text>
+<text transform='translate(44.70,350.98) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>200</text>
+<text transform='translate(44.70,306.41) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>300</text>
+<rect x='59.04' y='252.00' width='181.88' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='149.98' y='263.06' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>3</text>
+<polygon points='59.04,430.56 240.92,430.56 240.92,267.84 59.04,267.84 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpMjcyLjYwfDQ1NC40OXwyNjcuODR8NDMwLjU2'>
+    <rect x='272.60' y='267.84' width='181.88' height='162.72' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXwyNjcuODR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='286.36' y1='430.56' x2='440.73' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='286.36' y1='430.56' x2='286.36' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='300.39' y1='430.56' x2='300.39' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='314.42' y1='430.56' x2='314.42' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='328.46' y1='430.56' x2='328.46' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='342.49' y1='430.56' x2='342.49' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='356.53' y1='430.56' x2='356.53' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='370.56' y1='430.56' x2='370.56' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='384.60' y1='430.56' x2='384.60' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='398.63' y1='430.56' x2='398.63' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='412.66' y1='430.56' x2='412.66' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='426.70' y1='430.56' x2='426.70' y2='436.54' style='stroke-width: 0.75;' />
+<line x1='440.73' y1='430.56' x2='440.73' y2='436.54' style='stroke-width: 0.75;' />
+<text x='286.36' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='300.39' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='314.42' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='328.46' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='342.49' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='5.54px' lengthAdjust='spacingAndGlyphs'>8</text>
+<text x='370.56' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>12</text>
+<text x='398.63' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>16</text>
+<text x='426.70' y='452.07' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>20</text>
+<line x1='272.60' y1='417.85' x2='272.60' y2='284.12' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='417.85' x2='266.63' y2='417.85' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='395.56' x2='266.63' y2='395.56' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='373.27' x2='266.63' y2='373.27' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='350.98' x2='266.63' y2='350.98' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='328.70' x2='266.63' y2='328.70' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='306.41' x2='266.63' y2='306.41' style='stroke-width: 0.75;' />
+<line x1='272.60' y1='284.12' x2='266.63' y2='284.12' style='stroke-width: 0.75;' />
+<text transform='translate(258.26,417.85) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='11.07px' lengthAdjust='spacingAndGlyphs'>50</text>
+<text transform='translate(258.26,395.56) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>100</text>
+<text transform='translate(258.26,350.98) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>200</text>
+<text transform='translate(258.26,306.41) rotate(-90)' text-anchor='middle' style='font-size: 9.96px; font-family: "Liberation Sans";' textLength='16.61px' lengthAdjust='spacingAndGlyphs'>300</text>
+<rect x='272.60' y='252.00' width='181.88' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='363.54' y='263.06' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>4</text>
+<polygon points='272.60,430.56 454.49,430.56 454.49,267.84 272.60,267.84 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDU5LjA0fDIyMS43Ng==)'>
+<polygon points='67.18,213.06 78.41,213.06 78.41,212.61 67.18,212.61 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='67.18' y1='213.06' x2='78.41' y2='213.06' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='72.79' y1='213.50' x2='72.79' y2='213.06' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='72.79' y1='212.17' x2='72.79' y2='212.61' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='69.99' y1='213.50' x2='75.60' y2='213.50' style='stroke-width: 0.75;' />
+<line x1='69.99' y1='212.17' x2='75.60' y2='212.17' style='stroke-width: 0.75;' />
+<polygon points='67.18,213.06 78.41,213.06 78.41,212.61 67.18,212.61 ' style='stroke-width: 0.75;' />
+<circle cx='72.79' cy='213.95' r='1.86' style='stroke-width: 0.75;' />
+<polygon points='81.21,210.83 92.44,210.83 92.44,209.27 81.21,209.27 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='81.21' y1='209.49' x2='92.44' y2='209.49' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='86.83' y1='212.61' x2='86.83' y2='210.83' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='86.83' y1='208.60' x2='86.83' y2='209.27' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='84.02' y1='212.61' x2='89.63' y2='212.61' style='stroke-width: 0.75;' />
+<line x1='84.02' y1='208.60' x2='89.63' y2='208.60' style='stroke-width: 0.75;' />
+<polygon points='81.21,210.83 92.44,210.83 92.44,209.27 81.21,209.27 ' style='stroke-width: 0.75;' />
+<circle cx='86.83' cy='213.95' r='1.86' style='stroke-width: 0.75;' />
+<circle cx='86.83' cy='215.73' r='1.86' style='stroke-width: 0.75;' />
+<polygon points='95.25,207.04 106.48,207.04 106.48,205.04 95.25,205.04 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='95.25' y1='206.37' x2='106.48' y2='206.37' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='100.86' y1='209.94' x2='100.86' y2='207.04' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='100.86' y1='203.25' x2='100.86' y2='205.04' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='98.05' y1='209.94' x2='103.67' y2='209.94' style='stroke-width: 0.75;' />
+<line x1='98.05' y1='203.25' x2='103.67' y2='203.25' style='stroke-width: 0.75;' />
+<polygon points='95.25,207.04 106.48,207.04 106.48,205.04 95.25,205.04 ' style='stroke-width: 0.75;' />
+<polygon points='109.28,203.70 120.51,203.70 120.51,199.46 109.28,199.46 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='109.28' y1='201.47' x2='120.51' y2='201.47' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='114.90' y1='208.60' x2='114.90' y2='203.70' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='114.90' y1='193.89' x2='114.90' y2='199.46' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='112.09' y1='208.60' x2='117.70' y2='208.60' style='stroke-width: 0.75;' />
+<line x1='112.09' y1='193.89' x2='117.70' y2='193.89' style='stroke-width: 0.75;' />
+<polygon points='109.28,203.70 120.51,203.70 120.51,199.46 109.28,199.46 ' style='stroke-width: 0.75;' />
+<polygon points='123.32,200.13 134.54,200.13 134.54,193.67 123.32,193.67 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='123.32' y1='196.12' x2='134.54' y2='196.12' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='128.93' y1='205.93' x2='128.93' y2='200.13' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='128.93' y1='186.31' x2='128.93' y2='193.67' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='126.12' y1='205.93' x2='131.74' y2='205.93' style='stroke-width: 0.75;' />
+<line x1='126.12' y1='186.31' x2='131.74' y2='186.31' style='stroke-width: 0.75;' />
+<polygon points='123.32,200.13 134.54,200.13 134.54,193.67 123.32,193.67 ' style='stroke-width: 0.75;' />
+<circle cx='128.93' cy='181.41' r='1.86' style='stroke-width: 0.75;' />
+<polygon points='137.35,197.01 148.58,197.01 148.58,184.75 137.35,184.75 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='137.35' y1='189.88' x2='148.58' y2='189.88' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='142.96' y1='208.60' x2='142.96' y2='197.01' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='142.96' y1='169.37' x2='142.96' y2='184.75' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='140.16' y1='208.60' x2='145.77' y2='208.60' style='stroke-width: 0.75;' />
+<line x1='140.16' y1='169.37' x2='145.77' y2='169.37' style='stroke-width: 0.75;' />
+<polygon points='137.35,197.01 148.58,197.01 148.58,184.75 137.35,184.75 ' style='stroke-width: 0.75;' />
+<polygon points='151.38,193.22 162.61,193.22 162.61,172.72 151.38,172.72 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='151.38' y1='184.08' x2='162.61' y2='184.08' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='157.00' y1='207.26' x2='157.00' y2='193.22' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='157.00' y1='156.45' x2='157.00' y2='172.72' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='154.19' y1='207.26' x2='159.81' y2='207.26' style='stroke-width: 0.75;' />
+<line x1='154.19' y1='156.45' x2='159.81' y2='156.45' style='stroke-width: 0.75;' />
+<polygon points='151.38,193.22 162.61,193.22 162.61,172.72 151.38,172.72 ' style='stroke-width: 0.75;' />
+<polygon points='165.42,190.33 176.65,190.33 176.65,165.36 165.42,165.36 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='165.42' y1='177.62' x2='176.65' y2='177.62' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='171.03' y1='201.02' x2='171.03' y2='190.33' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='171.03' y1='145.75' x2='171.03' y2='165.36' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='168.23' y1='201.02' x2='173.84' y2='201.02' style='stroke-width: 0.75;' />
+<line x1='168.23' y1='145.75' x2='173.84' y2='145.75' style='stroke-width: 0.75;' />
+<polygon points='165.42,190.33 176.65,190.33 176.65,165.36 165.42,165.36 ' style='stroke-width: 0.75;' />
+<polygon points='179.45,184.08 190.68,184.08 190.68,158.68 179.45,158.68 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='179.45' y1='164.92' x2='190.68' y2='164.92' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='185.07' y1='199.69' x2='185.07' y2='184.08' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='185.07' y1='130.15' x2='185.07' y2='158.68' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='182.26' y1='199.69' x2='187.87' y2='199.69' style='stroke-width: 0.75;' />
+<line x1='182.26' y1='130.15' x2='187.87' y2='130.15' style='stroke-width: 0.75;' />
+<polygon points='179.45,184.08 190.68,184.08 190.68,158.68 179.45,158.68 ' style='stroke-width: 0.75;' />
+<polygon points='193.49,177.84 204.71,177.84 204.71,147.98 193.49,147.98 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='193.49' y1='160.01' x2='204.71' y2='160.01' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='199.10' y1='195.23' x2='199.10' y2='177.84' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='199.10' y1='119.90' x2='199.10' y2='147.98' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='196.29' y1='195.23' x2='201.91' y2='195.23' style='stroke-width: 0.75;' />
+<line x1='196.29' y1='119.90' x2='201.91' y2='119.90' style='stroke-width: 0.75;' />
+<polygon points='193.49,177.84 204.71,177.84 204.71,147.98 193.49,147.98 ' style='stroke-width: 0.75;' />
+<polygon points='207.52,175.61 218.75,175.61 218.75,142.63 207.52,142.63 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='207.52' y1='160.01' x2='218.75' y2='160.01' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='213.14' y1='190.77' x2='213.14' y2='175.61' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='213.14' y1='102.96' x2='213.14' y2='142.63' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='210.33' y1='190.77' x2='215.94' y2='190.77' style='stroke-width: 0.75;' />
+<line x1='210.33' y1='102.96' x2='215.94' y2='102.96' style='stroke-width: 0.75;' />
+<polygon points='207.52,175.61 218.75,175.61 218.75,142.63 207.52,142.63 ' style='stroke-width: 0.75;' />
+<polygon points='221.56,172.05 232.78,172.05 232.78,137.73 221.56,137.73 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='221.56' y1='157.34' x2='232.78' y2='157.34' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='227.17' y1='188.54' x2='227.17' y2='172.05' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='227.17' y1='95.38' x2='227.17' y2='137.73' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='224.36' y1='188.54' x2='229.98' y2='188.54' style='stroke-width: 0.75;' />
+<line x1='224.36' y1='95.38' x2='229.98' y2='95.38' style='stroke-width: 0.75;' />
+<polygon points='221.56,172.05 232.78,172.05 232.78,137.73 221.56,137.73 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXw1OS4wNHwyMjEuNzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDI2Ny44NHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXwyNjcuODR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDU5LjA0fDIyMS43Ng==)'>
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXw1OS4wNHwyMjEuNzY=)'>
+<polygon points='280.74,213.95 291.97,213.95 291.97,212.61 280.74,212.61 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='280.74' y1='213.28' x2='291.97' y2='213.28' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='286.36' y1='213.95' x2='286.36' y2='213.95' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='286.36' y1='212.17' x2='286.36' y2='212.61' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='283.55' y1='213.95' x2='289.16' y2='213.95' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='283.55' y1='212.17' x2='289.16' y2='212.17' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='280.74,213.95 291.97,213.95 291.97,212.61 280.74,212.61 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='294.78,209.94 306.00,209.94 306.00,208.16 294.78,208.16 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='294.78' y1='209.72' x2='306.00' y2='209.72' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='300.39' y1='210.83' x2='300.39' y2='209.94' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='300.39' y1='206.82' x2='300.39' y2='208.16' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='297.58' y1='210.83' x2='303.20' y2='210.83' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='297.58' y1='206.82' x2='303.20' y2='206.82' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='294.78,209.94 306.00,209.94 306.00,208.16 294.78,208.16 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='308.81,205.48 320.04,205.48 320.04,203.70 308.81,203.70 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='308.81' y1='205.04' x2='320.04' y2='205.04' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='314.42' y1='205.93' x2='314.42' y2='205.48' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='314.42' y1='202.81' x2='314.42' y2='203.70' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='311.62' y1='205.93' x2='317.23' y2='205.93' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='311.62' y1='202.81' x2='317.23' y2='202.81' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='308.81,205.48 320.04,205.48 320.04,203.70 308.81,203.70 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='322.85,198.79 334.07,198.79 334.07,197.01 322.85,197.01 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='322.85' y1='198.35' x2='334.07' y2='198.35' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='328.46' y1='199.24' x2='328.46' y2='198.79' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='328.46' y1='196.57' x2='328.46' y2='197.01' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='325.65' y1='199.24' x2='331.27' y2='199.24' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='325.65' y1='196.57' x2='331.27' y2='196.57' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='322.85,198.79 334.07,198.79 334.07,197.01 322.85,197.01 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='328.46' cy='193.00' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='336.88,192.55 348.11,192.55 348.11,189.88 336.88,189.88 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='336.88' y1='191.22' x2='348.11' y2='191.22' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='342.49' y1='193.45' x2='342.49' y2='192.55' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='342.49' y1='185.87' x2='342.49' y2='189.88' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='339.69' y1='193.45' x2='345.30' y2='193.45' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='339.69' y1='185.87' x2='345.30' y2='185.87' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='336.88,192.55 348.11,192.55 348.11,189.88 336.88,189.88 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='342.49' cy='175.61' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='342.49' cy='201.91' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='350.91,187.65 362.14,187.65 362.14,180.52 350.91,180.52 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='350.91' y1='184.75' x2='362.14' y2='184.75' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='356.53' y1='188.99' x2='356.53' y2='187.65' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='356.53' y1='176.06' x2='356.53' y2='180.52' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='353.72' y1='188.99' x2='359.33' y2='188.99' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='353.72' y1='176.06' x2='359.33' y2='176.06' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='350.91,187.65 362.14,187.65 362.14,180.52 350.91,180.52 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='356.53' cy='158.68' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='356.53' cy='201.02' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='364.95,180.07 376.17,180.07 376.17,166.70 364.95,166.70 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='364.95' y1='173.16' x2='376.17' y2='173.16' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='370.56' y1='200.13' x2='370.56' y2='180.07' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='370.56' y1='166.25' x2='370.56' y2='166.70' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='367.75' y1='200.13' x2='373.37' y2='200.13' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='367.75' y1='166.25' x2='373.37' y2='166.25' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='364.95,180.07 376.17,180.07 376.17,166.70 364.95,166.70 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='370.56' cy='134.61' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='378.98,176.95 390.21,176.95 390.21,161.80 378.98,161.80 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='378.98' y1='168.48' x2='390.21' y2='168.48' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='384.60' y1='199.69' x2='384.60' y2='176.95' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='384.60' y1='158.23' x2='384.60' y2='161.80' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='381.79' y1='199.69' x2='387.40' y2='199.69' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='381.79' y1='158.23' x2='387.40' y2='158.23' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='378.98,176.95 390.21,176.95 390.21,161.80 378.98,161.80 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='384.60' cy='124.35' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='393.02,167.59 404.24,167.59 404.24,147.98 393.02,147.98 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='393.02' y1='161.35' x2='404.24' y2='161.35' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='398.63' y1='172.94' x2='398.63' y2='167.59' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='398.63' y1='143.52' x2='398.63' y2='147.98' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='395.82' y1='172.94' x2='401.44' y2='172.94' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='395.82' y1='143.52' x2='401.44' y2='143.52' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='393.02,167.59 404.24,167.59 404.24,147.98 393.02,147.98 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='398.63' cy='108.75' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='398.63' cy='199.24' r='1.86' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='407.05,164.03 418.28,164.03 418.28,128.81 407.05,128.81 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='407.05' y1='149.32' x2='418.28' y2='149.32' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='412.66' y1='199.24' x2='412.66' y2='164.03' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='412.66' y1='94.49' x2='412.66' y2='128.81' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='409.86' y1='199.24' x2='415.47' y2='199.24' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='409.86' y1='94.49' x2='415.47' y2='94.49' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='407.05,164.03 418.28,164.03 418.28,128.81 407.05,128.81 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='421.08,158.23 432.31,158.23 432.31,115.88 421.08,115.88 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='421.08' y1='142.85' x2='432.31' y2='142.85' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='426.70' y1='197.46' x2='426.70' y2='158.23' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='426.70' y1='89.58' x2='426.70' y2='115.88' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='423.89' y1='197.46' x2='429.50' y2='197.46' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='423.89' y1='89.58' x2='429.50' y2='89.58' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='421.08,158.23 432.31,158.23 432.31,115.88 421.08,115.88 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='435.12,156.89 446.35,156.89 446.35,113.21 435.12,113.21 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='435.12' y1='136.61' x2='446.35' y2='136.61' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='440.73' y1='198.35' x2='440.73' y2='156.89' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='440.73' y1='83.79' x2='440.73' y2='113.21' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='437.93' y1='198.35' x2='443.54' y2='198.35' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='437.93' y1='83.79' x2='443.54' y2='83.79' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='435.12,156.89 446.35,156.89 446.35,113.21 435.12,113.21 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDI2Ny44NHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXwyNjcuODR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDU5LjA0fDIyMS43Ng==)'>
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXw1OS4wNHwyMjEuNzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDI2Ny44NHw0MzAuNTY=)'>
+<polygon points='67.18,421.86 78.41,421.86 78.41,421.86 67.18,421.86 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='67.18' y1='421.86' x2='78.41' y2='421.86' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='72.79' y1='421.86' x2='72.79' y2='421.86' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='72.79' y1='421.86' x2='72.79' y2='421.86' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='69.99' y1='421.86' x2='75.60' y2='421.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='69.99' y1='421.86' x2='75.60' y2='421.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='67.18,421.86 78.41,421.86 78.41,421.86 67.18,421.86 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='72.79' cy='421.41' r='1.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='72.79' cy='422.75' r='1.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='72.79' cy='422.75' r='1.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='72.79' cy='421.41' r='1.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='81.21,418.29 92.44,418.29 92.44,416.51 81.21,416.51 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='81.21' y1='418.07' x2='92.44' y2='418.07' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='86.83' y1='418.74' x2='86.83' y2='418.29' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='86.83' y1='415.62' x2='86.83' y2='416.51' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='84.02' y1='418.74' x2='89.63' y2='418.74' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='84.02' y1='415.62' x2='89.63' y2='415.62' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='81.21,418.29 92.44,418.29 92.44,416.51 81.21,416.51 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='95.25,412.94 106.48,412.94 106.48,411.61 95.25,411.61 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='95.25' y1='412.27' x2='106.48' y2='412.27' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='100.86' y1='412.94' x2='100.86' y2='412.94' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='100.86' y1='410.71' x2='100.86' y2='411.61' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='98.05' y1='412.94' x2='103.67' y2='412.94' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='98.05' y1='410.71' x2='103.67' y2='410.71' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='95.25,412.94 106.48,412.94 106.48,411.61 95.25,411.61 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<circle cx='100.86' cy='415.17' r='1.86' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='109.28,407.15 120.51,407.15 120.51,403.58 109.28,403.58 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='109.28' y1='405.59' x2='120.51' y2='405.59' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='114.90' y1='409.82' x2='114.90' y2='407.15' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='114.90' y1='401.35' x2='114.90' y2='403.58' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='112.09' y1='409.82' x2='117.70' y2='409.82' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='112.09' y1='401.35' x2='117.70' y2='401.35' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='109.28,407.15 120.51,407.15 120.51,403.58 109.28,403.58 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='123.32,400.46 134.54,400.46 134.54,392.44 123.32,392.44 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='123.32' y1='396.45' x2='134.54' y2='396.45' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='128.93' y1='404.47' x2='128.93' y2='400.46' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='128.93' y1='385.31' x2='128.93' y2='392.44' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='126.12' y1='404.47' x2='131.74' y2='404.47' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='126.12' y1='385.31' x2='131.74' y2='385.31' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='123.32,400.46 134.54,400.46 134.54,392.44 123.32,392.44 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='137.35,391.55 148.58,391.55 148.58,382.63 137.35,382.63 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='137.35' y1='389.54' x2='148.58' y2='389.54' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='142.96' y1='403.14' x2='142.96' y2='391.55' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='142.96' y1='369.70' x2='142.96' y2='382.63' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='140.16' y1='403.14' x2='145.77' y2='403.14' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='140.16' y1='369.70' x2='145.77' y2='369.70' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='137.35,391.55 148.58,391.55 148.58,382.63 137.35,382.63 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='151.38,383.08 162.61,383.08 162.61,369.26 151.38,369.26 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='151.38' y1='377.28' x2='162.61' y2='377.28' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='157.00' y1='394.22' x2='157.00' y2='383.08' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='157.00' y1='350.54' x2='157.00' y2='369.26' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='154.19' y1='394.22' x2='159.81' y2='394.22' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='154.19' y1='350.54' x2='159.81' y2='350.54' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='151.38,383.08 162.61,383.08 162.61,369.26 151.38,369.26 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='165.42,375.95 176.65,375.95 176.65,359.01 165.42,359.01 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='165.42' y1='368.81' x2='176.65' y2='368.81' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='171.03' y1='390.21' x2='171.03' y2='375.95' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='171.03' y1='334.04' x2='171.03' y2='359.01' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='168.23' y1='390.21' x2='173.84' y2='390.21' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='168.23' y1='334.04' x2='173.84' y2='334.04' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='165.42,375.95 176.65,375.95 176.65,359.01 165.42,359.01 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='179.45,364.36 190.68,364.36 190.68,341.62 179.45,341.62 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='179.45' y1='353.21' x2='190.68' y2='353.21' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='185.07' y1='379.96' x2='185.07' y2='364.36' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='185.07' y1='312.20' x2='185.07' y2='341.62' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='182.26' y1='379.96' x2='187.87' y2='379.96' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='182.26' y1='312.20' x2='187.87' y2='312.20' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='179.45,364.36 190.68,364.36 190.68,341.62 179.45,341.62 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='193.49,349.20 204.71,349.20 204.71,322.90 193.49,322.90 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='193.49' y1='337.83' x2='204.71' y2='337.83' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='199.10' y1='375.05' x2='199.10' y2='349.20' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='199.10' y1='292.14' x2='199.10' y2='322.90' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='196.29' y1='375.05' x2='201.91' y2='375.05' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='196.29' y1='292.14' x2='201.91' y2='292.14' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='193.49,349.20 204.71,349.20 204.71,322.90 193.49,322.90 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='207.52,339.84 218.75,339.84 218.75,308.64 207.52,308.64 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='207.52' y1='322.01' x2='218.75' y2='322.01' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='213.14' y1='370.60' x2='213.14' y2='339.84' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='213.14' y1='279.22' x2='213.14' y2='308.64' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='210.33' y1='370.60' x2='215.94' y2='370.60' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='210.33' y1='279.22' x2='215.94' y2='279.22' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='207.52,339.84 218.75,339.84 218.75,308.64 207.52,308.64 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='221.56,342.07 232.78,342.07 232.78,297.05 221.56,297.05 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='221.56' y1='314.88' x2='232.78' y2='314.88' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='227.17' y1='374.61' x2='227.17' y2='342.07' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='227.17' y1='273.87' x2='227.17' y2='297.05' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='224.36' y1='374.61' x2='229.98' y2='374.61' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='224.36' y1='273.87' x2='229.98' y2='273.87' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='221.56,342.07 232.78,342.07 232.78,297.05 221.56,297.05 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXwyNjcuODR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDU5LjA0fDIyMS43Ng==)'>
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXw1OS4wNHwyMjEuNzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MjQwLjkyfDI2Ny44NHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMjcyLjYwfDQ1NC40OXwyNjcuODR8NDMwLjU2)'>
+<polygon points='280.74,422.30 291.97,422.30 291.97,421.41 280.74,421.41 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='280.74' y1='421.86' x2='291.97' y2='421.86' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='286.36' y1='422.75' x2='286.36' y2='422.30' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='286.36' y1='421.41' x2='286.36' y2='421.41' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='283.55' y1='422.75' x2='289.16' y2='422.75' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='283.55' y1='421.41' x2='289.16' y2='421.41' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='280.74,422.30 291.97,422.30 291.97,421.41 280.74,421.41 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='294.78,417.85 306.00,417.85 306.00,416.51 294.78,416.51 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='294.78' y1='417.18' x2='306.00' y2='417.18' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='300.39' y1='418.29' x2='300.39' y2='417.85' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='300.39' y1='415.62' x2='300.39' y2='416.51' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='297.58' y1='418.29' x2='303.20' y2='418.29' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='297.58' y1='415.62' x2='303.20' y2='415.62' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='294.78,417.85 306.00,417.85 306.00,416.51 294.78,416.51 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='308.81,412.50 320.04,412.50 320.04,410.71 308.81,410.71 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='308.81' y1='411.38' x2='320.04' y2='411.38' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='314.42' y1='412.94' x2='314.42' y2='412.50' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='314.42' y1='409.38' x2='314.42' y2='410.71' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='311.62' y1='412.94' x2='317.23' y2='412.94' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='311.62' y1='409.38' x2='317.23' y2='409.38' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='308.81,412.50 320.04,412.50 320.04,410.71 308.81,410.71 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='322.85,404.47 334.07,404.47 334.07,402.25 322.85,402.25 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='322.85' y1='402.69' x2='334.07' y2='402.69' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='328.46' y1='405.37' x2='328.46' y2='404.47' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='328.46' y1='401.80' x2='328.46' y2='402.25' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='325.65' y1='405.37' x2='331.27' y2='405.37' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='325.65' y1='401.80' x2='331.27' y2='401.80' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='322.85,404.47 334.07,404.47 334.07,402.25 322.85,402.25 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<circle cx='328.46' cy='397.34' r='1.86' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='336.88,395.11 348.11,395.11 348.11,393.33 336.88,393.33 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='336.88' y1='394.22' x2='348.11' y2='394.22' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='342.49' y1='396.45' x2='342.49' y2='395.11' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='342.49' y1='391.99' x2='342.49' y2='393.33' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='339.69' y1='396.45' x2='345.30' y2='396.45' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='339.69' y1='391.99' x2='345.30' y2='391.99' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='336.88,395.11 348.11,395.11 348.11,393.33 336.88,393.33 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<circle cx='342.49' cy='381.74' r='1.86' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='350.91,386.64 362.14,386.64 362.14,383.97 350.91,383.97 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='350.91' y1='385.08' x2='362.14' y2='385.08' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='356.53' y1='387.98' x2='356.53' y2='386.64' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='356.53' y1='383.08' x2='356.53' y2='383.97' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='353.72' y1='387.98' x2='359.33' y2='387.98' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='353.72' y1='383.08' x2='359.33' y2='383.08' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='350.91,386.64 362.14,386.64 362.14,383.97 350.91,383.97 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<circle cx='356.53' cy='370.15' r='1.86' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='364.95,375.95 376.17,375.95 376.17,371.04 364.95,371.04 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='364.95' y1='371.93' x2='376.17' y2='371.93' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='370.56' y1='379.96' x2='370.56' y2='375.95' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='370.56' y1='368.81' x2='370.56' y2='371.04' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='367.75' y1='379.96' x2='373.37' y2='379.96' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='367.75' y1='368.81' x2='373.37' y2='368.81' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='364.95,375.95 376.17,375.95 376.17,371.04 364.95,371.04 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<circle cx='370.56' cy='358.12' r='1.86' style='stroke-width: 0.75; stroke: #2297E6;' />
+<circle cx='370.56' cy='383.52' r='1.86' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='378.98,371.93 390.21,371.93 390.21,362.57 378.98,362.57 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='378.98' y1='368.14' x2='390.21' y2='368.14' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='384.60' y1='378.62' x2='384.60' y2='371.93' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='384.60' y1='356.33' x2='384.60' y2='362.57' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='381.79' y1='378.62' x2='387.40' y2='378.62' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='381.79' y1='356.33' x2='387.40' y2='356.33' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='378.98,371.93 390.21,371.93 390.21,362.57 378.98,362.57 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='393.02,365.25 404.24,365.25 404.24,349.20 393.02,349.20 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='393.02' y1='360.12' x2='404.24' y2='360.12' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='398.63' y1='375.50' x2='398.63' y2='365.25' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='398.63' y1='341.18' x2='398.63' y2='349.20' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='395.82' y1='375.50' x2='401.44' y2='375.50' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='395.82' y1='341.18' x2='401.44' y2='341.18' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='393.02,365.25 404.24,365.25 404.24,349.20 393.02,349.20 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='407.05,358.12 418.28,358.12 418.28,335.83 407.05,335.83 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='407.05' y1='350.76' x2='418.28' y2='350.76' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='412.66' y1='375.05' x2='412.66' y2='358.12' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='412.66' y1='323.79' x2='412.66' y2='335.83' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='409.86' y1='375.05' x2='415.47' y2='375.05' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='409.86' y1='323.79' x2='415.47' y2='323.79' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='407.05,358.12 418.28,358.12 418.28,335.83 407.05,335.83 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='421.08,351.43 432.31,351.43 432.31,322.45 421.08,322.45 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='421.08' y1='337.16' x2='432.31' y2='337.16' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='426.70' y1='352.32' x2='426.70' y2='351.43' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='426.70' y1='305.07' x2='426.70' y2='322.45' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='423.89' y1='352.32' x2='429.50' y2='352.32' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='423.89' y1='305.07' x2='429.50' y2='305.07' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='421.08,351.43 432.31,351.43 432.31,322.45 421.08,322.45 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='435.12,349.20 446.35,349.20 446.35,322.45 435.12,322.45 ' style='stroke-width: 0.75; stroke: none; fill: #2297E6; fill-opacity: 0.20;' />
+<line x1='435.12' y1='334.49' x2='446.35' y2='334.49' style='stroke-width: 2.25; stroke: #2297E6; stroke-linecap: butt;' />
+<line x1='440.73' y1='352.77' x2='440.73' y2='349.20' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='440.73' y1='296.60' x2='440.73' y2='322.45' style='stroke-width: 0.75; stroke: #2297E6; stroke-dasharray: 4.00,4.00;' />
+<line x1='437.93' y1='352.77' x2='443.54' y2='352.77' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='437.93' y1='296.60' x2='443.54' y2='296.60' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polygon points='435.12,349.20 446.35,349.20 446.35,322.45 435.12,322.45 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+</g>
+<defs>
+  <clipPath id='cpMTExLjA5fDQzMy4xOXw5My43NHwzNjEuMTY='>
+    <rect x='111.09' y='93.74' width='322.10' height='267.42' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMTExLjA5fDQzMy4xOXw5My43NHwzNjEuMTY=)'>
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_groups.svg b/inst/tinytest/_tinysnapshot/boxplot_groups.svg
new file mode 100644
index 00000000..63028ae1
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_groups.svg
@@ -0,0 +1,114 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<rect x='461.31' y='236.43' width='16.75' height='16.75' style='stroke-width: 0.75; fill: #000000; fill-opacity: 0.20;' />
+<rect x='461.31' y='254.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #DF536B; fill: #DF536B; fill-opacity: 0.20;' />
+<text x='480.72' y='225.00' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='26.03px' lengthAdjust='spacingAndGlyphs'>supp</text>
+<text x='480.48' y='248.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='15.34px' lengthAdjust='spacingAndGlyphs'>OJ</text>
+<text x='480.48' y='266.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='16.68px' lengthAdjust='spacingAndGlyphs'>VC</text>
+</g>
+<defs>
+  <clipPath id='cpMC4wMHw0NDQuNDh8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='444.48' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw0NDQuNDh8MC4wMHw1MDQuMDA=)'>
+<text x='251.76' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='26.03px' lengthAdjust='spacingAndGlyphs'>dose</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='16.01px' lengthAdjust='spacingAndGlyphs'>len</text>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='132.80' y1='430.56' x2='370.73' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='132.80' y1='430.56' x2='132.80' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='251.76' y1='430.56' x2='251.76' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='370.73' y1='430.56' x2='370.73' y2='437.76' style='stroke-width: 0.75;' />
+<text x='132.80' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='16.68px' lengthAdjust='spacingAndGlyphs'>0.5</text>
+<text x='251.76' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<text x='370.73' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<line x1='59.04' y1='407.53' x2='59.04' y2='60.06' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='407.53' x2='51.84' y2='407.53' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='349.62' x2='51.84' y2='349.62' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='291.71' x2='51.84' y2='291.71' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='233.80' x2='51.84' y2='233.80' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='175.88' x2='51.84' y2='175.88' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='117.97' x2='51.84' y2='117.97' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='60.06' x2='51.84' y2='60.06' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,407.53) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text transform='translate(41.76,349.62) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text transform='translate(41.76,291.71) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text transform='translate(41.76,233.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text transform='translate(41.76,175.88) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text transform='translate(41.76,117.97) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>30</text>
+<text transform='translate(41.76,60.06) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>35</text>
+<polygon points='59.04,430.56 444.48,430.56 444.48,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8NDQ0LjQ4fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='385.44' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8NDQ0LjQ4fDU5LjA0fDQzMC41Ng==)'>
+<polygon points='85.21,353.10 131.61,353.10 131.61,274.34 85.21,274.34 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='85.21' y1='323.56' x2='131.61' y2='323.56' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='108.41' y1='370.47' x2='108.41' y2='353.10' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='108.41' y1='216.42' x2='108.41' y2='274.34' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='96.81' y1='370.47' x2='120.01' y2='370.47' style='stroke-width: 0.75;' />
+<line x1='96.81' y1='216.42' x2='120.01' y2='216.42' style='stroke-width: 0.75;' />
+<polygon points='85.21,353.10 131.61,353.10 131.61,274.34 85.21,274.34 ' style='stroke-width: 0.75;' />
+<polygon points='204.18,233.80 250.57,233.80 250.57,166.62 204.18,166.62 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='204.18' y1='193.84' x2='250.57' y2='193.84' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='227.37' y1='297.50' x2='227.37' y2='233.80' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='227.37' y1='149.24' x2='227.37' y2='166.62' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='215.78' y1='297.50' x2='238.97' y2='297.50' style='stroke-width: 0.75;' />
+<line x1='215.78' y1='149.24' x2='238.97' y2='149.24' style='stroke-width: 0.75;' />
+<polygon points='204.18,233.80 250.57,233.80 250.57,166.62 204.18,166.62 ' style='stroke-width: 0.75;' />
+<polygon points='323.14,181.68 369.54,181.68 369.54,149.24 323.14,149.24 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='323.14' y1='164.88' x2='369.54' y2='164.88' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='346.34' y1='206.00' x2='346.34' y2='181.68' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='346.34' y1='107.55' x2='346.34' y2='149.24' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='334.74' y1='206.00' x2='357.94' y2='206.00' style='stroke-width: 0.75;' />
+<line x1='334.74' y1='107.55' x2='357.94' y2='107.55' style='stroke-width: 0.75;' />
+<polygon points='323.14,181.68 369.54,181.68 369.54,149.24 323.14,149.24 ' style='stroke-width: 0.75;' />
+<polygon points='133.99,398.27 180.38,398.27 180.38,335.72 133.99,335.72 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='133.99' y1='382.63' x2='180.38' y2='382.63' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='157.19' y1='416.80' x2='157.19' y2='398.27' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='157.19' y1='332.25' x2='157.19' y2='335.72' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='145.59' y1='416.80' x2='168.78' y2='416.80' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='145.59' y1='332.25' x2='168.78' y2='332.25' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='133.99,398.27 180.38,398.27 180.38,335.72 133.99,335.72 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='252.95,289.39 299.35,289.39 299.35,265.07 252.95,265.07 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='252.95' y1='274.34' x2='299.35' y2='274.34' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='276.15' y1='307.92' x2='276.15' y2='289.39' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='276.15' y1='247.70' x2='276.15' y2='265.07' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='264.55' y1='307.92' x2='287.75' y2='307.92' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='264.55' y1='247.70' x2='287.75' y2='247.70' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='252.95,289.39 299.35,289.39 299.35,265.07 252.95,265.07 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='276.15' cy='204.84' r='2.70' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='371.92,195.57 418.31,195.57 418.31,123.76 371.92,123.76 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='371.92' y1='164.88' x2='418.31' y2='164.88' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='395.11' y1='251.17' x2='395.11' y2='195.57' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='395.11' y1='72.80' x2='395.11' y2='123.76' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='383.52' y1='251.17' x2='406.71' y2='251.17' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='383.52' y1='72.80' x2='406.71' y2='72.80' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='371.92,195.57 418.31,195.57 418.31,123.76 371.92,123.76 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_groups_argpass.svg b/inst/tinytest/_tinysnapshot/boxplot_groups_argpass.svg
new file mode 100644
index 00000000..67e50df6
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_groups_argpass.svg
@@ -0,0 +1,118 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='401.48' y1='235.80' x2='414.98' y2='235.80' style='stroke-width: 0.75;' />
+<line x1='401.48' y1='253.80' x2='414.98' y2='253.80' style='stroke-width: 0.75; stroke: #DF536B;' />
+<rect x='399.85' y='227.43' width='16.75' height='16.75' style='stroke-width: 0.75; fill: #000000; fill-opacity: 0.20;' />
+<rect x='399.85' y='245.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #DF536B; fill: #DF536B; fill-opacity: 0.20;' />
+<text x='425.78' y='239.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='71.38px' lengthAdjust='spacingAndGlyphs'>Ascorbic acid</text>
+<text x='425.78' y='257.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='68.05px' lengthAdjust='spacingAndGlyphs'>Orange juice</text>
+</g>
+<defs>
+  <clipPath id='cpMC4wMHwzODMuODR8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='383.84' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHwzODMuODR8MC4wMHw1MDQuMDA=)'>
+<text x='221.44' y='33.12' text-anchor='middle' style='font-size: 14.40px; font-weight: bold; font-family: "Liberation Sans";' textLength='183.85px' lengthAdjust='spacingAndGlyphs'>Guinea Pigs' Tooth Growth</text>
+<text x='221.44' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='101.17px' lengthAdjust='spacingAndGlyphs'>Vitamin C dose mg</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='62.72px' lengthAdjust='spacingAndGlyphs'>tooth length</text>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='59.04' y1='359.47' x2='59.04' y2='130.13' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='359.47' x2='51.84' y2='359.47' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='244.80' x2='51.84' y2='244.80' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='130.13' x2='51.84' y2='130.13' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,359.47) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='16.68px' lengthAdjust='spacingAndGlyphs'>0.5</text>
+<text transform='translate(41.76,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<text transform='translate(41.76,130.13) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<line x1='71.07' y1='430.56' x2='371.81' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='71.07' y1='430.56' x2='71.07' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='114.03' y1='430.56' x2='114.03' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='157.00' y1='430.56' x2='157.00' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='199.96' y1='430.56' x2='199.96' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='242.92' y1='430.56' x2='242.92' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='285.88' y1='430.56' x2='285.88' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='328.85' y1='430.56' x2='328.85' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='371.81' y1='430.56' x2='371.81' y2='437.76' style='stroke-width: 0.75;' />
+<text x='71.07' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='114.03' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='157.00' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='199.96' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='242.92' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='285.88' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='328.85' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>30</text>
+<text x='371.81' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>35</text>
+<polygon points='59.04,430.56 383.84,430.56 383.84,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8MzgzLjg0fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='324.80' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8MzgzLjg0fDU5LjA0fDQzMC41Ng==)'>
+<polygon points='154.42,388.13 154.42,360.61 212.85,360.61 212.85,388.13 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='176.33' y1='388.13' x2='176.33' y2='360.61' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='141.53' y1='374.37' x2='154.42' y2='374.37' style='stroke-width: 0.75;' />
+<line x1='255.81' y1='374.37' x2='212.85' y2='374.37' style='stroke-width: 0.75;' />
+<line x1='141.53' y1='374.37' x2='141.53' y2='374.37' style='stroke-width: 0.75;' />
+<line x1='255.81' y1='374.37' x2='255.81' y2='374.37' style='stroke-width: 0.75;' />
+<polygon points='154.42,388.13 154.42,360.61 212.85,360.61 212.85,388.13 ' style='stroke-width: 0.75;' />
+<polygon points='242.92,273.47 242.92,245.95 292.76,245.95 292.76,273.47 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='272.57' y1='273.47' x2='272.57' y2='245.95' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='195.66' y1='259.71' x2='242.92' y2='259.71' style='stroke-width: 0.75;' />
+<line x1='305.65' y1='259.71' x2='292.76' y2='259.71' style='stroke-width: 0.75;' />
+<line x1='195.66' y1='259.71' x2='195.66' y2='259.71' style='stroke-width: 0.75;' />
+<line x1='305.65' y1='259.71' x2='305.65' y2='259.71' style='stroke-width: 0.75;' />
+<polygon points='242.92,273.47 242.92,245.95 292.76,245.95 292.76,273.47 ' style='stroke-width: 0.75;' />
+<polygon points='281.59,158.80 281.59,131.28 305.65,131.28 305.65,158.80 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='294.05' y1='158.80' x2='294.05' y2='131.28' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='263.54' y1='145.04' x2='281.59' y2='145.04' style='stroke-width: 0.75;' />
+<line x1='336.58' y1='145.04' x2='305.65' y2='145.04' style='stroke-width: 0.75;' />
+<line x1='263.54' y1='145.04' x2='263.54' y2='145.04' style='stroke-width: 0.75;' />
+<line x1='336.58' y1='145.04' x2='336.58' y2='145.04' style='stroke-width: 0.75;' />
+<polygon points='281.59,158.80 281.59,131.28 305.65,131.28 305.65,158.80 ' style='stroke-width: 0.75;' />
+<polygon points='120.91,358.32 120.91,330.80 167.31,330.80 167.31,358.32 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='132.51' y1='358.32' x2='132.51' y2='330.80' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='107.16' y1='344.56' x2='120.91' y2='344.56' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='169.88' y1='344.56' x2='167.31' y2='344.56' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='107.16' y1='344.56' x2='107.16' y2='344.56' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='169.88' y1='344.56' x2='169.88' y2='344.56' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='120.91,358.32 120.91,330.80 167.31,330.80 167.31,358.32 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='201.68,243.65 201.68,216.13 219.72,216.13 219.72,243.65 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='212.85' y1='243.65' x2='212.85' y2='216.13' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='187.93' y1='229.89' x2='201.68' y2='229.89' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='232.61' y1='229.89' x2='219.72' y2='229.89' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='187.93' y1='229.89' x2='187.93' y2='229.89' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='232.61' y1='229.89' x2='232.61' y2='229.89' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='201.68,243.65 201.68,216.13 219.72,216.13 219.72,243.65 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<circle cx='264.40' cy='229.89' r='2.70' style='stroke-width: 0.75; stroke: none; fill: #DF536B;' />
+<polygon points='271.28,128.99 271.28,101.47 324.55,101.47 324.55,128.99 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='294.05' y1='128.99' x2='294.05' y2='101.47' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='230.03' y1='115.23' x2='271.28' y2='115.23' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='362.36' y1='115.23' x2='324.55' y2='115.23' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='230.03' y1='115.23' x2='230.03' y2='115.23' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='362.36' y1='115.23' x2='362.36' y2='115.23' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='271.28,128.99 271.28,101.47 324.55,101.47 324.55,128.99 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_groups_facets_with_missings.svg b/inst/tinytest/_tinysnapshot/boxplot_groups_facets_with_missings.svg
new file mode 100644
index 00000000..d5415393
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_groups_facets_with_missings.svg
@@ -0,0 +1,190 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<rect x='459.11' y='227.43' width='16.75' height='16.75' style='stroke-width: 0.75; fill: #000000; fill-opacity: 0.20;' />
+<rect x='459.11' y='245.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #DF536B; fill: #DF536B; fill-opacity: 0.20;' />
+<rect x='459.11' y='263.43' width='16.75' height='16.75' style='stroke-width: 0.75; stroke: #61D04F; fill: #61D04F; fill-opacity: 0.20;' />
+<text x='473.52' y='216.00' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='52.68px' lengthAdjust='spacingAndGlyphs'>factor(cyl)</text>
+<text x='478.28' y='239.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='478.28' y='257.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='478.28' y='275.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>8</text>
+</g>
+<defs>
+  <clipPath id='cpMC4wMHw0MzAuMDh8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='430.08' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw0MzAuMDh8MC4wMHw1MDQuMDA=)'>
+<text x='244.56' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='24.02px' lengthAdjust='spacingAndGlyphs'>gear</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='23.35px' lengthAdjust='spacingAndGlyphs'>mpg</text>
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8MjI4LjcyfDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='169.68' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8MjI4LjcyfDU5LjA0fDQzMC41Ng==)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='91.51' y1='430.56' x2='196.25' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='91.51' y1='430.56' x2='91.51' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='143.88' y1='430.56' x2='143.88' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='196.25' y1='430.56' x2='196.25' y2='437.76' style='stroke-width: 0.75;' />
+<text x='91.51' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>3</text>
+<text x='143.88' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='196.25' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<line x1='59.04' y1='422.66' x2='59.04' y2='129.89' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='422.66' x2='51.84' y2='422.66' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='349.46' x2='51.84' y2='349.46' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='276.27' x2='51.84' y2='276.27' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='203.08' x2='51.84' y2='203.08' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='129.89' x2='51.84' y2='129.89' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,422.66) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text transform='translate(41.76,349.46) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text transform='translate(41.76,276.27) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text transform='translate(41.76,203.08) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text transform='translate(41.76,129.89) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>30</text>
+<rect x='59.04' y='43.20' width='169.68' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='143.88' y='53.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
+<polygon points='59.04,430.56 228.72,430.56 228.72,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpMjYwLjQwfDQzMC4wOHw1OS4wNHw0MzAuNTY='>
+    <rect x='260.40' y='59.04' width='169.68' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMjYwLjQwfDQzMC4wOHw1OS4wNHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='292.87' y1='430.56' x2='397.61' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='292.87' y1='430.56' x2='292.87' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='345.24' y1='430.56' x2='345.24' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='397.61' y1='430.56' x2='397.61' y2='437.76' style='stroke-width: 0.75;' />
+<text x='292.87' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>3</text>
+<text x='345.24' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>4</text>
+<text x='397.61' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<line x1='260.40' y1='422.66' x2='260.40' y2='129.89' style='stroke-width: 0.75;' />
+<line x1='260.40' y1='422.66' x2='253.20' y2='422.66' style='stroke-width: 0.75;' />
+<line x1='260.40' y1='349.46' x2='253.20' y2='349.46' style='stroke-width: 0.75;' />
+<line x1='260.40' y1='276.27' x2='253.20' y2='276.27' style='stroke-width: 0.75;' />
+<line x1='260.40' y1='203.08' x2='253.20' y2='203.08' style='stroke-width: 0.75;' />
+<line x1='260.40' y1='129.89' x2='253.20' y2='129.89' style='stroke-width: 0.75;' />
+<text transform='translate(243.12,422.66) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text transform='translate(243.12,349.46) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text transform='translate(243.12,276.27) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text transform='translate(243.12,203.08) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text transform='translate(243.12,129.89) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>30</text>
+<rect x='260.40' y='43.20' width='169.68' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='345.24' y='53.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>1</text>
+<polygon points='260.40,430.56 430.08,430.56 430.08,59.04 260.40,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MjI4LjcyfDU5LjA0fDQzMC41Ng==)'>
+<polygon points='70.56,254.31 84.00,254.31 84.00,254.31 70.56,254.31 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='70.56' y1='254.31' x2='84.00' y2='254.31' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='77.28' y1='254.31' x2='77.28' y2='254.31' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='77.28' y1='254.31' x2='77.28' y2='254.31' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='73.92' y1='254.31' x2='80.64' y2='254.31' style='stroke-width: 0.75;' />
+<line x1='73.92' y1='254.31' x2='80.64' y2='254.31' style='stroke-width: 0.75;' />
+<polygon points='70.56,254.31 84.00,254.31 84.00,254.31 70.56,254.31 ' style='stroke-width: 0.75;' />
+<polygon points='122.93,235.29 136.37,235.29 136.37,211.86 122.93,211.86 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='122.93' y1='223.57' x2='136.37' y2='223.57' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='129.65' y1='235.29' x2='129.65' y2='235.29' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='129.65' y1='211.86' x2='129.65' y2='211.86' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='126.29' y1='235.29' x2='133.01' y2='235.29' style='stroke-width: 0.75;' />
+<line x1='126.29' y1='211.86' x2='133.01' y2='211.86' style='stroke-width: 0.75;' />
+<polygon points='122.93,235.29 136.37,235.29 136.37,211.86 122.93,211.86 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpMjYwLjQwfDQzMC4wOHw1OS4wNHw0MzAuNTY=)'>
+<polygon points='324.29,235.29 337.73,235.29 337.73,94.76 324.29,94.76 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='324.29' y1='146.72' x2='337.73' y2='146.72' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='331.01' y1='255.78' x2='331.01' y2='235.29' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='331.01' y1='72.80' x2='331.01' y2='94.76' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='327.65' y1='255.78' x2='334.37' y2='255.78' style='stroke-width: 0.75;' />
+<line x1='327.65' y1='72.80' x2='334.37' y2='72.80' style='stroke-width: 0.75;' />
+<polygon points='324.29,235.29 337.73,235.29 337.73,94.76 324.29,94.76 ' style='stroke-width: 0.75;' />
+<polygon points='376.66,188.44 390.10,188.44 390.10,124.03 376.66,124.03 ' style='stroke-width: 0.75; stroke: none; fill: #000000; fill-opacity: 0.20;' />
+<line x1='376.66' y1='156.24' x2='390.10' y2='156.24' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='383.38' y1='188.44' x2='383.38' y2='188.44' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='383.38' y1='124.03' x2='383.38' y2='124.03' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='380.02' y1='188.44' x2='386.74' y2='188.44' style='stroke-width: 0.75;' />
+<line x1='380.02' y1='124.03' x2='386.74' y2='124.03' style='stroke-width: 0.75;' />
+<polygon points='376.66,188.44 390.10,188.44 390.10,124.03 376.66,124.03 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MjI4LjcyfDU5LjA0fDQzMC41Ng==)'>
+<polygon points='84.79,304.09 98.23,304.09 98.23,255.78 84.79,255.78 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='84.79' y1='279.93' x2='98.23' y2='279.93' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='91.51' y1='304.09' x2='91.51' y2='304.09' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='91.51' y1='255.78' x2='91.51' y2='255.78' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='88.15' y1='304.09' x2='94.87' y2='304.09' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='88.15' y1='255.78' x2='94.87' y2='255.78' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='84.79,304.09 98.23,304.09 98.23,255.78 84.79,255.78 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='137.16,308.48 150.60,308.48 150.60,287.98 137.16,287.98 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='137.16' y1='298.23' x2='150.60' y2='298.23' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='143.88' y1='308.48' x2='143.88' y2='308.48' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='143.88' y1='287.98' x2='143.88' y2='287.98' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='140.52' y1='308.48' x2='147.24' y2='308.48' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='140.52' y1='287.98' x2='147.24' y2='287.98' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='137.16,308.48 150.60,308.48 150.60,287.98 137.16,287.98 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+</g>
+<g clip-path='url(#cpMjYwLjQwfDQzMC4wOHw1OS4wNHw0MzAuNTY=)'>
+<polygon points='338.52,261.63 351.96,261.63 351.96,261.63 338.52,261.63 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='338.52' y1='261.63' x2='351.96' y2='261.63' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='345.24' y1='261.63' x2='345.24' y2='261.63' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='345.24' y1='261.63' x2='345.24' y2='261.63' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='341.88' y1='261.63' x2='348.60' y2='261.63' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='341.88' y1='261.63' x2='348.60' y2='261.63' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='338.52,261.63 351.96,261.63 351.96,261.63 338.52,261.63 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='390.89,280.66 404.33,280.66 404.33,280.66 390.89,280.66 ' style='stroke-width: 0.75; stroke: none; fill: #DF536B; fill-opacity: 0.20;' />
+<line x1='390.89' y1='280.66' x2='404.33' y2='280.66' style='stroke-width: 2.25; stroke: #DF536B; stroke-linecap: butt;' />
+<line x1='397.61' y1='280.66' x2='397.61' y2='280.66' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='397.61' y1='280.66' x2='397.61' y2='280.66' style='stroke-width: 0.75; stroke: #DF536B; stroke-dasharray: 4.00,4.00;' />
+<line x1='394.25' y1='280.66' x2='400.97' y2='280.66' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='394.25' y1='280.66' x2='400.97' y2='280.66' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polygon points='390.89,280.66 404.33,280.66 404.33,280.66 390.89,280.66 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MjI4LjcyfDU5LjA0fDQzMC41Ng==)'>
+<polygon points='102.38,367.03 109.10,367.03 109.10,322.38 102.38,322.38 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='102.38' y1='346.54' x2='109.10' y2='346.54' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='105.74' y1='416.80' x2='105.74' y2='367.03' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='105.74' y1='287.98' x2='105.74' y2='322.38' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='104.06' y1='416.80' x2='107.42' y2='416.80' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='104.06' y1='287.98' x2='107.42' y2='287.98' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='102.38,367.03 109.10,367.03 109.10,322.38 102.38,322.38 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+</g>
+<g clip-path='url(#cpMjYwLjQwfDQzMC4wOHw1OS4wNHw0MzAuNTY=)'>
+<polygon points='408.47,349.46 415.20,349.46 415.20,337.75 408.47,337.75 ' style='stroke-width: 0.75; stroke: none; fill: #61D04F; fill-opacity: 0.20;' />
+<line x1='408.47' y1='343.61' x2='415.20' y2='343.61' style='stroke-width: 2.25; stroke: #61D04F; stroke-linecap: butt;' />
+<line x1='411.84' y1='349.46' x2='411.84' y2='349.46' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='411.84' y1='337.75' x2='411.84' y2='337.75' style='stroke-width: 0.75; stroke: #61D04F; stroke-dasharray: 4.00,4.00;' />
+<line x1='410.16' y1='349.46' x2='413.52' y2='349.46' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='410.16' y1='337.75' x2='413.52' y2='337.75' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polygon points='408.47,349.46 415.20,349.46 415.20,337.75 408.47,337.75 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+</g>
+<defs>
+  <clipPath id='cpMTAyLjI0fDQxNS42OHw4Ny44NHwzNzIuOTY='>
+    <rect x='102.24' y='87.84' width='313.44' height='285.12' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMTAyLjI0fDQxNS42OHw4Ny44NHwzNzIuOTY=)'>
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_log_horizontal.svg b/inst/tinytest/_tinysnapshot/boxplot_log_horizontal.svg
new file mode 100644
index 00000000..c261f6cf
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_log_horizontal.svg
@@ -0,0 +1,124 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<text x='266.40' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='50.70px' lengthAdjust='spacingAndGlyphs'>treatment</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='49.38px' lengthAdjust='spacingAndGlyphs'>decrease</text>
+<line x1='59.04' y1='395.30' x2='59.04' y2='94.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='395.30' x2='51.84' y2='395.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='352.30' x2='51.84' y2='352.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='309.30' x2='51.84' y2='309.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='266.30' x2='51.84' y2='266.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='223.30' x2='51.84' y2='223.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='180.30' x2='51.84' y2='180.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='137.30' x2='51.84' y2='137.30' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='94.30' x2='51.84' y2='94.30' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,395.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>A</text>
+<text transform='translate(41.76,352.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>B</text>
+<text transform='translate(41.76,309.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>C</text>
+<text transform='translate(41.76,266.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>D</text>
+<text transform='translate(41.76,223.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>E</text>
+<text transform='translate(41.76,180.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='7.33px' lengthAdjust='spacingAndGlyphs'>F</text>
+<text transform='translate(41.76,137.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='9.34px' lengthAdjust='spacingAndGlyphs'>G</text>
+<text transform='translate(41.76,94.30) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>H</text>
+<line x1='74.40' y1='430.56' x2='434.27' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='74.40' y1='430.56' x2='74.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='158.69' y1='430.56' x2='158.69' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='222.45' y1='430.56' x2='222.45' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='286.21' y1='430.56' x2='286.21' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='370.50' y1='430.56' x2='370.50' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='434.27' y1='430.56' x2='434.27' y2='437.76' style='stroke-width: 0.75;' />
+<text x='74.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>2</text>
+<text x='158.69' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='222.45' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='286.21' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='370.50' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>50</text>
+<text x='434.27' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='20.02px' lengthAdjust='spacingAndGlyphs'>100</text>
+<polygon points='59.04,430.56 473.76,430.56 473.76,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='414.72' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng==)'>
+<polygon points='94.93,412.50 94.93,378.10 158.69,378.10 158.69,412.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='138.16' y1='412.50' x2='138.16' y2='378.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='74.40' y1='395.30' x2='94.93' y2='395.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='158.69' y1='395.30' x2='158.69' y2='395.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='74.40' y1='403.90' x2='74.40' y2='386.70' style='stroke-width: 0.75;' />
+<line x1='158.69' y1='403.90' x2='158.69' y2='386.70' style='stroke-width: 0.75;' />
+<polygon points='94.93,412.50 94.93,378.10 158.69,378.10 158.69,412.50 ' style='stroke-width: 0.75;' />
+<circle cx='239.22' cy='395.30' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='158.69,369.50 158.69,335.10 212.76,335.10 212.76,369.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='195.99' y1='369.50' x2='195.99' y2='335.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='138.16' y1='352.30' x2='158.69' y2='352.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='253.40' y1='352.30' x2='212.76' y2='352.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='138.16' y1='360.90' x2='138.16' y2='343.70' style='stroke-width: 0.75;' />
+<line x1='253.40' y1='360.90' x2='253.40' y2='343.70' style='stroke-width: 0.75;' />
+<polygon points='158.69,369.50 158.69,335.10 212.76,335.10 212.76,369.50 ' style='stroke-width: 0.75;' />
+<polygon points='253.40,326.50 253.40,292.10 302.99,292.10 302.99,326.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='268.52' y1='326.50' x2='268.52' y2='292.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='212.76' y1='309.30' x2='253.40' y2='309.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='320.39' y1='309.30' x2='302.99' y2='309.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='212.76' y1='317.90' x2='212.76' y2='300.70' style='stroke-width: 0.75;' />
+<line x1='320.39' y1='317.90' x2='320.39' y2='300.70' style='stroke-width: 0.75;' />
+<polygon points='253.40,326.50 253.40,292.10 302.99,292.10 302.99,326.50 ' style='stroke-width: 0.75;' />
+<circle cx='418.23' cy='309.30' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='304.88,283.50 304.88,249.10 360.81,249.10 360.81,283.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='329.45' y1='283.50' x2='329.45' y2='249.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='286.21' y1='266.30' x2='304.88' y2='266.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='382.56' y1='266.30' x2='360.81' y2='266.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='286.21' y1='274.90' x2='286.21' y2='257.70' style='stroke-width: 0.75;' />
+<line x1='382.56' y1='274.90' x2='382.56' y2='257.70' style='stroke-width: 0.75;' />
+<polygon points='304.88,283.50 304.88,249.10 360.81,249.10 360.81,283.50 ' style='stroke-width: 0.75;' />
+<polygon points='360.81,240.50 360.81,206.10 411.41,206.10 411.41,240.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='375.86' y1='240.50' x2='375.86' y2='206.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='347.65' y1='223.30' x2='360.81' y2='223.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='446.32' y1='223.30' x2='411.41' y2='223.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='347.65' y1='231.90' x2='347.65' y2='214.70' style='stroke-width: 0.75;' />
+<line x1='446.32' y1='231.90' x2='446.32' y2='214.70' style='stroke-width: 0.75;' />
+<polygon points='360.81,240.50 360.81,206.10 411.41,206.10 411.41,240.50 ' style='stroke-width: 0.75;' />
+<polygon points='371.42,197.50 371.42,163.10 423.03,163.10 423.03,197.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='401.45' y1='197.50' x2='401.45' y2='163.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='286.21' y1='180.30' x2='371.42' y2='180.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='446.32' y1='180.30' x2='423.03' y2='180.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='286.21' y1='188.90' x2='286.21' y2='171.70' style='stroke-width: 0.75;' />
+<line x1='446.32' y1='188.90' x2='446.32' y2='171.70' style='stroke-width: 0.75;' />
+<polygon points='371.42,197.50 371.42,163.10 423.03,163.10 423.03,197.50 ' style='stroke-width: 0.75;' />
+<polygon points='395.34,154.50 395.34,120.10 412.00,120.10 412.00,154.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='404.05' y1='154.50' x2='404.05' y2='120.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='387.27' y1='137.30' x2='395.34' y2='137.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='426.59' y1='137.30' x2='412.00' y2='137.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='387.27' y1='145.90' x2='387.27' y2='128.70' style='stroke-width: 0.75;' />
+<line x1='426.59' y1='145.90' x2='426.59' y2='128.70' style='stroke-width: 0.75;' />
+<polygon points='395.34,154.50 395.34,120.10 412.00,120.10 412.00,154.50 ' style='stroke-width: 0.75;' />
+<circle cx='302.99' cy='137.30' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='406.57,111.50 406.57,77.10 440.06,77.10 440.06,111.50 ' style='stroke-width: 0.75; stroke: none; fill: #FFE4C4;' />
+<line x1='414.88' y1='111.50' x2='414.88' y2='77.10' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='400.13' y1='94.30' x2='406.57' y2='94.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='458.40' y1='94.30' x2='440.06' y2='94.30' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='400.13' y1='102.90' x2='400.13' y2='85.70' style='stroke-width: 0.75;' />
+<line x1='458.40' y1='102.90' x2='458.40' y2='85.70' style='stroke-width: 0.75;' />
+<polygon points='406.57,111.50 406.57,77.10 440.06,77.10 440.06,111.50 ' style='stroke-width: 0.75;' />
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_simple.svg b/inst/tinytest/_tinysnapshot/boxplot_simple.svg
new file mode 100644
index 00000000..c27c1528
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_simple.svg
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<text x='266.40' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='29.35px' lengthAdjust='spacingAndGlyphs'>spray</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='29.36px' lengthAdjust='spacingAndGlyphs'>count</text>
+<line x1='106.40' y1='430.56' x2='426.40' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='106.40' y1='430.56' x2='106.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='170.40' y1='430.56' x2='170.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='234.40' y1='430.56' x2='234.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='298.40' y1='430.56' x2='298.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='362.40' y1='430.56' x2='362.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='426.40' y1='430.56' x2='426.40' y2='437.76' style='stroke-width: 0.75;' />
+<text x='106.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>A</text>
+<text x='170.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>B</text>
+<text x='234.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>C</text>
+<text x='298.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>D</text>
+<text x='362.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>E</text>
+<text x='426.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='7.33px' lengthAdjust='spacingAndGlyphs'>F</text>
+<line x1='59.04' y1='416.80' x2='59.04' y2='86.03' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='416.80' x2='51.84' y2='416.80' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='350.65' x2='51.84' y2='350.65' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='284.49' x2='51.84' y2='284.49' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='218.34' x2='51.84' y2='218.34' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='152.18' x2='51.84' y2='152.18' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='86.03' x2='51.84' y2='86.03' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,416.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text transform='translate(41.76,350.65) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text transform='translate(41.76,284.49) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text transform='translate(41.76,218.34) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text transform='translate(41.76,152.18) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text transform='translate(41.76,86.03) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<polygon points='59.04,430.56 473.76,430.56 473.76,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='414.72' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng==)'>
+<polygon points='80.80,271.26 132.00,271.26 132.00,172.03 80.80,172.03 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='80.80' y1='231.57' x2='132.00' y2='231.57' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='106.40' y1='324.18' x2='106.40' y2='271.26' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='106.40' y1='112.49' x2='106.40' y2='172.03' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='93.60' y1='324.18' x2='119.20' y2='324.18' style='stroke-width: 0.75;' />
+<line x1='93.60' y1='112.49' x2='119.20' y2='112.49' style='stroke-width: 0.75;' />
+<polygon points='80.80,271.26 132.00,271.26 132.00,172.03 80.80,172.03 ' style='stroke-width: 0.75;' />
+<polygon points='144.80,258.03 196.00,258.03 196.00,178.65 144.80,178.65 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='144.80' y1='198.49' x2='196.00' y2='198.49' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='170.40' y1='324.18' x2='170.40' y2='258.03' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='170.40' y1='138.95' x2='170.40' y2='178.65' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='157.60' y1='324.18' x2='183.20' y2='324.18' style='stroke-width: 0.75;' />
+<line x1='157.60' y1='138.95' x2='183.20' y2='138.95' style='stroke-width: 0.75;' />
+<polygon points='144.80,258.03 196.00,258.03 196.00,178.65 144.80,178.65 ' style='stroke-width: 0.75;' />
+<polygon points='208.80,403.57 260.00,403.57 260.00,377.11 208.80,377.11 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='208.80' y1='396.95' x2='260.00' y2='396.95' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='234.40' y1='416.80' x2='234.40' y2='403.57' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='234.40' y1='363.88' x2='234.40' y2='377.11' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='221.60' y1='416.80' x2='247.20' y2='416.80' style='stroke-width: 0.75;' />
+<line x1='221.60' y1='363.88' x2='247.20' y2='363.88' style='stroke-width: 0.75;' />
+<polygon points='208.80,403.57 260.00,403.57 260.00,377.11 208.80,377.11 ' style='stroke-width: 0.75;' />
+<circle cx='234.40' cy='324.18' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='272.80,370.49 324.00,370.49 324.00,350.65 272.80,350.65 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='272.80' y1='350.65' x2='324.00' y2='350.65' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='298.40' y1='390.34' x2='298.40' y2='370.49' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='298.40' y1='337.42' x2='298.40' y2='350.65' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='285.60' y1='390.34' x2='311.20' y2='390.34' style='stroke-width: 0.75;' />
+<line x1='285.60' y1='337.42' x2='311.20' y2='337.42' style='stroke-width: 0.75;' />
+<polygon points='272.80,370.49 324.00,370.49 324.00,350.65 272.80,350.65 ' style='stroke-width: 0.75;' />
+<circle cx='298.40' cy='258.03' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='336.80,383.72 388.00,383.72 388.00,350.65 336.80,350.65 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='336.80' y1='377.11' x2='388.00' y2='377.11' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='362.40' y1='403.57' x2='362.40' y2='383.72' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='362.40' y1='337.42' x2='362.40' y2='350.65' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='349.60' y1='403.57' x2='375.20' y2='403.57' style='stroke-width: 0.75;' />
+<line x1='349.60' y1='337.42' x2='375.20' y2='337.42' style='stroke-width: 0.75;' />
+<polygon points='336.80,383.72 388.00,383.72 388.00,350.65 336.80,350.65 ' style='stroke-width: 0.75;' />
+<polygon points='400.80,258.03 452.00,258.03 452.00,112.49 400.80,112.49 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='400.80' y1='218.34' x2='452.00' y2='218.34' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='426.40' y1='297.72' x2='426.40' y2='258.03' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='426.40' y1='72.80' x2='426.40' y2='112.49' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='413.60' y1='297.72' x2='439.20' y2='297.72' style='stroke-width: 0.75;' />
+<line x1='413.60' y1='72.80' x2='439.20' y2='72.80' style='stroke-width: 0.75;' />
+<polygon points='400.80,258.03 452.00,258.03 452.00,112.49 400.80,112.49 ' style='stroke-width: 0.75;' />
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/boxplot_simple_horizontal.svg b/inst/tinytest/_tinysnapshot/boxplot_simple_horizontal.svg
new file mode 100644
index 00000000..7039737b
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/boxplot_simple_horizontal.svg
@@ -0,0 +1,105 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='504.00pt' height='504.00pt' viewBox='0 0 504.00 504.00'>
+<defs>
+  <style type='text/css'><![CDATA[
+    .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
+      fill: none;
+      stroke: #000000;
+      stroke-linecap: round;
+      stroke-linejoin: round;
+      stroke-miterlimit: 10.00;
+    }
+    .svglite text {
+      white-space: pre;
+    }
+  ]]></style>
+</defs>
+<rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
+<defs>
+  <clipPath id='cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='504.00' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<text x='266.40' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='29.35px' lengthAdjust='spacingAndGlyphs'>spray</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='29.36px' lengthAdjust='spacingAndGlyphs'>count</text>
+<line x1='59.04' y1='388.13' x2='59.04' y2='101.47' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='388.13' x2='51.84' y2='388.13' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='330.80' x2='51.84' y2='330.80' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='273.47' x2='51.84' y2='273.47' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='216.13' x2='51.84' y2='216.13' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='158.80' x2='51.84' y2='158.80' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='101.47' x2='51.84' y2='101.47' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,388.13) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>A</text>
+<text transform='translate(41.76,330.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>B</text>
+<text transform='translate(41.76,273.47) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>C</text>
+<text transform='translate(41.76,216.13) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.67px' lengthAdjust='spacingAndGlyphs'>D</text>
+<text transform='translate(41.76,158.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='8.01px' lengthAdjust='spacingAndGlyphs'>E</text>
+<text transform='translate(41.76,101.47) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='7.33px' lengthAdjust='spacingAndGlyphs'>F</text>
+<line x1='74.40' y1='430.56' x2='443.63' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='74.40' y1='430.56' x2='74.40' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='148.25' y1='430.56' x2='148.25' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='222.09' y1='430.56' x2='222.09' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='295.94' y1='430.56' x2='295.94' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='369.78' y1='430.56' x2='369.78' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='443.63' y1='430.56' x2='443.63' y2='437.76' style='stroke-width: 0.75;' />
+<text x='74.40' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='148.25' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='222.09' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='295.94' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='369.78' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='443.63' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<polygon points='59.04,430.56 473.76,430.56 473.76,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='414.72' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8NDczLjc2fDU5LjA0fDQzMC41Ng==)'>
+<polygon points='236.86,411.07 236.86,365.20 347.63,365.20 347.63,411.07 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='281.17' y1='411.07' x2='281.17' y2='365.20' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='177.78' y1='388.13' x2='236.86' y2='388.13' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='414.09' y1='388.13' x2='347.63' y2='388.13' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='177.78' y1='399.60' x2='177.78' y2='376.67' style='stroke-width: 0.75;' />
+<line x1='414.09' y1='399.60' x2='414.09' y2='376.67' style='stroke-width: 0.75;' />
+<polygon points='236.86,411.07 236.86,365.20 347.63,365.20 347.63,411.07 ' style='stroke-width: 0.75;' />
+<polygon points='251.63,353.73 251.63,307.87 340.25,307.87 340.25,353.73 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='318.09' y1='353.73' x2='318.09' y2='307.87' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='177.78' y1='330.80' x2='251.63' y2='330.80' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='384.55' y1='330.80' x2='340.25' y2='330.80' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='177.78' y1='342.27' x2='177.78' y2='319.33' style='stroke-width: 0.75;' />
+<line x1='384.55' y1='342.27' x2='384.55' y2='319.33' style='stroke-width: 0.75;' />
+<polygon points='251.63,353.73 251.63,307.87 340.25,307.87 340.25,353.73 ' style='stroke-width: 0.75;' />
+<polygon points='89.17,296.40 89.17,250.53 118.71,250.53 118.71,296.40 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='96.55' y1='296.40' x2='96.55' y2='250.53' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='74.40' y1='273.47' x2='89.17' y2='273.47' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='133.48' y1='273.47' x2='118.71' y2='273.47' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='74.40' y1='284.93' x2='74.40' y2='262.00' style='stroke-width: 0.75;' />
+<line x1='133.48' y1='284.93' x2='133.48' y2='262.00' style='stroke-width: 0.75;' />
+<polygon points='89.17,296.40 89.17,250.53 118.71,250.53 118.71,296.40 ' style='stroke-width: 0.75;' />
+<circle cx='177.78' cy='273.47' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='126.09,239.07 126.09,193.20 148.25,193.20 148.25,239.07 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='148.25' y1='239.07' x2='148.25' y2='193.20' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='103.94' y1='216.13' x2='126.09' y2='216.13' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='163.02' y1='216.13' x2='148.25' y2='216.13' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='103.94' y1='227.60' x2='103.94' y2='204.67' style='stroke-width: 0.75;' />
+<line x1='163.02' y1='227.60' x2='163.02' y2='204.67' style='stroke-width: 0.75;' />
+<polygon points='126.09,239.07 126.09,193.20 148.25,193.20 148.25,239.07 ' style='stroke-width: 0.75;' />
+<circle cx='251.63' cy='216.13' r='2.70' style='stroke-width: 0.75;' />
+<polygon points='111.32,181.73 111.32,135.87 148.25,135.87 148.25,181.73 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='118.71' y1='181.73' x2='118.71' y2='135.87' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='89.17' y1='158.80' x2='111.32' y2='158.80' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='163.02' y1='158.80' x2='148.25' y2='158.80' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='89.17' y1='170.27' x2='89.17' y2='147.33' style='stroke-width: 0.75;' />
+<line x1='163.02' y1='170.27' x2='163.02' y2='147.33' style='stroke-width: 0.75;' />
+<polygon points='111.32,181.73 111.32,135.87 148.25,135.87 148.25,181.73 ' style='stroke-width: 0.75;' />
+<polygon points='251.63,124.40 251.63,78.53 414.09,78.53 414.09,124.40 ' style='stroke-width: 0.75; stroke: none; fill: #D3D3D3;' />
+<line x1='295.94' y1='124.40' x2='295.94' y2='78.53' style='stroke-width: 2.25; stroke-linecap: butt;' />
+<line x1='207.32' y1='101.47' x2='251.63' y2='101.47' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='458.40' y1='101.47' x2='414.09' y2='101.47' style='stroke-width: 0.75; stroke-dasharray: 4.00,4.00;' />
+<line x1='207.32' y1='112.93' x2='207.32' y2='90.00' style='stroke-width: 0.75;' />
+<line x1='458.40' y1='112.93' x2='458.40' y2='90.00' style='stroke-width: 0.75;' />
+<polygon points='251.63,124.40 251.63,78.53 414.09,78.53 414.09,124.40 ' style='stroke-width: 0.75;' />
+</g>
+</svg>
diff --git a/inst/tinytest/test-barplot.R b/inst/tinytest/test-barplot.R
new file mode 100644
index 00000000..e0bb6f8b
--- /dev/null
+++ b/inst/tinytest/test-barplot.R
@@ -0,0 +1,69 @@
+source("helpers.R")
+using("tinysnapshot")
+
+#
+## simple boxplots
+
+f = function() {
+  plt(count ~ spray, data = InsectSprays, type = "boxplot")
+}
+expect_snapshot_plot(f, label = "boxplot_simple")
+
+f = function() {
+  plt(count ~ spray, data = InsectSprays, type = "boxplot", horizontal = TRUE)
+}
+expect_snapshot_plot(f, label = "boxplot_simple_horizontal")
+
+f = function() {
+  plt(
+    decrease ~ treatment, data = OrchardSprays, fill = "bisque",
+    log = "y", type = "boxplot", horizontal = TRUE
+  )
+}
+expect_snapshot_plot(f, label = "boxplot_log_horizontal")
+
+#
+## grouped boxplots
+
+f = function() {
+  plt(len ~ dose | supp,data = ToothGrowth, type = "boxplot")
+}
+expect_snapshot_plot(f, label = "boxplot_groups")
+
+# fancier version with arg passing
+f = function() {
+  plt(len ~ dose | factor(supp, labels = c("Ascorbic acid", "Orange juice")), 
+      data = ToothGrowth,
+      boxwex = 0.5,
+      staplewex = 0,
+      lty  = 1, pch = 16,
+      main = "Guinea Pigs' Tooth Growth",
+      xlab = "Vitamin C dose mg", ylab = "tooth length",
+      ylim = c(0, 35),
+      type = "boxplot",
+      legend = list(title = NULL),
+      horizontal = TRUE
+  )
+}
+expect_snapshot_plot(f, label = "boxplot_groups_argpass")
+
+#
+## facets
+
+f = function() {
+  plt(weight ~ Time | Diet, ChickWeight, type = "boxplot", facet = "by")
+}
+expect_snapshot_plot(f, label = "boxplot_facet_by")
+
+f = function() {
+  plt(mpg ~ gear | factor(cyl), data = mtcars, type = "boxplot", facet = ~am)
+}
+expect_snapshot_plot(f, label = "boxplot_groups_facets_with_missings")
+
+#
+## numeric ~ factor should auto-coerce to boxplot type
+
+f = function() {
+  plt(mpg ~ factor(am), data = mtcars)
+}
+expect_snapshot_plot(f, label = "boxplot_auto_factor")
diff --git a/man/tinyplot.Rd b/man/tinyplot.Rd
index 7dfe30bd..dcceaec9 100644
--- a/man/tinyplot.Rd
+++ b/man/tinyplot.Rd
@@ -185,10 +185,11 @@ for lines, "b" for both points and lines, "c" for empty points joined by
 lines, "o" for overplotted points and lines, "s" and "S" for stair steps,
 and "h" for histogram-like vertical lines. Specifying "n" produces an empty
 plot over the extent of the data, but with no internal elements.
-\item Additional tinyplot types: "density" for densities, "polygon" for
-polygons,  "pointrange" or "errorbar" for segment intervals, and "polygon",
-"ribbon" or "area" for polygon intervals (where area plots are a special
-case of ribbon plots with \code{ymin} set to 0 and \code{ymax} set to \code{y}; see below).
+\item Additional tinyplot types: "boxplot" for boxplots, "density" for
+densities,  "pointrange" or "errorbar" for segment intervals, and
+"polygon", "ribbon" or "area" for polygon intervals (where area plots are a
+special case of ribbon plots with \code{ymin} set to 0 and \code{ymax} set to \code{y};
+see below).
 }}
 
 \item{xlim}{the x limits (x1, x2) of the plot. Note that x1 > x2 is allowed
