diff --git a/README.md b/README.md
index 20e5fb7b59..049f56061b 100644
--- a/README.md
+++ b/README.md
@@ -276,7 +276,7 @@ Plot automatically generates axes for position scales. You can configure these a
* *scale*.**tickPadding** - the separation between the tick and its label (in pixels; default 3)
* *scale*.**tickFormat** - how to format tick values as a string (a function or format specifier)
* *scale*.**tickRotate** - whether to rotate tick labels (an angle in degrees clockwise; default 0)
-* *scale*.**grid** - if true, draw grid lines across the plot for each tick
+* *scale*.**grid** - if true, a positive number, or an array of tick values, draw grid lines across the plot for each tick; if an array of tick values is specified, the default domain will include them
* *scale*.**line** - if true, draw the axis line
* *scale*.**label** - a string to label the axis
* *scale*.**labelAnchor** - the label anchor: *top*, *right*, *bottom*, *left*, or *center*
diff --git a/src/axis.js b/src/axis.js
index ddf5ffc8ca..9cedcadf6e 100644
--- a/src/axis.js
+++ b/src/axis.js
@@ -2,7 +2,7 @@ import {axisTop, axisBottom, axisRight, axisLeft, create, format, utcFormat} fro
import {formatIsoDate} from "./format.js";
import {boolean, take, number, string, keyword, maybeKeyword, constant, isTemporal} from "./mark.js";
import {radians} from "./math.js";
-import {impliedString} from "./style.js";
+import {impliedString, offset} from "./style.js";
export class AxisX {
constructor({
@@ -27,7 +27,7 @@ export class AxisX {
this.tickPadding = number(tickPadding);
this.tickFormat = tickFormat;
this.fontVariant = impliedString(fontVariant, "normal");
- this.grid = boolean(grid);
+ this.grid = maybeTicks(grid);
this.label = string(label);
this.labelAnchor = maybeKeyword(labelAnchor, "labelAnchor", ["center", "left", "right"]);
this.labelOffset = number(labelOffset);
@@ -59,22 +59,27 @@ export class AxisX {
labelAnchor,
labelOffset,
line,
- tickRotate
+ tickRotate,
+ ticks
} = this;
const offset = this.name === "x" ? 0 : axis === "top" ? marginTop - facetMarginTop : marginBottom - facetMarginBottom;
const offsetSign = axis === "top" ? -1 : 1;
const ty = offsetSign * offset + (axis === "top" ? marginTop : height - marginBottom);
return create("svg:g")
.attr("transform", `translate(0,${ty})`)
+ .call(!grid ? () => {}
+ : createGridX(
+ grid(x, ticks),
+ x,
+ fy ? fy.bandwidth() : offsetSign * (marginBottom + marginTop - height),
+ fy ? take(fy.domain().map(d => fy(d) - ty), index) : [0]
+ ))
.call(createAxis(axis === "top" ? axisTop : axisBottom, x, this))
.call(maybeTickRotate, tickRotate)
.attr("font-size", null)
.attr("font-family", null)
.attr("font-variant", fontVariant)
.call(!line ? g => g.select(".domain").remove() : () => {})
- .call(!grid ? () => {}
- : fy ? gridFacetX(index, fy, -ty)
- : gridX(offsetSign * (marginBottom + marginTop - height)))
.call(!label ? () => {} : g => g.append("text")
.attr("fill", "currentColor")
.attr("transform", `translate(${
@@ -114,7 +119,7 @@ export class AxisY {
this.tickPadding = number(tickPadding);
this.tickFormat = tickFormat;
this.fontVariant = impliedString(fontVariant, "normal");
- this.grid = boolean(grid);
+ this.grid = maybeTicks(grid);
this.label = string(label);
this.labelAnchor = maybeKeyword(labelAnchor, "labelAnchor", ["center", "top", "bottom"]);
this.labelOffset = number(labelOffset);
@@ -144,22 +149,27 @@ export class AxisY {
labelAnchor,
labelOffset,
line,
- tickRotate
+ tickRotate,
+ ticks
} = this;
const offset = this.name === "y" ? 0 : axis === "left" ? marginLeft - facetMarginLeft : marginRight - facetMarginRight;
const offsetSign = axis === "left" ? -1 : 1;
const tx = offsetSign * offset + (axis === "right" ? width - marginRight : marginLeft);
return create("svg:g")
.attr("transform", `translate(${tx},0)`)
+ .call(!grid ? () => {}
+ : createGridY(
+ grid(y, ticks),
+ y,
+ fx ? fx.bandwidth() : offsetSign * (marginLeft + marginRight - width),
+ fx ? take(fx.domain().map(d => fx(d) - tx), index) : [0]
+ ))
.call(createAxis(axis === "right" ? axisRight : axisLeft, y, this))
.call(maybeTickRotate, tickRotate)
.attr("font-size", null)
.attr("font-family", null)
.attr("font-variant", fontVariant)
.call(!line ? g => g.select(".domain").remove() : () => {})
- .call(!grid ? () => {}
- : fx ? gridFacetY(index, fx, -tx)
- : gridY(offsetSign * (marginLeft + marginRight - width)))
.call(!label ? () => {} : g => g.append("text")
.attr("fill", "currentColor")
.attr("transform", `translate(${labelOffset * offsetSign},${
@@ -178,40 +188,6 @@ export class AxisY {
}
}
-function gridX(y2) {
- return g => g.selectAll(".tick line")
- .clone(true)
- .attr("stroke-opacity", 0.1)
- .attr("y2", y2);
-}
-
-function gridY(x2) {
- return g => g.selectAll(".tick line")
- .clone(true)
- .attr("stroke-opacity", 0.1)
- .attr("x2", x2);
-}
-
-function gridFacetX(index, fy, ty) {
- const dy = fy.bandwidth();
- const domain = fy.domain();
- return g => g.selectAll(".tick")
- .append("path")
- .attr("stroke", "currentColor")
- .attr("stroke-opacity", 0.1)
- .attr("d", (index ? take(domain, index) : domain).map(v => `M0,${fy(v) + ty}v${dy}`).join(""));
-}
-
-function gridFacetY(index, fx, tx) {
- const dx = fx.bandwidth();
- const domain = fx.domain();
- return g => g.selectAll(".tick")
- .append("path")
- .attr("stroke", "currentColor")
- .attr("stroke-opacity", 0.1)
- .attr("d", (index ? take(domain, index) : domain).map(v => `M${fx(v) + tx},0h${dx}`).join(""));
-}
-
// D3 doesn’t provide a tick format for ordinal scales; we want shorthand when
// an ordinal domain is numbers or dates, and we want null to mean the empty
// string, not the default identity format.
@@ -254,3 +230,41 @@ function maybeTickRotate(g, rotate) {
text.setAttribute("dy", "0.32em");
}
}
+
+function createGridX(ticks, x, dy, steps) {
+ return g => g.append("g")
+ .attr("class", "grid")
+ .attr("stroke", "currentColor")
+ .attr("stroke-opacity", "0.1")
+ .selectAll()
+ .data(steps)
+ .join("g")
+ .attr("transform", v => `translate(${offset},${v})`)
+ .selectAll()
+ .data(ticks)
+ .join("path")
+ .attr("d", d => `M${x(d)},0v${dy}`);
+}
+
+function createGridY(ticks, y, dx, steps) {
+ return g => g.append("g")
+ .attr("class", "grid")
+ .attr("stroke", "currentColor")
+ .attr("stroke-opacity", "0.1")
+ .selectAll()
+ .data(steps)
+ .join("g")
+ .attr("transform", v => `translate(${v},${offset})`)
+ .selectAll()
+ .data(ticks)
+ .join("path")
+ .attr("d", d => `M0,${y(d)}h${dx}`);
+}
+
+function maybeTicks(grid) {
+ if (!grid) return false;
+ if (grid === true) return (scale, ticks) => (scale.ticks ? scale.ticks(ticks) : scale.domain());
+ if (Array.isArray(grid)) return () => grid;
+ if (grid === +grid) return (scale) => (scale.ticks ? scale.ticks.apply(scale, [grid]) : scale.domain());
+ throw new Error(`Unexpected grid option: ${grid}`);
+}
diff --git a/src/mark.js b/src/mark.js
index 7996b1a420..a763a500a1 100644
--- a/src/mark.js
+++ b/src/mark.js
@@ -220,7 +220,7 @@ export function where(data, test) {
// Returns an array [values[index[0]], values[index[1]], …].
export function take(values, index) {
- return Array.from(index, i => values[i]);
+ return index ? Array.from(index, i => values[i]) : values;
}
export function maybeInput(key, options) {
diff --git a/src/scales.js b/src/scales.js
index 811f5fe1b6..1d121e5f3e 100644
--- a/src/scales.js
+++ b/src/scales.js
@@ -18,19 +18,23 @@ export function Scales(channels, {
clamp,
align,
padding,
+ grid,
...options
} = {}) {
const scales = {};
for (const key of registry.keys()) {
- const scaleChannels = channels.get(key);
const scaleOptions = options[key];
- if (scaleChannels || scaleOptions) {
+ const ticks = scaleOptions && Array.isArray(scaleOptions.grid) ? scaleOptions.grid : Array.isArray(grid) ? grid : null;
+ const scaleChannels = channels.has(key) ? channels.get(key) : [];
+ if (ticks && ticks.length) scaleChannels.push({value: ticks});
+ if (scaleChannels.length || scaleOptions) {
const scale = Scale(key, scaleChannels, {
round: registry.get(key) === position ? round : undefined, // only for position
nice,
clamp,
align,
padding,
+ grid,
...scaleOptions
});
if (scale) {
diff --git a/test/output/aaplBollinger.svg b/test/output/aaplBollinger.svg
index 812d2fa9a8..352e8b265d 100644
--- a/test/output/aaplBollinger.svg
+++ b/test/output/aaplBollinger.svg
@@ -13,61 +13,65 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
-
- 100
+ 100
-
- 110
+ 110
-
- 120
+ 120
-
- 130
+ 130
-
- 140
+ 140
-
- 150
+ 150
-
- 160
+ 160
-
- 170
+ 170
-
- 180
+ 180
-
- 190
+ 190
↑ Close
diff --git a/test/output/aaplCandlestick.svg b/test/output/aaplCandlestick.svg
index 37701ca780..dd25850bc5 100644
--- a/test/output/aaplCandlestick.svg
+++ b/test/output/aaplCandlestick.svg
@@ -13,63 +13,71 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
-
- 155
+ 155
-
- 160
+ 160
-
- 165
+ 165
-
- 170
+ 170
-
- 175
+ 175
-
- 180
+ 180
-
- 185
+ 185
-
- 190
+ 190
↑ Apple stock price ($)
+
+
+
+
+
+
+
+
+
+
-
- December
+ December
-
- 2018
+ 2018
-
- February
+ February
-
- March
+ March
-
- April
+ April
-
- May
+ May
diff --git a/test/output/aaplChangeVolume.svg b/test/output/aaplChangeVolume.svg
index 8de5da0360..33dae914c5 100644
--- a/test/output/aaplChangeVolume.svg
+++ b/test/output/aaplChangeVolume.svg
@@ -13,95 +13,103 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 7.1
+ 7.1
-
- 7.2
+ 7.2
-
- 7.3
+ 7.3
-
- 7.4
+ 7.4
-
- 7.5
+ 7.5
-
- 7.6
+ 7.6
-
- 7.7
+ 7.7
-
- 7.8
+ 7.8
-
- 7.9
+ 7.9
-
- 8.0
+ 8.0
-
- 8.1
+ 8.1
-
- 8.2
+ 8.2
-
- 8.3
+ 8.3
-
- 8.4
+ 8.4
↑ Volume (log₁₀)
+
+
+
+
+
+
+
+
+
+
+
+
-
- −6
+ −6
-
- −4
+ −4
-
- −2
+ −2
-
- +0
+ +0
-
- +2
+ +2
-
- +4
+ +4
-
- +6
+ +6
-
- +8
+ +8
Daily change (%) →
diff --git a/test/output/aaplClose.svg b/test/output/aaplClose.svg
index 410cb0b36f..865c060a38 100644
--- a/test/output/aaplClose.svg
+++ b/test/output/aaplClose.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 20
+ 20
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
-
- 180
+ 180
↑ Close
diff --git a/test/output/aaplCloseUntyped.svg b/test/output/aaplCloseUntyped.svg
index c3fbfcf783..0f69ae8687 100644
--- a/test/output/aaplCloseUntyped.svg
+++ b/test/output/aaplCloseUntyped.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 20
+ 20
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
-
- 180
+ 180
↑ Close
diff --git a/test/output/aaplVolume.svg b/test/output/aaplVolume.svg
index ab09cc59f2..6d64d311e5 100644
--- a/test/output/aaplVolume.svg
+++ b/test/output/aaplVolume.svg
@@ -13,41 +13,45 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
↑ Frequency (%)
diff --git a/test/output/aaplVolumeRect.svg b/test/output/aaplVolumeRect.svg
index c1deac92e1..b7cf918006 100644
--- a/test/output/aaplVolumeRect.svg
+++ b/test/output/aaplVolumeRect.svg
@@ -13,61 +13,65 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
-
- 20
+ 20
-
- 25
+ 25
-
- 30
+ 30
-
- 35
+ 35
-
- 40
+ 40
-
- 45
+ 45
-
- 50
+ 50
-
- 55
+ 55
-
- 60
+ 60
-
- 65
+ 65
↑ Daily trade volume (millions)
diff --git a/test/output/anscombeQuartet.svg b/test/output/anscombeQuartet.svg
index cbe281fb52..1b626d5be6 100644
--- a/test/output/anscombeQuartet.svg
+++ b/test/output/anscombeQuartet.svg
@@ -13,25 +13,50 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
4
-
6
-
8
-
10
-
12
-
↑ y
@@ -51,65 +76,81 @@
+
+
+
+
+
+
+
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
+
+
+
+
+
+
+
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
+
+
+
+
+
+
+
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
+
+
+
+
+
+
+
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
x →
diff --git a/test/output/athletesHeightWeight.svg b/test/output/athletesHeightWeight.svg
index 42ecac2e6f..2a286dca63 100644
--- a/test/output/athletesHeightWeight.svg
+++ b/test/output/athletesHeightWeight.svg
@@ -13,115 +13,123 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1.25
+ 1.25
-
- 1.30
+ 1.30
-
- 1.35
+ 1.35
-
- 1.40
+ 1.40
-
- 1.45
+ 1.45
-
- 1.50
+ 1.50
-
- 1.55
+ 1.55
-
- 1.60
+ 1.60
-
- 1.65
+ 1.65
-
- 1.70
+ 1.70
-
- 1.75
+ 1.75
-
- 1.80
+ 1.80
-
- 1.85
+ 1.85
-
- 1.90
+ 1.90
-
- 1.95
+ 1.95
-
- 2.00
+ 2.00
-
- 2.05
+ 2.05
-
- 2.10
+ 2.10
-
- 2.15
+ 2.15
-
- 2.20
+ 2.20
↑ height
+
+
+
+
+
+
+
+
+
+
+
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
weight →
diff --git a/test/output/athletesHeightWeightBin.svg b/test/output/athletesHeightWeightBin.svg
index 3f06987e8b..be776cb537 100644
--- a/test/output/athletesHeightWeightBin.svg
+++ b/test/output/athletesHeightWeightBin.svg
@@ -13,79 +13,87 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1.2
+ 1.2
-
- 1.3
+ 1.3
-
- 1.4
+ 1.4
-
- 1.5
+ 1.5
-
- 1.6
+ 1.6
-
- 1.7
+ 1.7
-
- 1.8
+ 1.8
-
- 1.9
+ 1.9
-
- 2.0
+ 2.0
-
- 2.1
+ 2.1
-
- 2.2
+ 2.2
↑ height
+
+
+
+
+
+
+
+
+
+
+
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
weight →
diff --git a/test/output/athletesHeightWeightBinStroke.svg b/test/output/athletesHeightWeightBinStroke.svg
index 69262933f1..55a4b2ce99 100644
--- a/test/output/athletesHeightWeightBinStroke.svg
+++ b/test/output/athletesHeightWeightBinStroke.svg
@@ -13,79 +13,87 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1.2
+ 1.2
-
- 1.3
+ 1.3
-
- 1.4
+ 1.4
-
- 1.5
+ 1.5
-
- 1.6
+ 1.6
-
- 1.7
+ 1.7
-
- 1.8
+ 1.8
-
- 1.9
+ 1.9
-
- 2.0
+ 2.0
-
- 2.1
+ 2.1
-
- 2.2
+ 2.2
↑ height
+
+
+
+
+
+
+
+
+
+
+
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
weight →
diff --git a/test/output/athletesHeightWeightSex.svg b/test/output/athletesHeightWeightSex.svg
index a14777803f..c9e2dadc5f 100644
--- a/test/output/athletesHeightWeightSex.svg
+++ b/test/output/athletesHeightWeightSex.svg
@@ -13,79 +13,87 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1.2
+ 1.2
-
- 1.3
+ 1.3
-
- 1.4
+ 1.4
-
- 1.5
+ 1.5
-
- 1.6
+ 1.6
-
- 1.7
+ 1.7
-
- 1.8
+ 1.8
-
- 1.9
+ 1.9
-
- 2.0
+ 2.0
-
- 2.1
+ 2.1
-
- 2.2
+ 2.2
↑ height
+
+
+
+
+
+
+
+
+
+
+
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
weight →
diff --git a/test/output/athletesHeightWeightSport.svg b/test/output/athletesHeightWeightSport.svg
index 406c4b541a..bd00e92643 100644
--- a/test/output/athletesHeightWeightSport.svg
+++ b/test/output/athletesHeightWeightSport.svg
@@ -13,115 +13,123 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1.25
+ 1.25
-
- 1.30
+ 1.30
-
- 1.35
+ 1.35
-
- 1.40
+ 1.40
-
- 1.45
+ 1.45
-
- 1.50
+ 1.50
-
- 1.55
+ 1.55
-
- 1.60
+ 1.60
-
- 1.65
+ 1.65
-
- 1.70
+ 1.70
-
- 1.75
+ 1.75
-
- 1.80
+ 1.80
-
- 1.85
+ 1.85
-
- 1.90
+ 1.90
-
- 1.95
+ 1.95
-
- 2.00
+ 2.00
-
- 2.05
+ 2.05
-
- 2.10
+ 2.10
-
- 2.15
+ 2.15
-
- 2.20
+ 2.20
↑ height
+
+
+
+
+
+
+
+
+
+
+
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
weight →
diff --git a/test/output/athletesHeightWeightTicks.svg b/test/output/athletesHeightWeightTicks.svg
new file mode 100644
index 0000000000..2b722ccd75
--- /dev/null
+++ b/test/output/athletesHeightWeightTicks.svg
@@ -0,0 +1,10987 @@
+
\ No newline at end of file
diff --git a/test/output/athletesHeightWeightTicksOnly.svg b/test/output/athletesHeightWeightTicksOnly.svg
new file mode 100644
index 0000000000..97c4c46619
--- /dev/null
+++ b/test/output/athletesHeightWeightTicksOnly.svg
@@ -0,0 +1,127 @@
+
\ No newline at end of file
diff --git a/test/output/athletesNationality.svg b/test/output/athletesNationality.svg
index fd9e0409fa..3518839a7f 100644
--- a/test/output/athletesNationality.svg
+++ b/test/output/athletesNationality.svg
@@ -75,29 +75,33 @@
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 100
+ 100
-
- 200
+ 200
-
- 300
+ 300
-
- 400
+ 400
-
- 500
+ 500
Frequency →
diff --git a/test/output/athletesSexWeight.svg b/test/output/athletesSexWeight.svg
index 4f407d8e95..daf88aabda 100644
--- a/test/output/athletesSexWeight.svg
+++ b/test/output/athletesSexWeight.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 100
+ 100
-
- 200
+ 200
-
- 300
+ 300
-
- 400
+ 400
-
- 500
+ 500
-
- 600
+ 600
-
- 700
+ 700
-
- 800
+ 800
-
- 900
+ 900
-
- 1,000
+ 1,000
↑ Frequency
diff --git a/test/output/athletesSportSex.svg b/test/output/athletesSportSex.svg
index 3d8cd6d2b9..db0a995421 100644
--- a/test/output/athletesSportSex.svg
+++ b/test/output/athletesSportSex.svg
@@ -99,49 +99,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 10
+ 10
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
-
- 100
+ 100
Women (%) →
diff --git a/test/output/athletesSportWeight.svg b/test/output/athletesSportWeight.svg
index 7e1ce1795f..d6f1ef6d41 100644
--- a/test/output/athletesSportWeight.svg
+++ b/test/output/athletesSportWeight.svg
@@ -99,34 +99,281 @@
sport
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
40
-
60
-
80
-
100
-
120
-
140
-
160
-
weight →
diff --git a/test/output/ballotStatusRace.svg b/test/output/ballotStatusRace.svg
index 489839bbd6..32a405c8cd 100644
--- a/test/output/ballotStatusRace.svg
+++ b/test/output/ballotStatusRace.svg
@@ -39,21 +39,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
-
20
-
40
-
60
-
Frequency (%) →
diff --git a/test/output/beckerBarley.svg b/test/output/beckerBarley.svg
index 7f8a0ec7b4..639dff4c4a 100644
--- a/test/output/beckerBarley.svg
+++ b/test/output/beckerBarley.svg
@@ -33,297 +33,370 @@
site
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
10
-
20
-
30
-
40
-
50
-
60
-
70
-
yield →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Trebi
+ Trebi
-
- Wisconsin No. 38
+ Wisconsin No. 38
-
- No. 457
+ No. 457
-
- Glabron
+ Glabron
-
- Peatland
+ Peatland
-
- Velvet
+ Velvet
-
- No. 475
+ No. 475
-
- Manchuria
+ Manchuria
-
- No. 462
+ No. 462
-
- Svansota
+ Svansota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Trebi
+ Trebi
-
- Wisconsin No. 38
+ Wisconsin No. 38
-
- No. 457
+ No. 457
-
- Glabron
+ Glabron
-
- Peatland
+ Peatland
-
- Velvet
+ Velvet
-
- No. 475
+ No. 475
-
- Manchuria
+ Manchuria
-
- No. 462
+ No. 462
-
- Svansota
+ Svansota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Trebi
+ Trebi
-
- Wisconsin No. 38
+ Wisconsin No. 38
-
- No. 457
+ No. 457
-
- Glabron
+ Glabron
-
- Peatland
+ Peatland
-
- Velvet
+ Velvet
-
- No. 475
+ No. 475
-
- Manchuria
+ Manchuria
-
- No. 462
+ No. 462
-
- Svansota
+ Svansota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Trebi
+ Trebi
-
- Wisconsin No. 38
+ Wisconsin No. 38
-
- No. 457
+ No. 457
-
- Glabron
+ Glabron
-
- Peatland
+ Peatland
-
- Velvet
+ Velvet
-
- No. 475
+ No. 475
-
- Manchuria
+ Manchuria
-
- No. 462
+ No. 462
-
- Svansota
+ Svansota
variety
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Trebi
+ Trebi
-
- Wisconsin No. 38
+ Wisconsin No. 38
-
- No. 457
+ No. 457
-
- Glabron
+ Glabron
-
- Peatland
+ Peatland
-
- Velvet
+ Velvet
-
- No. 475
+ No. 475
-
- Manchuria
+ Manchuria
-
- No. 462
+ No. 462
-
- Svansota
+ Svansota
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Trebi
+ Trebi
-
- Wisconsin No. 38
+ Wisconsin No. 38
-
- No. 457
+ No. 457
-
- Glabron
+ Glabron
-
- Peatland
+ Peatland
-
- Velvet
+ Velvet
-
- No. 475
+ No. 475
-
- Manchuria
+ Manchuria
-
- No. 462
+ No. 462
-
- Svansota
+ Svansota
diff --git a/test/output/carsMpg.svg b/test/output/carsMpg.svg
index f0de5307f1..8027d4e237 100644
--- a/test/output/carsMpg.svg
+++ b/test/output/carsMpg.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
-
- 20
+ 20
-
- 25
+ 25
-
- 30
+ 30
-
- 35
+ 35
-
- 40
+ 40
-
- 45
+ 45
↑ economy (mpg)
diff --git a/test/output/covidIhmeProjectedDeaths.svg b/test/output/covidIhmeProjectedDeaths.svg
index e1c3b1b8d6..c4f99f4448 100644
--- a/test/output/covidIhmeProjectedDeaths.svg
+++ b/test/output/covidIhmeProjectedDeaths.svg
@@ -13,211 +13,219 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
-
+
-
-
+
-
-
+
-
-
+
-
- 10
+ 10
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
-
+
-
-
+
-
-
+
-
-
+
-
- 100
+ 100
-
- 200
+ 200
-
- 300
+ 300
-
- 400
+ 400
-
- 500
+ 500
-
-
+
-
-
+
-
-
+
-
-
+
-
- 1,000
+ 1,000
-
- 2,000
+ 2,000
-
- 3,000
+ 3,000
-
- 4,000
+ 4,000
↑ Deaths per day to COVID-19 (projected)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- March
+ March
-
- Mar 08
+ Mar 08
-
- Mar 15
+ Mar 15
-
- Mar 22
+ Mar 22
-
- Mar 29
+ Mar 29
-
- Apr 05
+ Apr 05
-
- Apr 12
+ Apr 12
-
- Apr 19
+ Apr 19
-
- Apr 26
+ Apr 26
-
- May 03
+ May 03
-
- May 10
+ May 10
-
- May 17
+ May 17
-
- May 24
+ May 24
-
- May 31
+ May 31
-
- Jun 07
+ Jun 07
-
- Jun 14
+ Jun 14
-
- Jun 21
+ Jun 21
-
- Jun 28
+ Jun 28
-
- Jul 05
+ Jul 05
-
- Jul 12
+ Jul 12
diff --git a/test/output/d3Survey2015Comfort.svg b/test/output/d3Survey2015Comfort.svg
index b2f0d5ec6b..1dcc48eec6 100644
--- a/test/output/d3Survey2015Comfort.svg
+++ b/test/output/d3Survey2015Comfort.svg
@@ -30,49 +30,53 @@
How comfortable are you with d3 now?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 10
+ 10
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
-
- 100
+ 100
Frequency (%) →
diff --git a/test/output/d3Survey2015Why.svg b/test/output/d3Survey2015Why.svg
index 7927ff06e5..872d6db1c6 100644
--- a/test/output/d3Survey2015Why.svg
+++ b/test/output/d3Survey2015Why.svg
@@ -60,49 +60,53 @@
Why do you want to learn d3?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 10
+ 10
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
-
- 100
+ 100
Frequency (%) →
diff --git a/test/output/decathlon.html b/test/output/decathlon.html
index 190469706f..636e859f7b 100644
--- a/test/output/decathlon.html
+++ b/test/output/decathlon.html
@@ -65,63 +65,71 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 10.3
+ 10.3
-
- 10.4
+ 10.4
-
- 10.5
+ 10.5
-
- 10.6
+ 10.6
-
- 10.7
+ 10.7
-
- 10.8
+ 10.8
-
- 10.9
+ 10.9
-
- 11.0
+ 11.0
-
- 11.1
+ 11.1
↑ 100 Meters
+
+
+
+
+
+
+
+
+
-
- 7.2
+ 7.2
-
- 7.4
+ 7.4
-
- 7.6
+ 7.6
-
- 7.8
+ 7.8
-
- 8.0
+ 8.0
Long Jump →
diff --git a/test/output/diamondsCaratPrice.svg b/test/output/diamondsCaratPrice.svg
index 2888cf8641..69e75c3849 100644
--- a/test/output/diamondsCaratPrice.svg
+++ b/test/output/diamondsCaratPrice.svg
@@ -12,7 +12,7 @@
white-space: pre;
}
-
+
1,000
@@ -69,1861 +69,1861 @@
19,000
- ↑ price
+ ↑ price
-
+
0.5
-
+
1.0
-
+
1.5
-
+
2.0
-
+
2.5
-
+
3.0
-
+
3.5
-
+
4.0
-
+
4.5
-
+
5.0
carat →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/diamondsCaratPriceDots.svg b/test/output/diamondsCaratPriceDots.svg
index 7bd3539feb..ba1b823a7d 100644
--- a/test/output/diamondsCaratPriceDots.svg
+++ b/test/output/diamondsCaratPriceDots.svg
@@ -12,1943 +12,2112 @@
white-space: pre;
}
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1,000
+ 1,000
-
- 2,000
+ 2,000
-
- 3,000
+ 3,000
-
- 4,000
+ 4,000
-
- 5,000
+ 5,000
-
- 6,000
+ 6,000
-
- 7,000
+ 7,000
-
- 8,000
+ 8,000
-
- 9,000
+ 9,000
-
- 10,000
+ 10,000
-
- 11,000
+ 11,000
-
- 12,000
+ 12,000
-
- 13,000
+ 13,000
-
- 14,000
+ 14,000
-
- 15,000
+ 15,000
-
- 16,000
+ 16,000
-
- 17,000
+ 17,000
-
- 18,000
- ↑ Price ($)
+ 18,000
+ ↑ Price ($)
-
-
- 0.5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.5
-
-
- 1.0
+
+ 1.0
-
-
- 1.5
+
+ 1.5
-
-
- 2.0
+
+ 2.0
-
-
- 2.5
+
+ 2.5
-
-
- 3.0
+
+ 3.0
-
-
- 3.5
+
+ 3.5
-
-
- 4.0
+
+ 4.0
-
-
- 4.5
+
+ 4.5
-
-
- 5.0
+
+ 5.0
Carats →
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test/output/documentationLinks.svg b/test/output/documentationLinks.svg
index 7702a2f523..93a629580d 100644
--- a/test/output/documentationLinks.svg
+++ b/test/output/documentationLinks.svg
@@ -90,41 +90,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
-
- 20
+ 20
-
- 25
+ 25
-
- 30
+ 30
-
- 35
+ 35
-
- 40
+ 40
likes →
diff --git a/test/output/empty.svg b/test/output/empty.svg
index fb8758cf14..b186dd5dab 100644
--- a/test/output/empty.svg
+++ b/test/output/empty.svg
@@ -13,95 +13,103 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0.0
+ 0.0
-
- 0.1
+ 0.1
-
- 0.2
+ 0.2
-
- 0.3
+ 0.3
-
- 0.4
+ 0.4
-
- 0.5
+ 0.5
-
- 0.6
+ 0.6
-
- 0.7
+ 0.7
-
- 0.8
+ 0.8
-
- 0.9
+ 0.9
-
- 1.0
+ 1.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0.0
+ 0.0
-
- 0.1
+ 0.1
-
- 0.2
+ 0.2
-
- 0.3
+ 0.3
-
- 0.4
+ 0.4
-
- 0.5
+ 0.5
-
- 0.6
+ 0.6
-
- 0.7
+ 0.7
-
- 0.8
+ 0.8
-
- 0.9
+ 0.9
-
- 1.0
+ 1.0
diff --git a/test/output/figcaption.html b/test/output/figcaption.html
index 65458003f1..e7097a4d5c 100644
--- a/test/output/figcaption.html
+++ b/test/output/figcaption.html
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
-
- 9
+ 9
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
↑ Frequency (%)
diff --git a/test/output/figcaptionHtml.html b/test/output/figcaptionHtml.html
index 6f56f21678..868deb2115 100644
--- a/test/output/figcaptionHtml.html
+++ b/test/output/figcaptionHtml.html
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
-
- 9
+ 9
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
↑ Frequency (%)
diff --git a/test/output/footballCoverage.svg b/test/output/footballCoverage.svg
index 8f7267f3b0..d84e0db987 100644
--- a/test/output/footballCoverage.svg
+++ b/test/output/footballCoverage.svg
@@ -13,49 +13,131 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0%
-
5%
-
10%
-
15%
-
20%
-
25%
-
30%
-
35%
-
40%
-
45%
-
50%
-
diff --git a/test/output/gistempAnomaly.svg b/test/output/gistempAnomaly.svg
index 8045a47714..9755867f35 100644
--- a/test/output/gistempAnomaly.svg
+++ b/test/output/gistempAnomaly.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- −0.6
+ −0.6
-
- −0.4
+ −0.4
-
- −0.2
+ −0.2
-
- +0.0
+ +0.0
-
- +0.2
+ +0.2
-
- +0.4
+ +0.4
-
- +0.6
+ +0.6
-
- +0.8
+ +0.8
-
- +1.0
+ +1.0
-
- +1.2
+ +1.2
↑ Temperature anomaly (°C)
diff --git a/test/output/gistempAnomalyMoving.svg b/test/output/gistempAnomalyMoving.svg
index dd5fa2347d..8f0bc932c4 100644
--- a/test/output/gistempAnomalyMoving.svg
+++ b/test/output/gistempAnomalyMoving.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- −0.6
+ −0.6
-
- −0.4
+ −0.4
-
- −0.2
+ −0.2
-
- +0.0
+ +0.0
-
- +0.2
+ +0.2
-
- +0.4
+ +0.4
-
- +0.6
+ +0.6
-
- +0.8
+ +0.8
-
- +1.0
+ +1.0
-
- +1.2
+ +1.2
↑ Temperature anomaly (°C)
diff --git a/test/output/gistempAnomalyTransform.svg b/test/output/gistempAnomalyTransform.svg
index d92151dace..324142fb40 100644
--- a/test/output/gistempAnomalyTransform.svg
+++ b/test/output/gistempAnomalyTransform.svg
@@ -13,33 +13,37 @@
}
+
+
+
+
+
+
+
+
+
+
+
-
- −1.0
+ −1.0
-
- −0.5
+ −0.5
-
- +0.0
+ +0.0
-
- +0.5
+ +0.5
-
- +1.0
+ +1.0
-
- +1.5
+ +1.5
-
- +2.0
+ +2.0
↑ Temperature anomaly (°F)
diff --git a/test/output/industryUnemployment.svg b/test/output/industryUnemployment.svg
index f82b9fd7d0..a0899beeef 100644
--- a/test/output/industryUnemployment.svg
+++ b/test/output/industryUnemployment.svg
@@ -13,37 +13,41 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2,000
+ 2,000
-
- 4,000
+ 4,000
-
- 6,000
+ 6,000
-
- 8,000
+ 8,000
-
- 10,000
+ 10,000
-
- 12,000
+ 12,000
-
- 14,000
+ 14,000
↑ unemployed
diff --git a/test/output/industryUnemploymentShare.svg b/test/output/industryUnemploymentShare.svg
index 982a97f99c..82c8a3b864 100644
--- a/test/output/industryUnemploymentShare.svg
+++ b/test/output/industryUnemploymentShare.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0%
+ 0%
-
- 10%
+ 10%
-
- 20%
+ 20%
-
- 30%
+ 30%
-
- 40%
+ 40%
-
- 50%
+ 50%
-
- 60%
+ 60%
-
- 70%
+ 70%
-
- 80%
+ 80%
-
- 90%
+ 90%
-
- 100%
+ 100%
↑ unemployed
diff --git a/test/output/learningPoverty.svg b/test/output/learningPoverty.svg
index 4b405a6eea..ee67da8148 100644
--- a/test/output/learningPoverty.svg
+++ b/test/output/learningPoverty.svg
@@ -315,49 +315,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 100%
+ 100%
-
- 80%
+ 80%
-
- 60%
+ 60%
-
- 40%
+ 40%
-
- 20%
+ 20%
-
- 0%
+ 0%
-
- 20%
+ 20%
-
- 40%
+ 40%
-
- 60%
+ 60%
-
- 80%
+ 80%
-
- 100%
+ 100%
diff --git a/test/output/letterFrequencyBar.svg b/test/output/letterFrequencyBar.svg
index 1d4ddd7b83..53dbf2eabc 100644
--- a/test/output/letterFrequencyBar.svg
+++ b/test/output/letterFrequencyBar.svg
@@ -93,33 +93,37 @@
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
Frequency (%) →
diff --git a/test/output/letterFrequencyColumn.svg b/test/output/letterFrequencyColumn.svg
index 62513959a1..fd42181fc5 100644
--- a/test/output/letterFrequencyColumn.svg
+++ b/test/output/letterFrequencyColumn.svg
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
-
- 9
+ 9
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
↑ Frequency (%)
diff --git a/test/output/letterFrequencyLollipop.svg b/test/output/letterFrequencyLollipop.svg
index bda230e520..4423b96acd 100644
--- a/test/output/letterFrequencyLollipop.svg
+++ b/test/output/letterFrequencyLollipop.svg
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0.00
+ 0.00
-
- 0.01
+ 0.01
-
- 0.02
+ 0.02
-
- 0.03
+ 0.03
-
- 0.04
+ 0.04
-
- 0.05
+ 0.05
-
- 0.06
+ 0.06
-
- 0.07
+ 0.07
-
- 0.08
+ 0.08
-
- 0.09
+ 0.09
-
- 0.10
+ 0.10
-
- 0.11
+ 0.11
-
- 0.12
+ 0.12
↑ frequency
diff --git a/test/output/metroInequality.svg b/test/output/metroInequality.svg
index 55e7872a8e..0fa267b78f 100644
--- a/test/output/metroInequality.svg
+++ b/test/output/metroInequality.svg
@@ -13,127 +13,135 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 3.4
+ 3.4
-
- 3.6
+ 3.6
-
- 3.8
+ 3.8
-
- 4.0
+ 4.0
-
- 4.2
+ 4.2
-
- 4.4
+ 4.4
-
- 4.6
+ 4.6
-
- 4.8
+ 4.8
-
- 5.0
+ 5.0
-
- 5.2
+ 5.2
-
- 5.4
+ 5.4
-
- 5.6
+ 5.6
↑ Inequality
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 200k
+ 200k
-
- 300k
+ 300k
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 1M
+ 1M
-
- 2M
+ 2M
-
- 3M
+ 3M
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 10M
+ 10M
Population →
diff --git a/test/output/metroInequalityChange.svg b/test/output/metroInequalityChange.svg
index 7b414bec03..143e5154a3 100644
--- a/test/output/metroInequalityChange.svg
+++ b/test/output/metroInequalityChange.svg
@@ -13,127 +13,135 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 3.5
+ 3.5
-
- 4.0
+ 4.0
-
- 4.5
+ 4.5
-
- 5.0
+ 5.0
-
- 5.5
+ 5.5
-
- 6.0
+ 6.0
-
- 6.5
+ 6.5
-
- 7.0
+ 7.0
-
- 7.5
+ 7.5
-
- 8.0
+ 8.0
-
- 8.5
+ 8.5
↑ Inequality
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 200k
+ 200k
-
- 300k
+ 300k
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 1M
+ 1M
-
- 2M
+ 2M
-
- 3M
+ 3M
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 10M
+ 10M
-
- 20M
+ 20M
Population →
diff --git a/test/output/metroUnemploymentHighlight.svg b/test/output/metroUnemploymentHighlight.svg
index d881a80c91..6ab8f8ea5c 100644
--- a/test/output/metroUnemploymentHighlight.svg
+++ b/test/output/metroUnemploymentHighlight.svg
@@ -13,41 +13,45 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
↑ Unemployment (%)
diff --git a/test/output/metroUnemploymentNormalize.svg b/test/output/metroUnemploymentNormalize.svg
index eab9cd8301..39538e83ec 100644
--- a/test/output/metroUnemploymentNormalize.svg
+++ b/test/output/metroUnemploymentNormalize.svg
@@ -13,33 +13,37 @@
}
+
+
+
+
+
+
+
+
+
+
+
-
- 0.8×
+ 0.8×
-
- 0.9×
+ 0.9×
-
- 1×
+ 1×
-
- 2×
+ 2×
-
- 3×
+ 3×
-
- 4×
+ 4×
-
- 5×
+ 5×
↑ Change in unemployment (%)
diff --git a/test/output/mobyDickFaceted.svg b/test/output/mobyDickFaceted.svg
index 53c093dfed..7b115b7631 100644
--- a/test/output/mobyDickFaceted.svg
+++ b/test/output/mobyDickFaceted.svg
@@ -31,65 +31,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
-
200
-
400
-
600
-
800
-
1,000
-
1,200
-
↑ Frequency
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
-
200
-
400
-
600
-
800
-
1,000
-
1,200
-
diff --git a/test/output/mobyDickLetterFrequency.svg b/test/output/mobyDickLetterFrequency.svg
index a578a863e4..7a4959ce1d 100644
--- a/test/output/mobyDickLetterFrequency.svg
+++ b/test/output/mobyDickLetterFrequency.svg
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 100
+ 100
-
- 200
+ 200
-
- 300
+ 300
-
- 400
+ 400
-
- 500
+ 500
-
- 600
+ 600
-
- 700
+ 700
-
- 800
+ 800
-
- 900
+ 900
-
- 1,000
+ 1,000
-
- 1,100
+ 1,100
-
- 1,200
+ 1,200
↑ Frequency
diff --git a/test/output/mobyDickLetterRelativeFrequency.svg b/test/output/mobyDickLetterRelativeFrequency.svg
index 606db4daba..a95abb1d0f 100644
--- a/test/output/mobyDickLetterRelativeFrequency.svg
+++ b/test/output/mobyDickLetterRelativeFrequency.svg
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
-
- 9
+ 9
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
↑ Frequency (%)
diff --git a/test/output/morleyBoxplot.svg b/test/output/morleyBoxplot.svg
index e149fd7c34..09f8f3cbf9 100644
--- a/test/output/morleyBoxplot.svg
+++ b/test/output/morleyBoxplot.svg
@@ -30,41 +30,45 @@
Expt
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 650
+ 650
-
- 700
+ 700
-
- 750
+ 750
-
- 800
+ 800
-
- 850
+ 850
-
- 900
+ 900
-
- 950
+ 950
-
- 1,000
+ 1,000
-
- 1,050
+ 1,050
Speed →
diff --git a/test/output/moviesProfitByGenre.svg b/test/output/moviesProfitByGenre.svg
index d887f8f2cf..ab8dd34e90 100644
--- a/test/output/moviesProfitByGenre.svg
+++ b/test/output/moviesProfitByGenre.svg
@@ -54,29 +54,33 @@
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 200
+ 200
-
- 400
+ 400
-
- 600
+ 600
-
- 800
+ 800
-
- 1,000
+ 1,000
Profit ($M) →
diff --git a/test/output/musicRevenue.svg b/test/output/musicRevenue.svg
index 465a3625a3..0d853a131d 100644
--- a/test/output/musicRevenue.svg
+++ b/test/output/musicRevenue.svg
@@ -13,53 +13,57 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
-
- 18
+ 18
-
- 20
+ 20
-
- 22
+ 22
↑ Annual revenue (billions, adj.)
diff --git a/test/output/ordinalBar.svg b/test/output/ordinalBar.svg
index 2d823947f6..ca6312e370 100644
--- a/test/output/ordinalBar.svg
+++ b/test/output/ordinalBar.svg
@@ -13,33 +13,37 @@
}
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- A
+ A
-
- B
+ B
-
- C
+ C
-
- D
+ D
-
- E
+ E
-
- F
+ F
diff --git a/test/output/penguinCulmen.svg b/test/output/penguinCulmen.svg
index 825c182fff..9895c3a5ab 100644
--- a/test/output/penguinCulmen.svg
+++ b/test/output/penguinCulmen.svg
@@ -37,109 +37,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35
-
40
-
45
-
50
-
55
-
↑ culmen_length_mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35
-
40
-
45
-
50
-
55
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35
-
40
-
45
-
50
-
55
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
15
-
20
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
15
-
20
-
+
+
+
+
+
+
+
+
+
+
15
-
20
-
culmen_depth_mm →
diff --git a/test/output/penguinCulmenArray.svg b/test/output/penguinCulmenArray.svg
index 326f2920ba..eef5378a5e 100644
--- a/test/output/penguinCulmenArray.svg
+++ b/test/output/penguinCulmenArray.svg
@@ -37,109 +37,188 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35
-
40
-
45
-
50
-
55
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35
-
40
-
45
-
50
-
55
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
35
-
40
-
45
-
50
-
55
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
15
-
20
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
15
-
20
-
+
+
+
+
+
+
+
+
+
+
15
-
20
-
diff --git a/test/output/penguinMass.svg b/test/output/penguinMass.svg
index d02d9c3435..71d818c10b 100644
--- a/test/output/penguinMass.svg
+++ b/test/output/penguinMass.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 10
+ 10
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
↑ Frequency
diff --git a/test/output/penguinMassSpecies.svg b/test/output/penguinMassSpecies.svg
index 997f981cf2..2716c49467 100644
--- a/test/output/penguinMassSpecies.svg
+++ b/test/output/penguinMassSpecies.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 10
+ 10
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
↑ Frequency
diff --git a/test/output/penguinSexMassCulmenSpecies.svg b/test/output/penguinSexMassCulmenSpecies.svg
index 0f31bdcf6c..f24653db6b 100644
--- a/test/output/penguinSexMassCulmenSpecies.svg
+++ b/test/output/penguinSexMassCulmenSpecies.svg
@@ -13,57 +13,91 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
34
-
36
-
38
-
40
-
42
-
44
-
46
-
48
-
50
-
52
-
54
-
56
-
58
-
↑ culmen_length_mm
@@ -80,97 +114,109 @@
+
+
+
+
+
+
+
+
+
+
+
-
- 3k
+ 3k
-
- 3.5k
+ 3.5k
-
- 4k
+ 4k
-
- 4.5k
+ 4.5k
-
- 5k
+ 5k
-
- 5.5k
+ 5.5k
-
- 6k
+ 6k
+
+
+
+
+
+
+
+
+
+
+
-
- 3k
+ 3k
-
- 3.5k
+ 3.5k
-
- 4k
+ 4k
-
- 4.5k
+ 4.5k
-
- 5k
+ 5k
-
- 5.5k
+ 5.5k
-
- 6k
+ 6k
+
+
+
+
+
+
+
+
+
+
+
-
- 3k
+ 3k
-
- 3.5k
+ 3.5k
-
- 4k
+ 4k
-
- 4.5k
+ 4.5k
-
- 5k
+ 5k
-
- 5.5k
+ 5.5k
-
- 6k
+ 6k
body_mass_g →
diff --git a/test/output/penguinSpeciesIsland.svg b/test/output/penguinSpeciesIsland.svg
index 4db10f5453..cca9910878 100644
--- a/test/output/penguinSpeciesIsland.svg
+++ b/test/output/penguinSpeciesIsland.svg
@@ -13,37 +13,41 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 20
+ 20
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
↑ Frequency
diff --git a/test/output/penguinSpeciesIslandSex.svg b/test/output/penguinSpeciesIslandSex.svg
index b3353c80d0..af272fd096 100644
--- a/test/output/penguinSpeciesIslandSex.svg
+++ b/test/output/penguinSpeciesIslandSex.svg
@@ -13,65 +13,103 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
0
-
5
-
10
-
15
-
20
-
25
-
30
-
35
-
40
-
45
-
50
-
55
-
60
-
65
-
70
-
↑ Frequency
diff --git a/test/output/polylinear.svg b/test/output/polylinear.svg
index 7d8f7a8607..b9b0a00d4f 100644
--- a/test/output/polylinear.svg
+++ b/test/output/polylinear.svg
@@ -13,97 +13,101 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 05
+ 05
-
- 06
+ 06
-
- 07
+ 07
-
- 08
+ 08
-
- 09
+ 09
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
-
- 13
+ 13
-
- 14
+ 14
-
- 15
+ 15
-
- 16
+ 16
-
- 17
+ 17
-
- 18
+ 18
-
- 19
+ 19
-
- 20
+ 20
-
- 21
+ 21
-
- 22
+ 22
-
- 23
+ 23
-
- 24
+ 24
-
- 25
+ 25
-
- 26
+ 26
-
- 27
+ 27
date →
diff --git a/test/output/seattleTemperatureBand.svg b/test/output/seattleTemperatureBand.svg
index a407cd847c..605acf13a5 100644
--- a/test/output/seattleTemperatureBand.svg
+++ b/test/output/seattleTemperatureBand.svg
@@ -13,37 +13,41 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
-
- 20
+ 20
-
- 30
+ 30
-
- 40
+ 40
-
- 50
+ 50
-
- 60
+ 60
-
- 70
+ 70
-
- 80
+ 80
-
- 90
+ 90
↑ Temperature (°F)
diff --git a/test/output/sfTemperatureBand.svg b/test/output/sfTemperatureBand.svg
index fb9fd2ad8e..3a7e2332e2 100644
--- a/test/output/sfTemperatureBand.svg
+++ b/test/output/sfTemperatureBand.svg
@@ -13,41 +13,45 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 40
+ 40
-
- 45
+ 45
-
- 50
+ 50
-
- 55
+ 55
-
- 60
+ 60
-
- 65
+ 65
-
- 70
+ 70
-
- 75
+ 75
-
- 80
+ 80
↑ Daily temperature range (°F)
diff --git a/test/output/sfTemperatureBandArea.svg b/test/output/sfTemperatureBandArea.svg
index 137c02c876..efa6180294 100644
--- a/test/output/sfTemperatureBandArea.svg
+++ b/test/output/sfTemperatureBandArea.svg
@@ -13,65 +13,69 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 42
+ 42
-
- 44
+ 44
-
- 46
+ 46
-
- 48
+ 48
-
- 50
+ 50
-
- 52
+ 52
-
- 54
+ 54
-
- 56
+ 56
-
- 58
+ 58
-
- 60
+ 60
-
- 62
+ 62
-
- 64
+ 64
-
- 66
+ 66
-
- 68
+ 68
-
- 70
+ 70
↑ Daily temperature range (°F)
diff --git a/test/output/simpsonsRatings.svg b/test/output/simpsonsRatings.svg
index d4d8cd19c9..7f9739593d 100644
--- a/test/output/simpsonsRatings.svg
+++ b/test/output/simpsonsRatings.svg
@@ -13,219 +13,227 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
-
- 9
+ 9
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
-
- 13
+ 13
-
- 14
+ 14
-
- 15
+ 15
-
- 16
+ 16
-
- 17
+ 17
-
- 18
+ 18
-
- 19
+ 19
-
- 20
+ 20
-
- 21
+ 21
-
- 22
+ 22
-
- 23
+ 23
-
- 24
+ 24
-
- 25
+ 25
-
- 26
+ 26
-
- 27
+ 27
-
- 28
+ 28
Season
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 1
+ 1
-
- 2
+ 2
-
- 3
+ 3
-
- 4
+ 4
-
- 5
+ 5
-
- 6
+ 6
-
- 7
+ 7
-
- 8
+ 8
-
- 9
+ 9
-
- 10
+ 10
-
- 11
+ 11
-
- 12
+ 12
-
- 13
+ 13
-
- 14
+ 14
-
- 15
+ 15
-
- 16
+ 16
-
- 17
+ 17
-
- 18
+ 18
-
- 19
+ 19
-
- 20
+ 20
-
- 21
+ 21
-
- 22
+ 22
-
- 23
+ 23
-
- 24
+ 24
-
- 25
+ 25
Episode
diff --git a/test/output/simpsonsViews.svg b/test/output/simpsonsViews.svg
index 4a479a2ee4..e618c3f7d6 100644
--- a/test/output/simpsonsViews.svg
+++ b/test/output/simpsonsViews.svg
@@ -13,115 +13,123 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
-
- 18
+ 18
-
- 20
+ 20
-
- 22
+ 22
-
- 24
+ 24
-
- 26
+ 26
-
- 28
+ 28
-
- 30
+ 30
-
- 32
+ 32
↑ Viewers (U.S., millions)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 4.5
+ 4.5
-
- 5.0
+ 5.0
-
- 5.5
+ 5.5
-
- 6.0
+ 6.0
-
- 6.5
+ 6.5
-
- 7.0
+ 7.0
-
- 7.5
+ 7.5
-
- 8.0
+ 8.0
-
- 8.5
+ 8.5
-
- 9.0
+ 9.0
IMDB rating →
diff --git a/test/output/stargazers.svg b/test/output/stargazers.svg
index 00b0b68830..6a943df1ed 100644
--- a/test/output/stargazers.svg
+++ b/test/output/stargazers.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 100
+ 100
-
- 200
+ 200
-
- 300
+ 300
-
- 400
+ 400
-
- 500
+ 500
-
- 600
+ 600
-
- 700
+ 700
-
- 800
+ 800
-
- 900
+ 900
-
- 1,000
+ 1,000
↑ Stargazers
diff --git a/test/output/stargazersBinned.svg b/test/output/stargazersBinned.svg
index 03f0efb80a..e68705ff7f 100644
--- a/test/output/stargazersBinned.svg
+++ b/test/output/stargazersBinned.svg
@@ -13,57 +13,61 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 50
+ 50
-
- 100
+ 100
-
- 150
+ 150
-
- 200
+ 200
-
- 250
+ 250
-
- 300
+ 300
-
- 350
+ 350
-
- 400
+ 400
-
- 450
+ 450
-
- 500
+ 500
-
- 550
+ 550
-
- 600
+ 600
↑ Stargazers added per week
diff --git a/test/output/stargazersHourly.svg b/test/output/stargazersHourly.svg
index 94dd7bfb10..1d674c3a5b 100644
--- a/test/output/stargazersHourly.svg
+++ b/test/output/stargazersHourly.svg
@@ -13,61 +13,65 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 20
+ 20
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
-
- 180
+ 180
-
- 200
+ 200
-
- 220
+ 220
-
- 240
+ 240
-
- 260
+ 260
↑ Frequency
diff --git a/test/output/stargazersHourlyGroup.svg b/test/output/stargazersHourlyGroup.svg
index a89bcdcb95..0f754725d4 100644
--- a/test/output/stargazersHourlyGroup.svg
+++ b/test/output/stargazersHourlyGroup.svg
@@ -13,61 +13,65 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 20
+ 20
-
- 40
+ 40
-
- 60
+ 60
-
- 80
+ 80
-
- 100
+ 100
-
- 120
+ 120
-
- 140
+ 140
-
- 160
+ 160
-
- 180
+ 180
-
- 200
+ 200
-
- 220
+ 220
-
- 240
+ 240
-
- 260
+ 260
↑ Frequency
diff --git a/test/output/stocksIndex.svg b/test/output/stocksIndex.svg
index 1accf66c91..29728346ac 100644
--- a/test/output/stocksIndex.svg
+++ b/test/output/stocksIndex.svg
@@ -13,45 +13,49 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- −40
+ −40
-
- −30
+ −30
-
- −20
+ −20
-
- −10
+ −10
-
- +0
+ +0
-
- +100
+ +100
-
- +200
+ +200
-
- +300
+ +300
-
- +400
+ +400
-
- +500
+ +500
↑ Change in price (%)
diff --git a/test/output/travelersYearOverYear.svg b/test/output/travelersYearOverYear.svg
index 0a70a65223..92369856a3 100644
--- a/test/output/travelersYearOverYear.svg
+++ b/test/output/travelersYearOverYear.svg
@@ -13,69 +13,73 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0.0
+ 0.0
-
- 0.2
+ 0.2
-
- 0.4
+ 0.4
-
- 0.6
+ 0.6
-
- 0.8
+ 0.8
-
- 1.0
+ 1.0
-
- 1.2
+ 1.2
-
- 1.4
+ 1.4
-
- 1.6
+ 1.6
-
- 1.8
+ 1.8
-
- 2.0
+ 2.0
-
- 2.2
+ 2.2
-
- 2.4
+ 2.4
-
- 2.6
+ 2.6
-
- 2.8
+ 2.8
-
- 3.0
+ 3.0
↑ Travelers per day (millions)
diff --git a/test/output/uniformRandomDifference.svg b/test/output/uniformRandomDifference.svg
index 793d5d4eec..25c54f53dd 100644
--- a/test/output/uniformRandomDifference.svg
+++ b/test/output/uniformRandomDifference.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0.0
+ 0.0
-
- 0.5
+ 0.5
-
- 1.0
+ 1.0
-
- 1.5
+ 1.5
-
- 2.0
+ 2.0
-
- 2.5
+ 2.5
-
- 3.0
+ 3.0
-
- 3.5
+ 3.5
-
- 4.0
+ 4.0
-
- 4.5
+ 4.5
-
- 5.0
+ 5.0
↑ Frequency (%)
diff --git a/test/output/usCongressAge.svg b/test/output/usCongressAge.svg
index 27bfe72dfa..fa66132253 100644
--- a/test/output/usCongressAge.svg
+++ b/test/output/usCongressAge.svg
@@ -13,33 +13,37 @@
}
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
-
- 20
+ 20
-
- 25
+ 25
-
- 30
+ 30
↑ Frequency
diff --git a/test/output/usCongressAgeGender.svg b/test/output/usCongressAgeGender.svg
index 2d2829658d..fdda10e296 100644
--- a/test/output/usCongressAgeGender.svg
+++ b/test/output/usCongressAgeGender.svg
@@ -13,37 +13,41 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
-
- 10
+ 10
-
- 5
+ 5
-
- 0
+ 0
-
- 5
+ 5
-
- 10
+ 10
-
- 15
+ 15
-
- 20
+ 20
-
- 25
+ 25
← Women · Men →
diff --git a/test/output/usPopulationStateAge.svg b/test/output/usPopulationStateAge.svg
index 2e9e4aa3de..4336569d02 100644
--- a/test/output/usPopulationStateAge.svg
+++ b/test/output/usPopulationStateAge.svg
@@ -13,87 +13,95 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- <10
+ <10
-
- 10-19
+ 10-19
-
- 20-29
+ 20-29
-
- 30-39
+ 30-39
-
- 40-49
+ 40-49
-
- 50-59
+ 50-59
-
- 60-69
+ 60-69
-
- 70-79
+ 70-79
-
- ≥80
+ ≥80
Age
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
-
- 18
+ 18
-
- 20
+ 20
Percent (%) →
diff --git a/test/output/usPopulationStateAgeDots.svg b/test/output/usPopulationStateAgeDots.svg
index 3c8e6e8190..577b81a49b 100644
--- a/test/output/usPopulationStateAgeDots.svg
+++ b/test/output/usPopulationStateAgeDots.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
-
- 18
+ 18
-
- 20
+ 20
Percent (%) →
diff --git a/test/output/usPresidentFavorabilityDots.svg b/test/output/usPresidentFavorabilityDots.svg
index bfb923b743..b14b5828e5 100644
--- a/test/output/usPresidentFavorabilityDots.svg
+++ b/test/output/usPresidentFavorabilityDots.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- −30
+ −30
-
- −20
+ −20
-
- −10
+ −10
-
- +0
+ +0
-
- +10
+ +10
-
- +20
+ +20
-
- +30
+ +30
-
- +40
+ +40
-
- +50
+ +50
-
- +60
+ +60
-
- +70
+ +70
Net favorability (%)
diff --git a/test/output/usPresidentialElection2020.svg b/test/output/usPresidentialElection2020.svg
index 43bbb09084..a81e3c6849 100644
--- a/test/output/usPresidentialElection2020.svg
+++ b/test/output/usPresidentialElection2020.svg
@@ -13,215 +13,223 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
+
-
-
+
-
- 100
+ 100
-
- 200
+ 200
-
- 300
+ 300
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 1k
+ 1k
-
- 2k
+ 2k
-
- 3k
+ 3k
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 10k
+ 10k
-
- 20k
+ 20k
-
- 30k
+ 30k
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 100k
+ 100k
-
- 200k
+ 200k
-
- 300k
+ 300k
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
-
+
-
- 1M
+ 1M
-
- 2M
+ 2M
-
- 3M
+ 3M
-
-
+
↑ Total number of votes
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- −80
+ −80
-
- −60
+ −60
-
- −40
+ −40
-
- −20
+ −20
-
- +0
+ +0
-
- +20
+ +20
-
- +40
+ +40
-
- +60
+ +60
-
- +80
+ +80
← Biden · Vote margin (%) · Trump →
diff --git a/test/output/usRetailSales.svg b/test/output/usRetailSales.svg
index 8cb19b4271..c4b1e83889 100644
--- a/test/output/usRetailSales.svg
+++ b/test/output/usRetailSales.svg
@@ -13,53 +13,57 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 50
+ 50
-
- 100
+ 100
-
- 150
+ 150
-
- 200
+ 200
-
- 250
+ 250
-
- 300
+ 300
-
- 350
+ 350
-
- 400
+ 400
-
- 450
+ 450
-
- 500
+ 500
-
- 550
+ 550
U.S. retail monthly sales (in billions, seasonally-adjusted)
diff --git a/test/output/usStatePopulationChange.svg b/test/output/usStatePopulationChange.svg
index 11696f45ff..bfa2331a5a 100644
--- a/test/output/usStatePopulationChange.svg
+++ b/test/output/usStatePopulationChange.svg
@@ -13,251 +13,259 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- Texas
+ Texas
-
- Florida
+ Florida
-
- California
+ California
-
- North Carolina
+ North Carolina
-
- Georgia
+ Georgia
-
- Washington
+ Washington
-
- Arizona
+ Arizona
-
- Colorado
+ Colorado
-
- Virginia
+ Virginia
-
- South Carolina
+ South Carolina
-
- Tennessee
+ Tennessee
-
- Utah
+ Utah
-
- Massachusetts
+ Massachusetts
-
- Oregon
+ Oregon
-
- Nevada
+ Nevada
-
- Minnesota
+ Minnesota
-
- Maryland
+ Maryland
-
- Indiana
+ Indiana
-
- Idaho
+ Idaho
-
- Oklahoma
+ Oklahoma
-
- Ohio
+ Ohio
-
- Missouri
+ Missouri
-
- Wisconsin
+ Wisconsin
-
- Kentucky
+ Kentucky
-
- Alabama
+ Alabama
-
- Louisiana
+ Louisiana
-
- Iowa
+ Iowa
-
- Nebraska
+ Nebraska
-
- District of Columbia
+ District of Columbia
-
- Michigan
+ Michigan
-
- Arkansas
+ Arkansas
-
- Pennsylvania
+ Pennsylvania
-
- New Jersey
+ New Jersey
-
- North Dakota
+ North Dakota
-
- Montana
+ Montana
-
- Delaware
+ Delaware
-
- New York
+ New York
-
- South Dakota
+ South Dakota
-
- Kansas
+ Kansas
-
- Hawaii
+ Hawaii
-
- New Hampshire
+ New Hampshire
-
- New Mexico
+ New Mexico
-
- Alaska
+ Alaska
-
- Maine
+ Maine
-
- Wyoming
+ Wyoming
-
- Mississippi
+ Mississippi
-
- Rhode Island
+ Rhode Island
-
- Vermont
+ Vermont
-
- Connecticut
+ Connecticut
-
- West Virginia
+ West Virginia
-
- Illinois
+ Illinois
-
- Puerto Rico
+ Puerto Rico
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- −0.5
+ −0.5
-
- +0.0
+ +0.0
-
- +0.5
+ +0.5
-
- +1.0
+ +1.0
-
- +1.5
+ +1.5
-
- +2.0
+ +2.0
-
- +2.5
+ +2.5
-
- +3.0
+ +3.0
-
- +3.5
+ +3.5
← decrease · Change in population, 2010–2019 (millions) · increase →
diff --git a/test/output/wordLengthMobyDick.svg b/test/output/wordLengthMobyDick.svg
index 31ea71fdef..23f7ccfa55 100644
--- a/test/output/wordLengthMobyDick.svg
+++ b/test/output/wordLengthMobyDick.svg
@@ -13,49 +13,53 @@
}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- 0
+ 0
-
- 2
+ 2
-
- 4
+ 4
-
- 6
+ 6
-
- 8
+ 8
-
- 10
+ 10
-
- 12
+ 12
-
- 14
+ 14
-
- 16
+ 16
-
- 18
+ 18
-
- 20
+ 20
↑ Frequency (%)
diff --git a/test/plots/athletes-height-weight-ticks-only.js b/test/plots/athletes-height-weight-ticks-only.js
new file mode 100644
index 0000000000..bdf92ce5c1
--- /dev/null
+++ b/test/plots/athletes-height-weight-ticks-only.js
@@ -0,0 +1,10 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ return Plot.plot({
+ x: {grid: d3.range(30, 180, 10)},
+ y: {grid: d3.range(1, 2.2, 0.05)},
+ height: 640
+ });
+}
diff --git a/test/plots/athletes-height-weight-ticks.js b/test/plots/athletes-height-weight-ticks.js
new file mode 100644
index 0000000000..47fd8fd034
--- /dev/null
+++ b/test/plots/athletes-height-weight-ticks.js
@@ -0,0 +1,14 @@
+import * as Plot from "@observablehq/plot";
+import * as d3 from "d3";
+
+export default async function() {
+ const athletes = await d3.csv("data/athletes.csv", d3.autoType);
+ return Plot.plot({
+ x: {grid: d3.range(30, 180, 10)},
+ y: {grid: d3.range(1, 2.2, 0.05)},
+ height: 640,
+ marks: [
+ Plot.dot(athletes, {x: "weight", y: "height"})
+ ]
+ });
+}
diff --git a/test/plots/diamonds-carat-price-dots.js b/test/plots/diamonds-carat-price-dots.js
index ba3f19d469..0f56e338ff 100644
--- a/test/plots/diamonds-carat-price-dots.js
+++ b/test/plots/diamonds-carat-price-dots.js
@@ -5,7 +5,8 @@ export default async function() {
const data = await d3.csv("data/diamonds.csv", d3.autoType);
return Plot.plot({
height: 640,
- grid: true,
+ marginLeft: 44,
+ grid: 100,
x: {
label: "Carats →"
},
diff --git a/test/plots/diamonds-carat-price.js b/test/plots/diamonds-carat-price.js
index 3a86705ab5..26803d0fe4 100644
--- a/test/plots/diamonds-carat-price.js
+++ b/test/plots/diamonds-carat-price.js
@@ -5,6 +5,7 @@ export default async function() {
const data = await d3.csv("data/diamonds.csv", d3.autoType);
return Plot.plot({
height: 640,
+ marginLeft: 44,
color: {
scheme: "bupu",
type: "symlog"
diff --git a/test/plots/index.js b/test/plots/index.js
index 4526d2b592..0cb2316757 100644
--- a/test/plots/index.js
+++ b/test/plots/index.js
@@ -13,6 +13,8 @@ export {default as athletesHeightWeightBin} from "./athletes-height-weight-bin.j
export {default as athletesHeightWeightBinStroke} from "./athletes-height-weight-bin-stroke.js";
export {default as athletesHeightWeightSport} from "./athletes-height-weight-sport.js";
export {default as athletesHeightWeightSex} from "./athletes-height-weight-sex.js";
+export {default as athletesHeightWeightTicks} from "./athletes-height-weight-ticks.js";
+export {default as athletesHeightWeightTicksOnly} from "./athletes-height-weight-ticks-only.js";
export {default as athletesNationality} from "./athletes-nationality.js";
export {default as athletesSexWeight} from "./athletes-sex-weight.js";
export {default as athletesSportSex} from "./athletes-sport-sex.js";