From b44bd6adc7817a77b1002d68a58c8cb9be23f8cc Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 15 Dec 2023 13:55:50 -0500 Subject: [PATCH 1/9] Update bound arrays for log scale --- src/traces/heatmap/make_bound_array.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/traces/heatmap/make_bound_array.js b/src/traces/heatmap/make_bound_array.js index 817ac4471a1..ad4991c4898 100644 --- a/src/traces/heatmap/make_bound_array.js +++ b/src/traces/heatmap/make_bound_array.js @@ -25,10 +25,20 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, if(isContour || isGL2D) arrayOut = arrayIn.slice(0, numbricks); else if(numbricks === 1) { arrayOut = [arrayIn[0] - 0.5, arrayIn[0] + 0.5]; + } else if(ax.type === 'log') { + arrayOut = [Math.pow(arrayIn[0], 1.5) / Math.pow(arrayIn[1], 0.5)]; + + for(i = 1; i < len; i++) { + // Geomean + arrayOut.push(Math.sqrt(arrayIn[i - 1] * arrayIn[i])); + } + + arrayOut.push(Math.pow(arrayIn[len - 1], 1.5) / Math.pow(arrayIn[len - 2], 0.5)); } else { arrayOut = [1.5 * arrayIn[0] - 0.5 * arrayIn[1]]; for(i = 1; i < len; i++) { + // Arithmetic mean arrayOut.push((arrayIn[i - 1] + arrayIn[i]) * 0.5); } From c48651946e3399871115a8d18ec59c27d5ea6896 Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 15 Dec 2023 13:55:55 -0500 Subject: [PATCH 2/9] tests --- test/image/baselines/heatmap-log-scale.png | Bin 0 -> 27183 bytes test/image/mocks/heatmap-log-scale.json | 47 +++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 test/image/baselines/heatmap-log-scale.png create mode 100644 test/image/mocks/heatmap-log-scale.json diff --git a/test/image/baselines/heatmap-log-scale.png b/test/image/baselines/heatmap-log-scale.png new file mode 100644 index 0000000000000000000000000000000000000000..746eab95fa18953fca02c5c3c7342b8036bec40e GIT binary patch literal 27183 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 z Date: Fri, 15 Dec 2023 14:05:42 -0500 Subject: [PATCH 3/9] changelog --- draftlogs/6891_change.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 draftlogs/6891_change.md diff --git a/draftlogs/6891_change.md b/draftlogs/6891_change.md new file mode 100644 index 00000000000..5490bfd4ec1 --- /dev/null +++ b/draftlogs/6891_change.md @@ -0,0 +1 @@ +- Improve rendering of heatmap bricks for log-scale axes [[#5991](https://github.com/plotly/plotly.js/issues/5991)], with thanks to @andrew-matteson for the contribution! From 1dd0124ad541809a6b3e8e3b2291da22d4afb16c Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 15 Dec 2023 16:18:10 -0500 Subject: [PATCH 4/9] rename to zz- per request --- ...atmap-log-scale.png => zz-heatmap-log-scale.png} | Bin ...map-log-scale.json => zz-heatmap-log-scale.json} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename test/image/baselines/{heatmap-log-scale.png => zz-heatmap-log-scale.png} (100%) rename test/image/mocks/{heatmap-log-scale.json => zz-heatmap-log-scale.json} (100%) diff --git a/test/image/baselines/heatmap-log-scale.png b/test/image/baselines/zz-heatmap-log-scale.png similarity index 100% rename from test/image/baselines/heatmap-log-scale.png rename to test/image/baselines/zz-heatmap-log-scale.png diff --git a/test/image/mocks/heatmap-log-scale.json b/test/image/mocks/zz-heatmap-log-scale.json similarity index 100% rename from test/image/mocks/heatmap-log-scale.json rename to test/image/mocks/zz-heatmap-log-scale.json From d33b12b8d548c447c32bb01f0caa717f990f6a3a Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 15 Dec 2023 16:19:35 -0500 Subject: [PATCH 5/9] syntax issue --- test/image/mocks/zz-heatmap-log-scale.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/image/mocks/zz-heatmap-log-scale.json b/test/image/mocks/zz-heatmap-log-scale.json index 034c8706f40..71fafa3cd9f 100644 --- a/test/image/mocks/zz-heatmap-log-scale.json +++ b/test/image/mocks/zz-heatmap-log-scale.json @@ -44,4 +44,4 @@ "autosize": true, "showlegend": false } -} \ No newline at end of file +} From a35097b7ee9a81244ee128bc7043499da17497ea Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 16 Dec 2023 14:10:51 -0500 Subject: [PATCH 6/9] fix fonts in baseline --- test/image/baselines/zz-heatmap-log-scale.png | Bin 27183 -> 25926 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/zz-heatmap-log-scale.png b/test/image/baselines/zz-heatmap-log-scale.png index 746eab95fa18953fca02c5c3c7342b8036bec40e..cfebfb6a999e2cc28138defe38a576de39b9dc38 100644 GIT binary patch literal 25926 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[d&D~8^|P9aF9V%J>A}fCi^HDA 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 KBmcy?oBtOZQ`*J= literal 27183 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 z Date: Fri, 19 Jan 2024 14:00:12 -0500 Subject: [PATCH 7/9] address N = 1 and len < N cases --- src/traces/heatmap/make_bound_array.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/traces/heatmap/make_bound_array.js b/src/traces/heatmap/make_bound_array.js index fcc0a633a78..e2deffe4ddb 100644 --- a/src/traces/heatmap/make_bound_array.js +++ b/src/traces/heatmap/make_bound_array.js @@ -24,7 +24,11 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, // contour plots only want the centers if(isContour || isGL2D) arrayOut = Array.from(arrayIn).slice(0, numbricks); else if(numbricks === 1) { - arrayOut = [arrayIn[0] - 0.5, arrayIn[0] + 0.5]; + if(ax.type === 'log') { + arrayOut = [0.5 * arrayIn[0], 2 * arrayIn[0]]; + } else { + arrayOut = [arrayIn[0] - 0.5, arrayIn[0] + 0.5]; + } } else if(ax.type === 'log') { arrayOut = [Math.pow(arrayIn[0], 1.5) / Math.pow(arrayIn[1], 0.5)]; @@ -47,11 +51,21 @@ module.exports = function makeBoundArray(trace, arrayIn, v0In, dvIn, numbricks, if(len < numbricks) { var lastPt = arrayOut[arrayOut.length - 1]; - var delta = lastPt - arrayOut[arrayOut.length - 2]; + var delta; // either multiplicative delta (log axis type) or arithmetic delta (all other axis types) + if(ax.type === 'log') { + delta = lastPt / arrayOut[arrayOut.length - 2]; + + for(i = len; i < numbricks; i++) { + lastPt *= delta; + arrayOut.push(lastPt); + } + } else { + delta = lastPt - arrayOut[arrayOut.length - 2]; - for(i = len; i < numbricks; i++) { - lastPt += delta; - arrayOut.push(lastPt); + for(i = len; i < numbricks; i++) { + lastPt += delta; + arrayOut.push(lastPt); + } } } } else { From 2b471c3a95c063c9f54f1d5573d1eee5596dbcd9 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 22 Jan 2024 09:25:47 -0500 Subject: [PATCH 8/9] trivial change to trigger tests to run --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24fb972dcdd..debfa8092d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -572,7 +572,7 @@ where X.Y.Z is the semver of most recent plotly.js release. with thanks to Kitware and @waxlamp for kicking off this effort. ### Changed - - Improve drawing the contour lines in non-linear space e.g. on log axes [[#5985](https://github.com/plotly/plotly.js/pull/5985)], with thanks to @andrew-matteson for the contribution! + - Improve drawing the contour lines in non-linear space e.g. on log axes [[#5985](https://github.com/plotly/plotly.js/pull/5985)], with thanks to @andrew-matteson for the contribution!! - Bump eslint to v8 release candidate including fixes for `no-new-func` test [[#5969](https://github.com/plotly/plotly.js/pull/5969)] ### Fixed From f9db9045be4a2efb92bc2cebd0acdbeb95a791f6 Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 22 Jan 2024 11:28:30 -0500 Subject: [PATCH 9/9] Revert "trivial change to trigger tests to run" This reverts commit 2b471c3a95c063c9f54f1d5573d1eee5596dbcd9. --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index debfa8092d9..24fb972dcdd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -572,7 +572,7 @@ where X.Y.Z is the semver of most recent plotly.js release. with thanks to Kitware and @waxlamp for kicking off this effort. ### Changed - - Improve drawing the contour lines in non-linear space e.g. on log axes [[#5985](https://github.com/plotly/plotly.js/pull/5985)], with thanks to @andrew-matteson for the contribution!! + - Improve drawing the contour lines in non-linear space e.g. on log axes [[#5985](https://github.com/plotly/plotly.js/pull/5985)], with thanks to @andrew-matteson for the contribution! - Bump eslint to v8 release candidate including fixes for `no-new-func` test [[#5969](https://github.com/plotly/plotly.js/pull/5969)] ### Fixed