diff --git a/NAMESPACE b/NAMESPACE
index 59d3cea4..5c755d45 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -17,6 +17,7 @@ export(type_jitter)
 export(type_lm)
 export(type_loess)
 export(type_polypath)
+export(type_spline)
 importFrom(grDevices,adjustcolor)
 importFrom(grDevices,as.raster)
 importFrom(grDevices,colorRampPalette)
@@ -70,6 +71,7 @@ importFrom(stats,model.frame)
 importFrom(stats,na.omit)
 importFrom(stats,predict)
 importFrom(stats,qt)
+importFrom(stats,spline)
 importFrom(stats,terms)
 importFrom(stats,update)
 importFrom(tools,file_ext)
diff --git a/NEWS.md b/NEWS.md
index 570eac60..4a6fbda1 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -33,6 +33,7 @@ types enable a variety of additional features. (#222 @vincentarelbundock)
     - `type_glm()` (shortcut: `"glm"`)
     - `type_lm()` (shortcut: `"lm"`)
     - `type_loess()` (shortcut: `"loess"`)
+    - `type_spline()` (shortcut: `"spline"`)
   - Explicit argument passing for modified behaviour type
   (e.g., `type_lm(se = FALSE)`).
   - Users can define their own custom types by creating `type_<typename>()`
diff --git a/R/sanitize.R b/R/sanitize.R
index c1ba599a..4b5b23b0 100644
--- a/R/sanitize.R
+++ b/R/sanitize.R
@@ -13,7 +13,7 @@ sanitize_type = function(type, x, y) {
 
     types = c("area", "boxplot", "density", "jitter", "ribbon", "pointrange", "hist", 
         "histogram", "errorbar", "polygon", "polypath", "rect", "segments", "points", 
-        "p", "l", "o", "b", "c", "h", "j", "s", "S", "n", "loess", "lm", "glm")
+        "p", "l", "o", "b", "c", "h", "j", "s", "S", "n", "loess", "spline", "lm", "glm")
     assert_choice(type, types, null.ok = TRUE)
 
     if (is.null(type)) {
@@ -44,6 +44,7 @@ sanitize_type = function(type, x, y) {
         "j" = type_jitter(),
         "jitter" = type_jitter(),
         "loess" = type_loess(),
+        "spline" = type_spline(),
         "glm" = type_glm(),
         "lm" = type_lm(),
         NULL  # Default case
diff --git a/R/tinyplot.R b/R/tinyplot.R
index a5d3dd57..4535a790 100644
--- a/R/tinyplot.R
+++ b/R/tinyplot.R
@@ -99,6 +99,7 @@
 #'      - `"lm"` or `type_lm()`: Linear model fit
 #'      - `"glm"` or `type_glm()`: Generalized linear model fit
 #'      - `"loess"` or `type_loess()`: Local regression fit
+#'      - `"spline"` or `type_spline()`: Cubic spline fit
 #' @param xmin,xmax,ymin,ymax minimum and maximum coordinates of relevant area
 #'   or interval plot types. Only used when the `type` argument is one of
 #'   `"rect"` or `"segments"` (where all four min-max coordinates are required),
diff --git a/R/type_spline.R b/R/type_spline.R
new file mode 100644
index 00000000..66771c27
--- /dev/null
+++ b/R/type_spline.R
@@ -0,0 +1,59 @@
+#' Spline type
+#' 
+#' @description Type function for plotting a cubic (or Hermite) spline interpolation.
+#' Arguments are passed to \code{\link[stats]{spline}}; see for default argument
+#' values.
+#' 
+#' @inheritParams stats::spline
+#' @importFrom stats spline
+#' @examples
+#' # "spline" type convenience string
+#' tinyplot(dist ~ speed, data = cars, type = "spline")
+#' 
+#' # Use `type_spline()` to pass extra arguments for customization
+#' tinyplot(dist ~ speed, data = cars, type = type_spline(method = "natural", n = 25),
+#'     add = TRUE, lty = 2)
+#' @export
+type_spline = function(
+        n = NULL,
+        method = "fmm",
+        xmin = NULL,
+        xmax = NULL,
+        xout = NULL,
+        ties = mean
+    ) {
+    out = list(
+        draw = draw_lines(),
+        data = data_spline(method = method, ties = ties, n = n, xmin = xmin, xmax = xmax, xout = xout),
+        name = "l"
+    )
+    class(out) = "tinyplot_type"
+    return(out)
+}
+
+
+data_spline = function(n, method, xmin, xmax, xout, ties, ...) {
+    fun = function(datapoints, ...) {
+        datapoints = split(datapoints, list(datapoints$facet, datapoints$by), drop = TRUE)
+        datapoints = lapply(datapoints, function(dat) {
+            if (is.null(n)) n = 3*length(dat$x)
+            if (is.null(xmax)) xmax = max(dat$x)
+            if (is.null(xmin)) xmin = min(dat$x)
+            if (is.null(xout)) {
+                fit = spline(x = dat$x, y = dat$y, n = n, method = method, xmin = xmin, xmax = xmax, ties = ties)
+            } else {
+                fit = spline(x = dat$x, y = dat$y, n = n, method = method, xmin = xmin, xmax = xmax, xout = xout, ties = ties)
+            }
+            fit = as.data.frame(fit)
+            fit$facet = dat$facet[1]
+            fit$by = dat$by[1]
+            fit
+            return(fit)
+        })
+        datapoints = do.call(rbind, datapoints)
+        out = list(datapoints = datapoints)
+        return(out)
+    }
+    return(fun)
+}
+
diff --git a/inst/tinytest/_tinysnapshot/model_spline_by.svg b/inst/tinytest/_tinysnapshot/model_spline_by.svg
new file mode 100644
index 00000000..59618528
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/model_spline_by.svg
@@ -0,0 +1,84 @@
+<?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='447.34' y1='223.20' x2='468.94' y2='223.20' style='stroke-width: 0.75;' />
+<line x1='447.34' y1='237.60' x2='468.94' y2='237.60' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='447.34' y1='252.00' x2='468.94' y2='252.00' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='447.34' y1='266.40' x2='468.94' y2='266.40' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='447.34' y1='280.80' x2='468.94' y2='280.80' style='stroke-width: 0.75; stroke: #28E2E5;' />
+<text x='464.18' y='208.80' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='71.37px' lengthAdjust='spacingAndGlyphs'>factor(Month)</text>
+<text x='479.74' y='227.33' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='479.74' y='241.73' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='479.74' y='256.13' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>7</text>
+<text x='479.74' y='270.53' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>8</text>
+<text x='479.74' y='284.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>9</text>
+</g>
+<defs>
+  <clipPath id='cpMC4wMHw0MTEuMzl8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='411.39' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw0MTEuMzl8MC4wMHw1MDQuMDA=)'>
+<text x='235.22' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='21.35px' lengthAdjust='spacingAndGlyphs'>Day</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='29.35px' lengthAdjust='spacingAndGlyphs'>Temp</text>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='61.22' y1='430.56' x2='387.47' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='61.22' y1='430.56' x2='61.22' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='115.59' y1='430.56' x2='115.59' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='169.97' y1='430.56' x2='169.97' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='224.34' y1='430.56' x2='224.34' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='278.72' y1='430.56' x2='278.72' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='333.09' y1='430.56' x2='333.09' y2='437.76' style='stroke-width: 0.75;' />
+<line x1='387.47' y1='430.56' x2='387.47' y2='437.76' style='stroke-width: 0.75;' />
+<text x='61.22' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='115.59' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='169.97' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='224.34' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='278.72' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='333.09' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='387.47' y='456.48' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>30</text>
+<line x1='59.04' y1='381.21' x2='59.04' y2='132.25' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='381.21' x2='51.84' y2='381.21' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='298.22' x2='51.84' y2='298.22' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='215.24' x2='51.84' y2='215.24' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='132.25' x2='51.84' y2='132.25' style='stroke-width: 0.75;' />
+<text transform='translate(41.76,381.21) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>60</text>
+<text transform='translate(41.76,298.22) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>70</text>
+<text transform='translate(41.76,215.24) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>80</text>
+<text transform='translate(41.76,132.25) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='13.35px' lengthAdjust='spacingAndGlyphs'>90</text>
+<polygon points='59.04,430.56 411.39,430.56 411.39,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8NDExLjM5fDU5LjA0fDQzMC41Ng=='>
+    <rect x='59.04' y='59.04' width='352.35' height='371.52' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8NDExLjM5fDU5LjA0fDQzMC41Ng==)'>
+<polyline points='72.09,323.12 75.64,314.02 79.18,299.51 82.73,282.75 86.28,267.30 89.82,258.72 93.37,263.13 96.91,285.07 100.46,319.39 104.01,357.35 107.55,390.48 111.10,412.20 114.64,416.80 118.19,399.87 121.74,369.16 125.28,338.92 128.83,322.53 132.38,322.27 135.92,333.28 139.47,350.56 143.01,369.28 146.56,384.74 150.11,392.37 153.65,390.67 157.20,380.92 160.75,364.53 164.29,343.47 167.84,320.33 171.38,297.71 174.93,278.71 178.48,266.98 182.02,266.17 185.57,276.56 189.12,293.30 192.66,311.06 196.21,325.25 199.75,332.59 203.30,329.96 206.85,318.72 210.39,310.21 213.94,317.07 217.49,344.54 221.03,377.73 224.58,398.43 228.12,394.50 231.67,373.74 235.22,348.02 238.76,328.11 242.31,320.37 245.86,330.03 249.40,358.80 252.95,391.19 256.49,406.48 260.04,388.78 263.59,351.46 267.13,318.70 270.68,311.59 274.23,328.28 277.77,356.64 281.32,384.61 284.86,401.49 288.41,397.31 291.96,363.96 295.50,315.08 299.05,278.36 302.60,279.71 306.14,315.25 309.69,358.11 313.23,381.99 316.78,382.35 320.33,374.69 323.87,374.76 327.42,386.44 330.97,400.55 334.51,407.47 338.06,404.75 341.60,399.28 345.15,398.46 348.70,403.92 352.24,408.29 355.79,403.49 359.33,384.90 362.88,354.39 366.43,314.53 369.97,269.98 373.52,230.07 377.07,204.76 380.61,199.71 384.16,208.96 387.70,224.62 391.25,239.54 394.80,248.92 398.34,248.43 ' style='stroke-width: 0.75;' />
+<polyline points='72.09,231.83 75.63,222.10 79.18,234.99 82.72,262.76 86.26,296.62 89.81,322.67 93.35,325.43 96.90,293.56 100.44,240.75 103.98,190.12 107.53,162.21 111.07,157.88 114.61,169.03 118.16,187.64 121.70,206.98 125.24,221.01 128.79,224.24 132.33,217.21 135.87,204.48 139.42,190.53 142.96,177.10 146.51,163.73 150.05,150.02 153.59,137.92 157.14,131.65 160.68,135.30 164.22,146.67 167.77,156.33 171.31,154.62 174.85,139.51 178.40,119.38 181.94,103.34 185.48,97.54 189.03,103.21 192.57,121.13 196.12,149.07 199.66,178.88 203.20,201.70 206.75,212.46 210.29,215.19 213.83,215.28 217.38,216.76 220.92,219.76 224.46,223.68 228.01,228.11 231.55,233.36 235.09,239.88 238.64,248.40 242.18,260.79 245.73,279.28 249.27,304.48 252.81,328.32 256.36,339.79 259.90,330.11 263.44,305.57 266.99,278.74 270.53,260.93 274.07,252.71 277.62,249.28 281.16,246.14 284.70,242.61 288.25,240.33 291.79,240.82 295.34,243.71 298.88,247.17 302.42,249.46 305.97,249.98 309.51,249.19 313.05,247.61 316.60,246.26 320.14,246.70 323.68,250.44 327.23,256.15 330.77,258.94 334.31,253.80 337.86,241.55 341.40,231.68 344.95,234.36 348.49,251.28 352.03,268.90 355.58,272.09 359.12,254.68 362.66,230.05 366.21,214.14 369.75,216.40 373.29,228.85 376.84,240.71 380.38,242.24 383.92,227.27 387.47,190.34 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+<polyline points='72.09,182.04 75.64,167.27 79.18,165.40 82.73,172.99 86.28,186.21 89.82,199.50 93.37,206.76 96.91,203.30 100.46,193.10 104.01,183.32 107.55,180.20 111.10,183.23 114.64,188.86 118.19,193.65 121.74,195.39 125.28,192.57 128.83,183.85 132.38,170.39 135.92,154.96 139.47,140.25 143.01,127.89 146.56,118.67 150.11,113.32 153.65,111.85 157.20,113.62 160.75,117.96 164.29,124.62 167.84,133.77 171.38,145.65 174.93,161.03 178.48,181.45 182.02,208.42 185.57,239.17 189.12,264.28 192.66,273.82 196.21,262.91 199.75,236.10 203.30,198.96 206.85,159.34 210.39,130.19 213.94,125.15 217.49,149.65 221.03,186.93 224.58,216.57 228.12,224.50 231.67,217.58 235.22,206.94 238.76,201.29 242.31,199.68 245.86,198.76 249.40,195.69 252.95,190.27 256.49,183.10 260.04,174.81 263.59,166.29 267.13,158.52 270.68,152.91 274.23,153.90 277.77,167.32 281.32,197.48 284.86,234.61 288.41,261.40 291.96,262.16 295.50,241.03 299.05,214.93 302.60,200.04 306.14,198.06 309.69,199.52 313.23,195.08 316.78,183.43 320.33,170.59 323.87,162.76 327.42,162.43 330.97,168.13 334.51,178.14 338.06,189.46 341.60,197.48 345.15,197.50 348.70,188.51 352.24,175.12 355.79,162.40 359.33,153.74 362.88,149.36 366.43,149.13 369.97,152.64 373.52,158.82 377.07,166.52 380.61,174.75 384.16,183.00 387.70,190.84 391.25,197.82 394.80,203.38 398.34,206.94 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+<polyline points='72.09,206.94 75.64,206.05 79.18,206.23 82.73,206.89 86.28,207.27 89.82,205.60 93.37,199.83 96.91,188.71 100.46,175.80 104.01,166.43 107.55,165.01 111.10,169.13 114.64,173.32 118.19,172.63 121.74,167.15 125.28,159.62 128.83,152.70 132.38,147.10 135.92,142.34 139.47,137.95 143.01,134.28 146.56,132.31 150.11,132.92 153.65,134.78 157.20,134.48 160.75,128.77 164.29,119.46 167.84,113.95 171.38,119.72 174.93,136.95 178.48,156.29 182.02,167.90 185.57,168.58 189.12,165.47 192.66,166.58 196.21,175.68 199.75,188.70 203.30,200.74 206.85,208.64 210.39,213.13 213.94,215.47 217.49,217.00 221.03,219.29 224.58,223.95 228.12,231.43 231.67,238.24 235.22,240.13 238.76,234.68 242.31,226.85 245.86,223.44 249.40,229.32 252.95,239.97 256.49,247.96 260.04,247.31 263.59,240.45 267.13,232.93 270.68,229.61 274.23,230.09 277.77,231.61 281.32,231.82 284.86,232.36 288.41,237.01 291.96,249.04 295.50,265.34 299.05,278.72 302.60,282.33 306.14,275.70 309.69,263.25 313.23,249.45 316.78,237.07 320.33,227.30 323.87,221.17 327.42,217.43 330.97,212.31 334.51,201.99 338.06,186.73 341.60,172.04 345.15,163.67 348.70,161.84 352.24,158.11 355.79,143.37 359.33,115.95 362.88,87.91 366.43,72.80 369.97,76.84 373.52,89.92 377.07,99.74 380.61,98.50 384.16,90.48 387.70,82.01 391.25,78.63 394.80,83.45 398.34,99.06 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+<polyline points='72.09,123.95 75.63,121.30 79.18,118.50 82.72,115.83 86.26,113.46 89.81,111.00 93.35,107.87 96.90,103.96 100.44,101.94 103.98,105.56 107.53,117.77 111.07,135.53 114.61,153.11 118.16,165.32 121.70,172.78 125.24,179.31 128.79,188.44 132.33,199.98 135.87,211.27 139.42,219.77 142.96,225.31 146.51,229.64 150.05,234.54 153.59,241.21 157.14,250.37 160.68,262.56 164.22,274.47 167.77,278.40 171.31,266.61 174.85,240.82 178.40,215.71 181.94,206.73 185.48,218.53 189.03,237.86 192.57,249.92 196.12,247.94 199.66,241.24 203.20,241.04 206.75,253.53 210.29,272.92 213.83,291.60 217.38,302.96 220.92,303.23 224.46,289.17 228.01,261.60 231.55,236.06 235.09,231.40 238.64,259.27 242.18,299.44 245.73,322.82 249.27,307.68 252.81,272.38 256.36,248.93 259.90,263.01 263.44,297.23 266.99,316.40 270.53,290.85 274.07,238.41 277.62,200.76 281.16,215.35 284.70,272.15 288.25,332.40 291.79,359.11 295.34,346.08 298.88,309.52 302.42,265.97 305.97,228.65 309.51,207.85 313.05,213.32 316.60,243.24 320.14,283.70 323.68,320.40 327.23,344.92 330.77,356.27 334.31,353.96 337.86,339.39 341.40,316.89 344.95,291.01 348.49,266.36 352.03,247.64 355.58,239.55 359.12,243.17 362.66,251.62 366.21,257.00 369.75,254.86 373.29,249.95 376.84,248.58 380.38,256.45 383.92,277.38 387.47,314.82 ' style='stroke-width: 0.75; stroke: #28E2E5;' />
+</g>
+</svg>
diff --git a/inst/tinytest/_tinysnapshot/model_spline_facet.svg b/inst/tinytest/_tinysnapshot/model_spline_facet.svg
new file mode 100644
index 00000000..94d0a8b9
--- /dev/null
+++ b/inst/tinytest/_tinysnapshot/model_spline_facet.svg
@@ -0,0 +1,287 @@
+<?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='458.09' y1='223.20' x2='479.69' y2='223.20' style='stroke-width: 0.75;' />
+<line x1='458.09' y1='237.60' x2='479.69' y2='237.60' style='stroke-width: 0.75; stroke: #DF536B;' />
+<line x1='458.09' y1='252.00' x2='479.69' y2='252.00' style='stroke-width: 0.75; stroke: #61D04F;' />
+<line x1='458.09' y1='266.40' x2='479.69' y2='266.40' style='stroke-width: 0.75; stroke: #2297E6;' />
+<line x1='458.09' y1='280.80' x2='479.69' y2='280.80' style='stroke-width: 0.75; stroke: #28E2E5;' />
+<text x='474.92' y='208.80' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='33.36px' lengthAdjust='spacingAndGlyphs'>Month</text>
+<text x='490.49' y='227.33' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='490.49' y='241.73' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>6</text>
+<text x='490.49' y='256.13' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>7</text>
+<text x='490.49' y='270.53' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>8</text>
+<text x='490.49' y='284.93' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>9</text>
+</g>
+<defs>
+  <clipPath id='cpMC4wMHw0MzIuODl8MC4wMHw1MDQuMDA='>
+    <rect x='0.00' y='0.00' width='432.89' height='504.00' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMC4wMHw0MzIuODl8MC4wMHw1MDQuMDA=)'>
+<text x='245.96' y='485.28' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='21.35px' lengthAdjust='spacingAndGlyphs'>Day</text>
+<text transform='translate(12.96,244.80) rotate(-90)' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='29.35px' lengthAdjust='spacingAndGlyphs'>Temp</text>
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg=='>
+    <rect x='59.04' y='59.04' width='108.30' height='166.32' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg==)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='59.71' y1='225.36' x2='159.98' y2='225.36' style='stroke-width: 0.75;' />
+<line x1='59.71' y1='225.36' x2='59.71' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='76.42' y1='225.36' x2='76.42' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='93.13' y1='225.36' x2='93.13' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='109.85' y1='225.36' x2='109.85' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='126.56' y1='225.36' x2='126.56' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='143.27' y1='225.36' x2='143.27' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='159.98' y1='225.36' x2='159.98' y2='230.11' style='stroke-width: 0.75;' />
+<text x='59.71' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='76.42' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='93.13' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='109.85' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='126.56' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='143.27' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='159.98' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>30</text>
+<line x1='59.04' y1='203.27' x2='59.04' y2='91.82' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='203.27' x2='54.29' y2='203.27' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='166.12' x2='54.29' y2='166.12' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='128.97' x2='54.29' y2='128.97' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='91.82' x2='54.29' y2='91.82' style='stroke-width: 0.75;' />
+<text transform='translate(47.64,203.27) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>60</text>
+<text transform='translate(47.64,166.12) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>70</text>
+<text transform='translate(47.64,128.97) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>80</text>
+<text transform='translate(47.64,91.82) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>90</text>
+<rect x='59.04' y='43.20' width='108.30' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='113.19' y='55.24' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>5</text>
+<polygon points='59.04,225.36 167.34,225.36 167.34,59.04 59.04,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY='>
+    <rect x='191.82' y='59.04' width='108.30' height='166.32' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='192.48' y1='225.36' x2='292.76' y2='225.36' style='stroke-width: 0.75;' />
+<line x1='192.48' y1='225.36' x2='192.48' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='209.20' y1='225.36' x2='209.20' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='225.91' y1='225.36' x2='225.91' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='242.62' y1='225.36' x2='242.62' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='259.33' y1='225.36' x2='259.33' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='276.04' y1='225.36' x2='276.04' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='292.76' y1='225.36' x2='292.76' y2='230.11' style='stroke-width: 0.75;' />
+<text x='192.48' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='209.20' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='225.91' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='242.62' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='259.33' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='276.04' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='292.76' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>30</text>
+<line x1='191.82' y1='203.27' x2='191.82' y2='91.82' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='203.27' x2='187.06' y2='203.27' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='166.12' x2='187.06' y2='166.12' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='128.97' x2='187.06' y2='128.97' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='91.82' x2='187.06' y2='91.82' style='stroke-width: 0.75;' />
+<text transform='translate(180.41,203.27) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>60</text>
+<text transform='translate(180.41,166.12) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>70</text>
+<text transform='translate(180.41,128.97) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>80</text>
+<text transform='translate(180.41,91.82) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>90</text>
+<rect x='191.82' y='43.20' width='108.30' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='245.96' y='55.24' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>6</text>
+<polygon points='191.82,225.36 300.11,225.36 300.11,59.04 191.82,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY='>
+    <rect x='324.59' y='59.04' width='108.30' height='166.32' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='325.26' y1='225.36' x2='425.53' y2='225.36' style='stroke-width: 0.75;' />
+<line x1='325.26' y1='225.36' x2='325.26' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='341.97' y1='225.36' x2='341.97' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='358.68' y1='225.36' x2='358.68' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='375.40' y1='225.36' x2='375.40' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='392.11' y1='225.36' x2='392.11' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='408.82' y1='225.36' x2='408.82' y2='230.11' style='stroke-width: 0.75;' />
+<line x1='425.53' y1='225.36' x2='425.53' y2='230.11' style='stroke-width: 0.75;' />
+<text x='325.26' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='341.97' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='358.68' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='375.40' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='392.11' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='408.82' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='425.53' y='242.47' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>30</text>
+<line x1='324.59' y1='203.27' x2='324.59' y2='91.82' style='stroke-width: 0.75;' />
+<line x1='324.59' y1='203.27' x2='319.84' y2='203.27' style='stroke-width: 0.75;' />
+<line x1='324.59' y1='166.12' x2='319.84' y2='166.12' style='stroke-width: 0.75;' />
+<line x1='324.59' y1='128.97' x2='319.84' y2='128.97' style='stroke-width: 0.75;' />
+<line x1='324.59' y1='91.82' x2='319.84' y2='91.82' style='stroke-width: 0.75;' />
+<text transform='translate(313.19,203.27) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>60</text>
+<text transform='translate(313.19,166.12) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>70</text>
+<text transform='translate(313.19,128.97) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>80</text>
+<text transform='translate(313.19,91.82) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>90</text>
+<rect x='324.59' y='43.20' width='108.30' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='378.74' y='55.24' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>7</text>
+<polygon points='324.59,225.36 432.89,225.36 432.89,59.04 324.59,59.04 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY='>
+    <rect x='59.04' y='264.24' width='108.30' height='166.32' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='59.71' y1='430.56' x2='159.98' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='59.71' y1='430.56' x2='59.71' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='76.42' y1='430.56' x2='76.42' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='93.13' y1='430.56' x2='93.13' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='109.85' y1='430.56' x2='109.85' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='126.56' y1='430.56' x2='126.56' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='143.27' y1='430.56' x2='143.27' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='159.98' y1='430.56' x2='159.98' y2='435.31' style='stroke-width: 0.75;' />
+<text x='59.71' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='76.42' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='93.13' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='109.85' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='126.56' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='143.27' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='159.98' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>30</text>
+<line x1='59.04' y1='408.47' x2='59.04' y2='297.02' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='408.47' x2='54.29' y2='408.47' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='371.32' x2='54.29' y2='371.32' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='334.17' x2='54.29' y2='334.17' style='stroke-width: 0.75;' />
+<line x1='59.04' y1='297.02' x2='54.29' y2='297.02' style='stroke-width: 0.75;' />
+<text transform='translate(47.64,408.47) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>60</text>
+<text transform='translate(47.64,371.32) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>70</text>
+<text transform='translate(47.64,334.17) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>80</text>
+<text transform='translate(47.64,297.02) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>90</text>
+<rect x='59.04' y='248.40' width='108.30' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='113.19' y='260.44' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>8</text>
+<polygon points='59.04,430.56 167.34,430.56 167.34,264.24 59.04,264.24 ' style='stroke-width: 0.75;' />
+</g>
+<defs>
+  <clipPath id='cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2'>
+    <rect x='191.82' y='264.24' width='108.30' height='166.32' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpMC4wMHw1MDQuMDB8MC4wMHw1MDQuMDA=)'>
+<line x1='192.48' y1='430.56' x2='292.76' y2='430.56' style='stroke-width: 0.75;' />
+<line x1='192.48' y1='430.56' x2='192.48' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='209.20' y1='430.56' x2='209.20' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='225.91' y1='430.56' x2='225.91' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='242.62' y1='430.56' x2='242.62' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='259.33' y1='430.56' x2='259.33' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='276.04' y1='430.56' x2='276.04' y2='435.31' style='stroke-width: 0.75;' />
+<line x1='292.76' y1='430.56' x2='292.76' y2='435.31' style='stroke-width: 0.75;' />
+<text x='192.48' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>0</text>
+<text x='209.20' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='4.40px' lengthAdjust='spacingAndGlyphs'>5</text>
+<text x='225.91' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>10</text>
+<text x='242.62' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>15</text>
+<text x='259.33' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>20</text>
+<text x='276.04' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>25</text>
+<text x='292.76' y='447.67' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>30</text>
+<line x1='191.82' y1='408.47' x2='191.82' y2='297.02' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='408.47' x2='187.06' y2='408.47' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='371.32' x2='187.06' y2='371.32' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='334.17' x2='187.06' y2='334.17' style='stroke-width: 0.75;' />
+<line x1='191.82' y1='297.02' x2='187.06' y2='297.02' style='stroke-width: 0.75;' />
+<text transform='translate(180.41,408.47) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>60</text>
+<text transform='translate(180.41,371.32) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>70</text>
+<text transform='translate(180.41,334.17) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>80</text>
+<text transform='translate(180.41,297.02) rotate(-90)' text-anchor='middle' style='font-size: 7.92px; font-family: "Liberation Sans";' textLength='8.80px' lengthAdjust='spacingAndGlyphs'>90</text>
+<rect x='191.82' y='248.40' width='108.30' height='15.84' style='stroke-width: 0.75; stroke: none;' />
+<text x='245.96' y='260.44' text-anchor='middle' style='font-size: 12.00px; font-family: "Liberation Sans";' textLength='6.67px' lengthAdjust='spacingAndGlyphs'>9</text>
+<polygon points='191.82,430.56 300.11,430.56 300.11,264.24 191.82,264.24 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg==)'>
+<polyline points='63.05,177.26 64.14,173.19 65.23,166.69 66.32,159.19 67.41,152.27 68.50,148.43 69.59,150.41 70.68,160.23 71.77,175.59 72.86,192.59 73.95,207.42 75.04,217.14 76.13,219.20 77.22,211.62 78.31,197.87 79.40,184.33 80.49,177.00 81.58,176.88 82.67,181.81 83.76,189.55 84.85,197.93 85.94,204.85 87.03,208.26 88.12,207.50 89.21,203.14 90.30,195.80 91.39,186.37 92.48,176.01 93.57,165.89 94.66,157.38 95.75,152.13 96.84,151.77 97.93,156.42 99.02,163.91 100.11,171.86 101.20,178.22 102.29,181.50 103.38,180.32 104.47,175.29 105.56,171.48 106.65,174.55 107.74,186.85 108.83,201.71 109.92,210.98 111.01,209.22 112.10,199.92 113.19,188.41 114.28,179.50 115.37,176.03 116.46,180.35 117.55,193.23 118.64,207.74 119.73,214.58 120.82,206.66 121.91,189.95 123.00,175.28 124.09,172.10 125.18,179.57 126.27,192.27 127.36,204.79 128.45,212.35 129.54,210.47 130.63,195.54 131.72,173.66 132.81,157.22 133.90,157.83 134.99,173.74 136.08,192.93 137.17,203.62 138.26,203.78 139.35,200.35 140.44,200.38 141.53,205.61 142.62,211.93 143.71,215.02 144.80,213.81 145.89,211.36 146.98,210.99 148.07,213.43 149.16,215.39 150.25,213.24 151.34,204.92 152.42,191.26 153.51,173.42 154.60,153.47 155.69,135.61 156.78,124.28 157.87,122.01 158.96,126.15 160.05,133.17 161.14,139.85 162.23,144.04 163.32,143.83 ' style='stroke-width: 0.75;' />
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg==)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY=)'>
+<polyline points='195.83,136.40 196.92,132.04 198.00,137.81 199.09,150.24 200.18,165.40 201.27,177.06 202.36,178.30 203.45,164.03 204.54,140.39 205.63,117.72 206.72,105.23 207.81,103.29 208.90,108.28 209.98,116.61 211.07,125.27 212.16,131.55 213.25,133.00 214.34,129.85 215.43,124.15 216.52,117.91 217.61,111.89 218.70,105.91 219.79,99.77 220.88,94.35 221.96,91.54 223.05,93.18 224.14,98.27 225.23,102.59 226.32,101.83 227.41,95.06 228.50,86.05 229.59,78.87 230.68,76.27 231.77,78.81 232.86,86.84 233.95,99.34 235.03,112.69 236.12,122.91 237.21,127.72 238.30,128.95 239.39,128.98 240.48,129.65 241.57,130.99 242.66,132.75 243.75,134.73 244.84,137.08 245.93,140.00 247.01,143.81 248.10,149.36 249.19,157.63 250.28,168.92 251.37,179.59 252.46,184.73 253.55,180.39 254.64,169.41 255.73,157.39 256.82,149.42 257.91,145.74 258.99,144.21 260.08,142.80 261.17,141.22 262.26,140.20 263.35,140.42 264.44,141.71 265.53,143.26 266.62,144.28 267.71,144.52 268.80,144.17 269.89,143.46 270.97,142.85 272.06,143.05 273.15,144.73 274.24,147.28 275.33,148.53 276.42,146.23 277.51,140.74 278.60,136.33 279.69,137.53 280.78,145.10 281.87,152.99 282.96,154.42 284.04,146.62 285.13,135.60 286.22,128.48 287.31,129.48 288.40,135.06 289.49,140.37 290.58,141.05 291.67,134.35 292.76,117.82 ' style='stroke-width: 0.75; stroke: #DF536B;' />
+</g>
+<g clip-path='url(#cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg==)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY=)'>
+<polyline points='328.60,114.11 329.69,107.49 330.78,106.66 331.87,110.05 332.96,115.97 334.05,121.92 335.14,125.17 336.23,123.62 337.32,119.06 338.41,114.68 339.50,113.28 340.59,114.64 341.68,117.16 342.77,119.30 343.86,120.08 344.95,118.82 346.04,114.91 347.13,108.89 348.22,101.98 349.31,95.39 350.40,89.86 351.49,85.73 352.58,83.34 353.67,82.68 354.76,83.48 355.85,85.42 356.94,88.40 358.03,92.50 359.12,97.81 360.21,104.70 361.30,113.84 362.39,125.91 363.48,139.68 364.57,150.92 365.66,155.19 366.75,150.31 367.84,138.31 368.93,121.68 370.02,103.94 371.11,90.89 372.20,88.64 373.29,99.60 374.38,116.29 375.47,129.56 376.56,133.11 377.65,130.01 378.74,125.25 379.83,122.72 380.92,122.00 382.01,121.59 383.10,120.22 384.19,117.79 385.28,114.58 386.37,110.87 387.46,107.05 388.55,103.58 389.64,101.06 390.73,101.51 391.82,107.52 392.91,121.01 394.00,137.64 395.09,149.63 396.18,149.97 397.27,140.51 398.36,128.83 399.45,122.16 400.54,121.28 401.63,121.93 402.72,119.94 403.81,114.73 404.90,108.98 405.99,105.47 407.08,105.33 408.17,107.88 409.26,112.36 410.35,117.43 411.44,121.01 412.53,121.03 413.62,117.00 414.71,111.00 415.80,105.31 416.89,101.43 417.98,99.47 419.07,99.37 420.16,100.94 421.25,103.71 422.34,107.16 423.43,110.84 424.51,114.53 425.60,118.05 426.69,121.17 427.78,123.66 428.87,125.25 ' style='stroke-width: 0.75; stroke: #61D04F;' />
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg==)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY=)'>
+<polyline points='63.05,330.45 64.14,330.05 65.23,330.13 66.32,330.43 67.41,330.60 68.50,329.85 69.59,327.27 70.68,322.29 71.77,316.51 72.86,312.31 73.95,311.68 75.04,313.52 76.13,315.40 77.22,315.09 78.31,312.64 79.40,309.27 80.49,306.17 81.58,303.66 82.67,301.53 83.76,299.56 84.85,297.92 85.94,297.04 87.03,297.32 88.12,298.15 89.21,298.01 90.30,295.45 91.39,291.29 92.48,288.82 93.57,291.40 94.66,299.12 95.75,307.78 96.84,312.97 97.93,313.28 99.02,311.89 100.11,312.38 101.20,316.46 102.29,322.28 103.38,327.68 104.47,331.21 105.56,333.22 106.65,334.27 107.74,334.95 108.83,335.98 109.92,338.07 111.01,341.41 112.10,344.46 113.19,345.31 114.28,342.87 115.37,339.37 116.46,337.84 117.55,340.47 118.64,345.24 119.73,348.82 120.82,348.52 121.91,345.45 123.00,342.08 124.09,340.60 125.18,340.82 126.27,341.50 127.36,341.59 128.45,341.83 129.54,343.91 130.63,349.30 131.72,356.60 132.81,362.59 133.90,364.20 134.99,361.23 136.08,355.66 137.17,349.48 138.26,343.94 139.35,339.56 140.44,336.82 141.53,335.15 142.62,332.85 143.71,328.23 144.80,321.40 145.89,314.83 146.98,311.08 148.07,310.26 149.16,308.59 150.25,301.99 151.34,289.72 152.42,277.16 153.51,270.40 154.60,272.21 155.69,278.06 156.78,282.46 157.87,281.91 158.96,278.32 160.05,274.52 161.14,273.01 162.23,275.17 163.32,282.15 ' style='stroke-width: 0.75; stroke: #2297E6;' />
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDU5LjA0fDIyNS4zNg==)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpMzI0LjU5fDQzMi44OXw1OS4wNHwyMjUuMzY=)'>
+</g>
+<g clip-path='url(#cpNTkuMDR8MTY3LjM0fDI2NC4yNHw0MzAuNTY=)'>
+</g>
+<g clip-path='url(#cpMTkxLjgyfDMwMC4xMXwyNjQuMjR8NDMwLjU2)'>
+<polyline points='195.83,293.30 196.92,292.11 198.00,290.86 199.09,289.66 200.18,288.60 201.27,287.50 202.36,286.10 203.45,284.35 204.54,283.44 205.63,285.07 206.72,290.53 207.81,298.48 208.90,306.35 209.98,311.82 211.07,315.16 212.16,318.08 213.25,322.17 214.34,327.33 215.43,332.39 216.52,336.20 217.61,338.68 218.70,340.62 219.79,342.81 220.88,345.79 221.96,349.89 223.05,355.35 224.14,360.68 225.23,362.44 226.32,357.16 227.41,345.62 228.50,334.38 229.59,330.36 230.68,335.64 231.77,344.29 232.86,349.69 233.95,348.80 235.03,345.81 236.12,345.72 237.21,351.31 238.30,359.99 239.39,368.35 240.48,373.44 241.57,373.56 242.66,367.26 243.75,354.92 244.84,343.49 245.93,341.40 247.01,353.88 248.10,371.86 249.19,382.33 250.28,375.55 251.37,359.75 252.46,349.25 253.55,355.55 254.64,370.87 255.73,379.45 256.82,368.02 257.91,344.54 258.99,327.68 260.08,334.21 261.17,359.65 262.26,386.62 263.35,398.57 264.44,392.74 265.53,376.37 266.62,356.88 267.71,340.17 268.80,330.86 269.89,333.31 270.97,346.70 272.06,364.82 273.15,381.24 274.24,392.22 275.33,397.30 276.42,396.27 277.51,389.75 278.60,379.67 279.69,368.09 280.78,357.05 281.87,348.67 282.96,345.05 284.04,346.67 285.13,350.46 286.22,352.86 287.31,351.90 288.40,349.71 289.49,349.09 290.58,352.61 291.67,361.98 292.76,378.75 ' style='stroke-width: 0.75; stroke: #28E2E5;' />
+</g>
+<defs>
+  <clipPath id='cpMTI5Ljk1fDM4NC41NnwxMDguMTN8MzM3Ljgz'>
+    <rect x='129.95' y='108.13' width='254.61' height='229.70' />
+  </clipPath>
+</defs>
+<g clip-path='url(#cpMTI5Ljk1fDM4NC41NnwxMDguMTN8MzM3Ljgz)'>
+</g>
+</svg>
diff --git a/inst/tinytest/test-models.R b/inst/tinytest/test-models.R
index 9138859c..9c6413b6 100644
--- a/inst/tinytest/test-models.R
+++ b/inst/tinytest/test-models.R
@@ -38,6 +38,10 @@ f = function() {
 }
 expect_snapshot_plot(f, label = "model_loess_by")
 
+f = function() {
+  plt(Temp ~ Day | factor(Month), data = airquality, type = type_spline())
+}
+expect_snapshot_plot(f, label = "model_spline_by")
 
 # facet
 f = function() {
@@ -56,3 +60,8 @@ f = function() {
   plt(Temp ~ Day | Month, data = airquality, facet = "by", type = type_loess())
 }
 expect_snapshot_plot(f, label = "model_loess_facet")
+
+f = function() {
+  plt(Temp ~ Day | Month, data = airquality, facet = "by", type = type_spline())
+}
+expect_snapshot_plot(f, label = "model_spline_facet")
\ No newline at end of file
diff --git a/man/tinyplot.Rd b/man/tinyplot.Rd
index a2211f12..425c8a13 100644
--- a/man/tinyplot.Rd
+++ b/man/tinyplot.Rd
@@ -216,6 +216,7 @@ set to \code{y}; see below).
 \item \code{"lm"} or \code{type_lm()}: Linear model fit
 \item \code{"glm"} or \code{type_glm()}: Generalized linear model fit
 \item \code{"loess"} or \code{type_loess()}: Local regression fit
+\item \code{"spline"} or \code{type_spline()}: Cubic spline fit
 }
 }}
 
diff --git a/man/type_spline.Rd b/man/type_spline.Rd
new file mode 100644
index 00000000..2b18fdeb
--- /dev/null
+++ b/man/type_spline.Rd
@@ -0,0 +1,49 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/type_spline.R
+\name{type_spline}
+\alias{type_spline}
+\title{Spline type}
+\usage{
+type_spline(
+  n = NULL,
+  method = "fmm",
+  xmin = NULL,
+  xmax = NULL,
+  xout = NULL,
+  ties = mean
+)
+}
+\arguments{
+\item{n}{if \code{xout} is left unspecified, interpolation takes place
+       at \code{n} equally spaced points spanning the interval
+       [\code{xmin}, \code{xmax}].}
+
+\item{method}{specifies the type of spline to be used.  Possible
+    values are \code{"fmm"}, \code{"natural"}, \code{"periodic"},
+    \code{"monoH.FC"} and \code{"hyman"}.  Can be abbreviated.}
+
+\item{xmin, xmax}{left-hand and right-hand endpoint of the
+       interpolation interval (when \code{xout} is unspecified).}
+
+\item{xout}{an optional set of values specifying where interpolation
+    is to take place.}
+
+\item{ties}{handling of tied \code{x} values.  The string
+    \code{"ordered"} or a function (or the name of a function) taking a
+    single vector argument and returning a single number or a length-2
+    \code{\link{list}} of both, see \code{\link[stats]{approx}} and its
+    \sQuote{Details} section, and the example below.}
+}
+\description{
+Type function for plotting a cubic (or Hermite) spline interpolation.
+Arguments are passed to \code{\link[stats]{spline}}; see for default argument
+values.
+}
+\examples{
+# "spline" type convenience string
+tinyplot(dist ~ speed, data = cars, type = "spline")
+
+# Use `type_spline()` to pass extra arguments for customization
+tinyplot(dist ~ speed, data = cars, type = type_spline(method = "natural", n = 25),
+    add = TRUE, lty = 2)
+}
