From 91c3419426eea2a3e8b8c4291bb2f97084646548 Mon Sep 17 00:00:00 2001 From: James R Swift Date: Mon, 5 Aug 2024 19:32:16 +0100 Subject: [PATCH 1/5] Charts WIP --- src/chart.typ | 3 +- src/charts/area/impl.typ | 1 + src/charts/area/plotter.typ | 53 +++++++++++++++++++++++++ src/charts/area/stacked.typ | 56 +++++++++++++++++++++++++++ src/charts/area/style.typ | 4 ++ tests/charts/area/stacked/test.typ | 22 +++++++++++ tests/charts/area/stacked100/test.typ | 22 +++++++++++ 7 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/charts/area/impl.typ create mode 100644 src/charts/area/plotter.typ create mode 100644 src/charts/area/stacked.typ create mode 100644 src/charts/area/style.typ create mode 100644 tests/charts/area/stacked/test.typ create mode 100644 tests/charts/area/stacked100/test.typ diff --git a/src/chart.typ b/src/chart.typ index d783cfb..953bf77 100644 --- a/src/chart.typ +++ b/src/chart.typ @@ -1 +1,2 @@ -#import "charts/bar/bar.typ" as bar: stacked, clustered, simple \ No newline at end of file +#import "charts/bar/bar.typ" as bar: stacked, clustered, simple +#import "charts/area/impl.typ" as area: stacked, stacked100 \ No newline at end of file diff --git a/src/charts/area/impl.typ b/src/charts/area/impl.typ new file mode 100644 index 0000000..76936ff --- /dev/null +++ b/src/charts/area/impl.typ @@ -0,0 +1 @@ +#import "stacked.typ": stacked, stacked100 \ No newline at end of file diff --git a/src/charts/area/plotter.typ b/src/charts/area/plotter.typ new file mode 100644 index 0000000..2de0135 --- /dev/null +++ b/src/charts/area/plotter.typ @@ -0,0 +1,53 @@ +#import "/src/cetz.typ": draw, styles, palette +#import "/src/plot.typ": plot +#import "/src/plot/add.typ" as add: series, xy, fill-between +#import "style.typ": areachart-default-style + +#let plotter( + series-data, + x-list: (), + area-style: palette.red, + axes: ("x", "y"), + stack: false, + ..plot-args, +) = draw.group(ctx => { + + // Setup styles + let style = styles.resolve( + ctx.style, + merge: (:), + root: "areachart", + base: areachart-default-style + ) + draw.set-style(..style) + + plot( + y-grid: true, + + plot-style: area-style, + ..plot-args, + + { + let y-offsets = (0,) * x-list.len() + for (label, data) in series-data { + add.series( + label: label, + { + add.fill-between( + data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), + data.enumerate().map(((k,v))=>(x-list.at(k), y-offsets.at(k))), + ) + + if stack == true { + for (key, value) in data.enumerate() { + y-offsets.at(key) += value + } + } + + } + ) + } + } + ) + +}) diff --git a/src/charts/area/stacked.typ b/src/charts/area/stacked.typ new file mode 100644 index 0000000..55f0c76 --- /dev/null +++ b/src/charts/area/stacked.typ @@ -0,0 +1,56 @@ +#import "/src/cetz.typ": canvas, palette +#import "plotter.typ": plotter + +#let stacked( + data, + x-key: 0, + y-keys: (1,), + area-style: palette.red, + axes: ("x", "y"), + ..plot-args +) = { + + let series-data = () + for (series-index, data) in data.enumerate(){ + series-data.push( + ( + label: if label-key != none {data.at(label-key)}, + data: y-keys.map(k=>data.at(k, default: 0)) + ) + ) + } + + plotter( + series-data, + number-points: y-keys.len(), + x-list: x-list, + area-style: area-style, + axes: axes, + stack: true, + ..plot-args + ) +} + +#let stacked100( + data, + label-key: 0, + x-key: 1, + y-keys: (2,), + area-style: palette.red, + axes: ("x", "y"), + ..plot-args +) = stacked( + data.map(d=>{ + let sum = y-keys.map(k=>d.at(k, default: 0)).sum() + for key in y-keys { + d.at(key) /= sum + } + d + }), + label-key: label-key, + x-key: x-key, + y-keys: y-keys, + area-style: area-style, + axes: axes, + ..plot-args +) \ No newline at end of file diff --git a/src/charts/area/style.typ b/src/charts/area/style.typ new file mode 100644 index 0000000..f30d27d --- /dev/null +++ b/src/charts/area/style.typ @@ -0,0 +1,4 @@ +#let areachart-default-style = ( + axes: (tick: (length: 0), grid: (stroke: (dash: "dotted"))), + y-inset: 1, +) \ No newline at end of file diff --git a/tests/charts/area/stacked/test.typ b/tests/charts/area/stacked/test.typ new file mode 100644 index 0000000..c927304 --- /dev/null +++ b/tests/charts/area/stacked/test.typ @@ -0,0 +1,22 @@ +#set page(width: auto, height: auto, margin: 1cm) +#import "/tests/helper.typ": * + +#let data = ( + ([15-24], 18.0, 20.1, 23.0, 17.0), + ([25-29], 16.3, 17.6, 19.4, 15.3), + ([30-34], 14.0, 15.3, 13.9, 18.7), + ([35-44], 35.5, 26.5, 29.4, 25.8), + ([45-54], 25.0, 20.6, 22.4, 22.0), + ([55+], 19.9, 18.2, 19.2, 16.4), +) + +#let x-list = (0, 3.3, 6.6, 9.9) + +#test-case(cetz-plot.chart.area.stacked100( + size: (10,9), + label-key: 0, + y-keys: (1,2,3,4), + x-list: x-list, + labels: ([Low], [Medium], [High], [Very high]), + data, +)) diff --git a/tests/charts/area/stacked100/test.typ b/tests/charts/area/stacked100/test.typ new file mode 100644 index 0000000..821dba4 --- /dev/null +++ b/tests/charts/area/stacked100/test.typ @@ -0,0 +1,22 @@ +#set page(width: auto, height: auto, margin: 1cm) +#import "/tests/helper.typ": * + +#let data = ( + (0, 18.0, 20.1, 23.0, 17.0), + (2.5, 16.3, 17.6, 19.4, 15.3), + (5, 14.0, 15.3, 13.9, 18.7), + (7.5, 35.5, 26.5, 29.4, 25.8), + (10, 25.0, 20.6, 22.4, 22.0), + (12.5, 19.9, 18.2, 19.2, 16.4), +) + +#let x-list = (0, 3.3, 6.6, 9.9) + +#test-case(cetz-plot.chart.area.stacked( + size: (10,9), + x-key: 0, + y-keys: (1,2,3,4), + x-list: x-list, + labels: ([Low], [Medium], [High], [Very high]), + data, +)) From 0011f5d666ce3c52a3c24749e5a22999437261f9 Mon Sep 17 00:00:00 2001 From: James R Swift Date: Fri, 9 Aug 2024 20:13:16 +0100 Subject: [PATCH 2/5] improve aliasing on stacked area chart --- src/charts/area/plotter.typ | 5 +++++ src/charts/area/stacked.typ | 5 +++-- tests/charts/area/stacked/ref/1.png | Bin 0 -> 19885 bytes tests/charts/area/stacked100/ref/1.png | Bin 0 -> 17659 bytes 4 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 tests/charts/area/stacked/ref/1.png create mode 100644 tests/charts/area/stacked100/ref/1.png diff --git a/src/charts/area/plotter.typ b/src/charts/area/plotter.typ index 2de0135..b6c6081 100644 --- a/src/charts/area/plotter.typ +++ b/src/charts/area/plotter.typ @@ -36,6 +36,11 @@ add.fill-between( data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), data.enumerate().map(((k,v))=>(x-list.at(k), y-offsets.at(k))), + style: (stroke: none), + ) + + add.xy( + data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), ) if stack == true { diff --git a/src/charts/area/stacked.typ b/src/charts/area/stacked.typ index 55f0c76..b6d4e24 100644 --- a/src/charts/area/stacked.typ +++ b/src/charts/area/stacked.typ @@ -14,7 +14,8 @@ for (series-index, data) in data.enumerate(){ series-data.push( ( - label: if label-key != none {data.at(label-key)}, + // label: if label-key != none {data.at(label-key)}, + label: none, data: y-keys.map(k=>data.at(k, default: 0)) ) ) @@ -23,7 +24,7 @@ plotter( series-data, number-points: y-keys.len(), - x-list: x-list, + x-key: x-key, area-style: area-style, axes: axes, stack: true, diff --git a/tests/charts/area/stacked/ref/1.png b/tests/charts/area/stacked/ref/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e9d3f2293564660c7acb4702fc0e047244e6d6bc GIT binary patch literal 19885 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 LR;-Y>3j4nRE*vnW literal 0 HcmV?d00001 From 2f22a4e3fef8a3f5c9c52b3017cb6f9e149e56ac Mon Sep 17 00:00:00 2001 From: James R Swift Date: Fri, 9 Aug 2024 20:24:46 +0100 Subject: [PATCH 3/5] Fix stacked100 and test --- src/charts/area/stacked.typ | 10 ++++++---- tests/charts/area/stacked/ref/1.png | Bin 19885 -> 15940 bytes tests/charts/area/stacked100/ref/1.png | Bin 17659 -> 15509 bytes tests/charts/area/stacked100/test.typ | 6 +++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/charts/area/stacked.typ b/src/charts/area/stacked.typ index b6d4e24..528e0e9 100644 --- a/src/charts/area/stacked.typ +++ b/src/charts/area/stacked.typ @@ -42,16 +42,18 @@ ..plot-args ) = stacked( data.map(d=>{ - let sum = y-keys.map(k=>d.at(k, default: 0)).sum() - for key in y-keys { - d.at(key) /= sum + let sum = y-keys.map(k=>data.map(d=>d.at(k, default: 0)).sum()) + for (index, key) in y-keys.enumerate() { + d.at(key) /= sum.at(index) } d - }), + }), label-key: label-key, x-key: x-key, y-keys: y-keys, area-style: area-style, axes: axes, + y-tick-step: 0.2, + y-format: (it)=>{$#{it*100}%$}, ..plot-args ) \ No newline at end of file diff --git a/tests/charts/area/stacked/ref/1.png b/tests/charts/area/stacked/ref/1.png index e9d3f2293564660c7acb4702fc0e047244e6d6bc..546f453a76598cf1ccea78454f8577b1c43907fb 100644 GIT binary patch literal 15940 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 S`w5_tAyVRU(63^;e*XhFgZ`rc literal 19885 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 LR;-Y>3j4nRE*vnW diff --git a/tests/charts/area/stacked100/test.typ b/tests/charts/area/stacked100/test.typ index 821dba4..c8f5c3e 100644 --- a/tests/charts/area/stacked100/test.typ +++ b/tests/charts/area/stacked100/test.typ @@ -6,13 +6,13 @@ (2.5, 16.3, 17.6, 19.4, 15.3), (5, 14.0, 15.3, 13.9, 18.7), (7.5, 35.5, 26.5, 29.4, 25.8), - (10, 25.0, 20.6, 22.4, 22.0), - (12.5, 19.9, 18.2, 19.2, 16.4), + // (10, 25.0, 20.6, 22.4, 22.0), + // (12.5, 19.9, 18.2, 19.2, 16.4), ) #let x-list = (0, 3.3, 6.6, 9.9) -#test-case(cetz-plot.chart.area.stacked( +#test-case(cetz-plot.chart.area.stacked100( size: (10,9), x-key: 0, y-keys: (1,2,3,4), From 618d4927392ca4f1d334388f2bb1776eb1dc889f Mon Sep 17 00:00:00 2001 From: James R Swift Date: Fri, 9 Aug 2024 20:28:41 +0100 Subject: [PATCH 4/5] handle labels properly (and coerce to content) --- src/charts/area/stacked.typ | 10 +++++----- src/plot/legend.typ | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/charts/area/stacked.typ b/src/charts/area/stacked.typ index 528e0e9..dad3bf9 100644 --- a/src/charts/area/stacked.typ +++ b/src/charts/area/stacked.typ @@ -3,6 +3,7 @@ #let stacked( data, + label-key: none, x-key: 0, y-keys: (1,), area-style: palette.red, @@ -14,8 +15,7 @@ for (series-index, data) in data.enumerate(){ series-data.push( ( - // label: if label-key != none {data.at(label-key)}, - label: none, + label: if label-key != none {data.at(label-key)}, data: y-keys.map(k=>data.at(k, default: 0)) ) ) @@ -34,9 +34,9 @@ #let stacked100( data, - label-key: 0, - x-key: 1, - y-keys: (2,), + label-key: none, + x-key: 0, + y-keys: (1,), area-style: palette.red, axes: ("x", "y"), ..plot-args diff --git a/src/plot/legend.typ b/src/plot/legend.typ index b6b3a20..fc8d50e 100644 --- a/src/plot/legend.typ +++ b/src/plot/legend.typ @@ -186,7 +186,7 @@ // Draw label content(label-west, - align(left + horizon, label), + align(left + horizon, [#label]), name: "label", anchor: "west") }, name: "item", anchor: if style.orientation == ltr { "west" } else { "north-west" }) From 5f50e32efc6cdd17e59201d5925b1aaf101537b3 Mon Sep 17 00:00:00 2001 From: James R Swift Date: Fri, 9 Aug 2024 20:30:52 +0100 Subject: [PATCH 5/5] move all to one file --- src/charts/area/impl.typ | 117 +++++++++++++++++++++++++++++++++++- src/charts/area/plotter.typ | 58 ------------------ src/charts/area/stacked.typ | 59 ------------------ 3 files changed, 116 insertions(+), 118 deletions(-) delete mode 100644 src/charts/area/plotter.typ delete mode 100644 src/charts/area/stacked.typ diff --git a/src/charts/area/impl.typ b/src/charts/area/impl.typ index 76936ff..42bc670 100644 --- a/src/charts/area/impl.typ +++ b/src/charts/area/impl.typ @@ -1 +1,116 @@ -#import "stacked.typ": stacked, stacked100 \ No newline at end of file +#import "/src/cetz.typ": canvas, draw, styles, palette +#import "/src/plot.typ": plot +#import "/src/plot/add.typ" as add: series, xy, fill-between +#import "style.typ": areachart-default-style + +#let plotter( + series-data, + x-list: (), + area-style: palette.red, + axes: ("x", "y"), + stack: false, + ..plot-args, +) = draw.group(ctx => { + + // Setup styles + let style = styles.resolve( + ctx.style, + merge: (:), + root: "areachart", + base: areachart-default-style + ) + draw.set-style(..style) + + plot( + y-grid: true, + + plot-style: area-style, + ..plot-args, + + { + let y-offsets = (0,) * x-list.len() + for (label, data) in series-data { + add.series( + label: label, + { + add.fill-between( + data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), + data.enumerate().map(((k,v))=>(x-list.at(k), y-offsets.at(k))), + style: (stroke: none), + ) + + add.xy( + data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), + ) + + if stack == true { + for (key, value) in data.enumerate() { + y-offsets.at(key) += value + } + } + + } + ) + } + } + ) + +}) + + +#let stacked( + data, + label-key: none, + x-key: 0, + y-keys: (1,), + area-style: palette.red, + axes: ("x", "y"), + ..plot-args +) = { + + let series-data = () + for (series-index, data) in data.enumerate(){ + series-data.push( + ( + label: if label-key != none {data.at(label-key)}, + data: y-keys.map(k=>data.at(k, default: 0)) + ) + ) + } + + plotter( + series-data, + number-points: y-keys.len(), + x-key: x-key, + area-style: area-style, + axes: axes, + stack: true, + ..plot-args + ) +} + +#let stacked100( + data, + label-key: none, + x-key: 0, + y-keys: (1,), + area-style: palette.red, + axes: ("x", "y"), + ..plot-args +) = stacked( + data.map(d=>{ + let sum = y-keys.map(k=>data.map(d=>d.at(k, default: 0)).sum()) + for (index, key) in y-keys.enumerate() { + d.at(key) /= sum.at(index) + } + d + }), + label-key: label-key, + x-key: x-key, + y-keys: y-keys, + area-style: area-style, + axes: axes, + y-tick-step: 0.2, + y-format: (it)=>{$#{it*100}%$}, + ..plot-args +) \ No newline at end of file diff --git a/src/charts/area/plotter.typ b/src/charts/area/plotter.typ deleted file mode 100644 index b6c6081..0000000 --- a/src/charts/area/plotter.typ +++ /dev/null @@ -1,58 +0,0 @@ -#import "/src/cetz.typ": draw, styles, palette -#import "/src/plot.typ": plot -#import "/src/plot/add.typ" as add: series, xy, fill-between -#import "style.typ": areachart-default-style - -#let plotter( - series-data, - x-list: (), - area-style: palette.red, - axes: ("x", "y"), - stack: false, - ..plot-args, -) = draw.group(ctx => { - - // Setup styles - let style = styles.resolve( - ctx.style, - merge: (:), - root: "areachart", - base: areachart-default-style - ) - draw.set-style(..style) - - plot( - y-grid: true, - - plot-style: area-style, - ..plot-args, - - { - let y-offsets = (0,) * x-list.len() - for (label, data) in series-data { - add.series( - label: label, - { - add.fill-between( - data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), - data.enumerate().map(((k,v))=>(x-list.at(k), y-offsets.at(k))), - style: (stroke: none), - ) - - add.xy( - data.enumerate().map(((k,v))=>(x-list.at(k), v + y-offsets.at(k))), - ) - - if stack == true { - for (key, value) in data.enumerate() { - y-offsets.at(key) += value - } - } - - } - ) - } - } - ) - -}) diff --git a/src/charts/area/stacked.typ b/src/charts/area/stacked.typ deleted file mode 100644 index dad3bf9..0000000 --- a/src/charts/area/stacked.typ +++ /dev/null @@ -1,59 +0,0 @@ -#import "/src/cetz.typ": canvas, palette -#import "plotter.typ": plotter - -#let stacked( - data, - label-key: none, - x-key: 0, - y-keys: (1,), - area-style: palette.red, - axes: ("x", "y"), - ..plot-args -) = { - - let series-data = () - for (series-index, data) in data.enumerate(){ - series-data.push( - ( - label: if label-key != none {data.at(label-key)}, - data: y-keys.map(k=>data.at(k, default: 0)) - ) - ) - } - - plotter( - series-data, - number-points: y-keys.len(), - x-key: x-key, - area-style: area-style, - axes: axes, - stack: true, - ..plot-args - ) -} - -#let stacked100( - data, - label-key: none, - x-key: 0, - y-keys: (1,), - area-style: palette.red, - axes: ("x", "y"), - ..plot-args -) = stacked( - data.map(d=>{ - let sum = y-keys.map(k=>data.map(d=>d.at(k, default: 0)).sum()) - for (index, key) in y-keys.enumerate() { - d.at(key) /= sum.at(index) - } - d - }), - label-key: label-key, - x-key: x-key, - y-keys: y-keys, - area-style: area-style, - axes: axes, - y-tick-step: 0.2, - y-format: (it)=>{$#{it*100}%$}, - ..plot-args -) \ No newline at end of file