From a8e1c551ef34c850bea0c938cb0128634b239b66 Mon Sep 17 00:00:00 2001 From: Optimal Date: Mon, 13 Jan 2025 00:52:48 -0500 Subject: [PATCH 01/21] add extension logic for d3 --- src/axis.js | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/axis.js b/src/axis.js index 78e1bcb..b5f84c3 100644 --- a/src/axis.js +++ b/src/axis.js @@ -113,7 +113,41 @@ function axis(orient, scale) { selection .each(function() { this.__axis = position; }); } + axis.extend = function(X) { + // Get the current ticks + const ticks = scale.ticks(); + + // Calculate the interval (difference between the first two ticks) + const tickDiff = ticks[1] - ticks[0]; + const interval = d3.timeMinute; // Default to minute interval + + // If the difference is greater than a certain threshold, adjust the interval + if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger + interval = d3.timeHour; + } else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger + interval = d3.timeDay; + } + + let newTicks = [...ticks]; + + // If X > 0, extend to the right, else extend to the left + if (X > 0) { + let lastTick = ticks[ticks.length - 1]; + for (let i = 0; i < X; i++) { + lastTick = interval.offset(lastTick, 1); // Add a new tick + newTicks.push(lastTick); + } + } else if (X < 0) { + let firstTick = ticks[0]; + for (let i = 0; i < Math.abs(X); i++) { + firstTick = interval.offset(firstTick, -1); // Subtract a tick + newTicks.unshift(firstTick); + } + } + axis.tickValues(newTicks); // Set new tick values + return axis; + }; axis.scale = function(_) { return arguments.length ? (scale = _, axis) : scale; }; From 6ed309fc8ae08c22b8e59cef5e2e91517dd0e984 Mon Sep 17 00:00:00 2001 From: Optimal Date: Mon, 13 Jan 2025 02:03:35 -0500 Subject: [PATCH 02/21] add d3 time --- package.json | 3 +++ src/axis.js | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 249f9dc..295e83c 100644 --- a/package.json +++ b/package.json @@ -50,5 +50,8 @@ }, "engines": { "node": ">=12" + }, + "dependencies": { + "d3-time": "^3.1.0" } } diff --git a/src/axis.js b/src/axis.js index b5f84c3..cd827dc 100644 --- a/src/axis.js +++ b/src/axis.js @@ -1,4 +1,5 @@ import identity from "./identity.js"; +import {timeHour,timeMinute,timeDay} from "d3-time"; var top = 1, right = 2, @@ -119,13 +120,13 @@ function axis(orient, scale) { // Calculate the interval (difference between the first two ticks) const tickDiff = ticks[1] - ticks[0]; - const interval = d3.timeMinute; // Default to minute interval + const interval = timeMinute; // Default to minute interval // If the difference is greater than a certain threshold, adjust the interval if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger - interval = d3.timeHour; + interval = timeHour; } else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger - interval = d3.timeDay; + interval = timeDay; } let newTicks = [...ticks]; From ce1474141acebe8ee5381646e8190b4586b1ef13 Mon Sep 17 00:00:00 2001 From: Optimal Date: Mon, 13 Jan 2025 02:20:16 -0500 Subject: [PATCH 03/21] all --- src/axis.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/axis.js b/src/axis.js index cd827dc..23d31bf 100644 --- a/src/axis.js +++ b/src/axis.js @@ -1,5 +1,5 @@ import identity from "./identity.js"; -import {timeHour,timeMinute,timeDay} from "d3-time"; +import * as d3 from "d3-time"; var top = 1, right = 2, @@ -120,13 +120,13 @@ function axis(orient, scale) { // Calculate the interval (difference between the first two ticks) const tickDiff = ticks[1] - ticks[0]; - const interval = timeMinute; // Default to minute interval + const interval = d3.timeMinute; // Default to minute interval // If the difference is greater than a certain threshold, adjust the interval if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger - interval = timeHour; + interval = d3.timeHour; } else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger - interval = timeDay; + interval = d3.timeDay; } let newTicks = [...ticks]; From a35612558735786c6af2a043ce264761fc9b85a4 Mon Sep 17 00:00:00 2001 From: Optimal Date: Mon, 13 Jan 2025 17:53:56 -0500 Subject: [PATCH 04/21] fix const --- src/axis.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/axis.js b/src/axis.js index 23d31bf..9431af5 100644 --- a/src/axis.js +++ b/src/axis.js @@ -116,11 +116,11 @@ function axis(orient, scale) { } axis.extend = function(X) { // Get the current ticks - const ticks = scale.ticks(); + let ticks = scale.ticks(); // Calculate the interval (difference between the first two ticks) - const tickDiff = ticks[1] - ticks[0]; - const interval = d3.timeMinute; // Default to minute interval + let tickDiff = ticks[1] - ticks[0]; + let interval = d3.timeMinute; // Default to minute interval // If the difference is greater than a certain threshold, adjust the interval if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger From ada133bb3355c1cc04fdbb0f10c9f008b468c990 Mon Sep 17 00:00:00 2001 From: Optimal Date: Mon, 13 Jan 2025 18:13:37 -0500 Subject: [PATCH 05/21] add extension timeframes for all d3-axis --- src/axis.js | 51 ++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/src/axis.js b/src/axis.js index 9431af5..cbdfc07 100644 --- a/src/axis.js +++ b/src/axis.js @@ -114,6 +114,7 @@ function axis(orient, scale) { selection .each(function() { this.__axis = position; }); } + axis.extend = function(X) { // Get the current ticks let ticks = scale.ticks(); @@ -122,33 +123,53 @@ function axis(orient, scale) { let tickDiff = ticks[1] - ticks[0]; let interval = d3.timeMinute; // Default to minute interval - // If the difference is greater than a certain threshold, adjust the interval - if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger - interval = d3.timeHour; - } else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger - interval = d3.timeDay; + // Adjust the interval based on the tickDiff + if (tickDiff >= 365 * 24 * 60 * 60 * 1000) { // If ticks are yearly or larger + interval = d3.timeYear; + tickDiff = tickDiff / (365 * 24 * 60 * 60 * 1000); // Convert to years + } + else if (tickDiff >= 30 * 24 * 60 * 60 * 1000) { // If ticks are monthly or larger + interval = d3.timeMonth; + tickDiff = tickDiff / (30 * 24 * 60 * 60 * 1000); // Convert to months + } + else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger + interval = d3.timeDay; + tickDiff = tickDiff / (24 * 60 * 60 * 1000); // Convert to days + } + else if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger + interval = d3.timeHour; + tickDiff = tickDiff / (60 * 60 * 1000); // Convert to hours + } + else if (tickDiff >= 60 * 1000) { // If ticks are minute or larger + interval = d3.timeMinute; + tickDiff = tickDiff / (60 * 1000); // Convert to minutes + } + else if (tickDiff >= 1000) { // If ticks are second or larger + interval = d3.timeSecond; + tickDiff = tickDiff / 1000; // Convert to seconds } let newTicks = [...ticks]; // If X > 0, extend to the right, else extend to the left if (X > 0) { - let lastTick = ticks[ticks.length - 1]; - for (let i = 0; i < X; i++) { - lastTick = interval.offset(lastTick, 1); // Add a new tick - newTicks.push(lastTick); - } + let lastTick = ticks[ticks.length - 1]; + for (let i = 0; i < X; i++) { + lastTick = interval.offset(lastTick, tickDiff); // Add a new tick + newTicks.push(lastTick); + } } else if (X < 0) { - let firstTick = ticks[0]; - for (let i = 0; i < Math.abs(X); i++) { - firstTick = interval.offset(firstTick, -1); // Subtract a tick - newTicks.unshift(firstTick); - } + let firstTick = ticks[0]; + for (let i = 0; i < Math.abs(X); i++) { + firstTick = interval.offset(firstTick, -1*tickDiff); // Subtract a tick + newTicks.unshift(firstTick); + } } axis.tickValues(newTicks); // Set new tick values return axis; }; + axis.scale = function(_) { return arguments.length ? (scale = _, axis) : scale; }; From 1cbf2f0b1b686bbe4bbc0db7a54f93d40b95dab5 Mon Sep 17 00:00:00 2001 From: Optimal Date: Tue, 14 Jan 2025 01:54:04 -0500 Subject: [PATCH 06/21] fix tickValues --- src/axis.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index cbdfc07..ee72de8 100644 --- a/src/axis.js +++ b/src/axis.js @@ -165,8 +165,9 @@ function axis(orient, scale) { newTicks.unshift(firstTick); } } + + tickValues = Array.from(newTicks); - axis.tickValues(newTicks); // Set new tick values return axis; }; From a4a57dad4a6794a4704d6c9f3c44035fca641687 Mon Sep 17 00:00:00 2001 From: Optimal Date: Tue, 14 Apr 2026 23:44:14 -0400 Subject: [PATCH 07/21] update functionality to include extension for y-axis --- src/axis.js | 120 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 73 insertions(+), 47 deletions(-) diff --git a/src/axis.js b/src/axis.js index ee72de8..163af12 100644 --- a/src/axis.js +++ b/src/axis.js @@ -115,58 +115,84 @@ function axis(orient, scale) { .each(function() { this.__axis = position; }); } - axis.extend = function(X) { + axis.extend = function(extension) { + // Get the current ticks let ticks = scale.ticks(); - - // Calculate the interval (difference between the first two ticks) - let tickDiff = ticks[1] - ticks[0]; - let interval = d3.timeMinute; // Default to minute interval - - // Adjust the interval based on the tickDiff - if (tickDiff >= 365 * 24 * 60 * 60 * 1000) { // If ticks are yearly or larger - interval = d3.timeYear; - tickDiff = tickDiff / (365 * 24 * 60 * 60 * 1000); // Convert to years - } - else if (tickDiff >= 30 * 24 * 60 * 60 * 1000) { // If ticks are monthly or larger - interval = d3.timeMonth; - tickDiff = tickDiff / (30 * 24 * 60 * 60 * 1000); // Convert to months - } - else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger - interval = d3.timeDay; - tickDiff = tickDiff / (24 * 60 * 60 * 1000); // Convert to days - } - else if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger - interval = d3.timeHour; - tickDiff = tickDiff / (60 * 60 * 1000); // Convert to hours + let newTicks; + + if(orient === top || orient === bottom){ + // Calculate the interval (difference between the first two ticks) + let tickDiff = ticks[1] - ticks[0]; + let interval = d3.timeMinute; // Default to minute interval + + // Adjust the interval based on the tickDiff + if (tickDiff >= 365 * 24 * 60 * 60 * 1000) { // If ticks are yearly or larger + interval = d3.timeYear; + tickDiff = tickDiff / (365 * 24 * 60 * 60 * 1000); // Convert to years + } + else if (tickDiff >= 30 * 24 * 60 * 60 * 1000) { // If ticks are monthly or larger + interval = d3.timeMonth; + tickDiff = tickDiff / (30 * 24 * 60 * 60 * 1000); // Convert to months + } + else if (tickDiff >= 24 * 60 * 60 * 1000) { // If ticks are daily or larger + interval = d3.timeDay; + tickDiff = tickDiff / (24 * 60 * 60 * 1000); // Convert to days + } + else if (tickDiff >= 60 * 60 * 1000) { // If ticks are hourly or larger + interval = d3.timeHour; + tickDiff = tickDiff / (60 * 60 * 1000); // Convert to hours + } + else if (tickDiff >= 60 * 1000) { // If ticks are minute or larger + interval = d3.timeMinute; + tickDiff = tickDiff / (60 * 1000); // Convert to minutes + } + else if (tickDiff >= 1000) { // If ticks are second or larger + interval = d3.timeSecond; + tickDiff = tickDiff / 1000; // Convert to seconds + } + + newTicks = [...ticks]; + + // If extension > 0, extend to the right, else extend to the left + if (extension > 0) { + let lastTick = ticks[ticks.length - 1]; + for (let i = 0; i < X; i++) { + lastTick = interval.offset(lastTick, tickDiff); // Add a new tick + newTicks.push(lastTick); + } + } else if (extension < 0) { + let firstTick = ticks[0]; + for (let i = 0; i < Math.abs(X); i++) { + firstTick = interval.offset(firstTick, -1*tickDiff); // Subtract a tick + newTicks.unshift(firstTick); + } + } } - else if (tickDiff >= 60 * 1000) { // If ticks are minute or larger - interval = d3.timeMinute; - tickDiff = tickDiff / (60 * 1000); // Convert to minutes - } - else if (tickDiff >= 1000) { // If ticks are second or larger - interval = d3.timeSecond; - tickDiff = tickDiff / 1000; // Convert to seconds + else{ + + let tickDiff = ticks[1]-ticks[0]; + + newTicks = [...ticks]; + + // If extension > 0, extend to t, else extend to the left + if (extension > 0) { + let lastTick = ticks[ticks.length - 1]; + for (let i = 0; i < extension; i++) { + lastTick+=tickDiff; + newTicks.push(lastTick); + } + } else if (extension < 0) { + let firstTick = ticks[0]; + for (let i = 0; i < Math.abs(extension); i++) { + firstTick-=tickDiff; + newTicks.unshift(firstTick); + } + } } - let newTicks = [...ticks]; - - // If X > 0, extend to the right, else extend to the left - if (X > 0) { - let lastTick = ticks[ticks.length - 1]; - for (let i = 0; i < X; i++) { - lastTick = interval.offset(lastTick, tickDiff); // Add a new tick - newTicks.push(lastTick); - } - } else if (X < 0) { - let firstTick = ticks[0]; - for (let i = 0; i < Math.abs(X); i++) { - firstTick = interval.offset(firstTick, -1*tickDiff); // Subtract a tick - newTicks.unshift(firstTick); - } - } - - tickValues = Array.from(newTicks); + if(newTicks) + tickValues = Array.from(newTicks); return axis; }; From 2a2019710bcb21180893c529c7a3e1c764be0822 Mon Sep 17 00:00:00 2001 From: Optimal Date: Tue, 14 Apr 2026 23:59:45 -0400 Subject: [PATCH 08/21] fix extension missing issue --- src/axis.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/axis.js b/src/axis.js index 163af12..85bcda9 100644 --- a/src/axis.js +++ b/src/axis.js @@ -157,13 +157,13 @@ function axis(orient, scale) { // If extension > 0, extend to the right, else extend to the left if (extension > 0) { let lastTick = ticks[ticks.length - 1]; - for (let i = 0; i < X; i++) { + for (let i = 0; i < extension; i++) { lastTick = interval.offset(lastTick, tickDiff); // Add a new tick newTicks.push(lastTick); } } else if (extension < 0) { let firstTick = ticks[0]; - for (let i = 0; i < Math.abs(X); i++) { + for (let i = 0; i < Math.abs(extension); i++) { firstTick = interval.offset(firstTick, -1*tickDiff); // Subtract a tick newTicks.unshift(firstTick); } From f3eb42175841829973d2532d1f8f8a6835d0ebe1 Mon Sep 17 00:00:00 2001 From: Optimal Date: Wed, 15 Apr 2026 02:46:04 -0400 Subject: [PATCH 09/21] fix bug on client end, tickValues does not update --- src/axis.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/axis.js b/src/axis.js index 85bcda9..f711d37 100644 --- a/src/axis.js +++ b/src/axis.js @@ -121,7 +121,8 @@ function axis(orient, scale) { let ticks = scale.ticks(); let newTicks; - if(orient === top || orient === bottom){ + if(orient === top || orient === bottom){ + console.warn("X ORIENTATION") // Calculate the interval (difference between the first two ticks) let tickDiff = ticks[1] - ticks[0]; let interval = d3.timeMinute; // Default to minute interval @@ -171,7 +172,7 @@ function axis(orient, scale) { } else{ - let tickDiff = ticks[1]-ticks[0]; + let tickDiff = Math.abs(ticks[1]-ticks[0]); newTicks = [...ticks]; @@ -194,7 +195,7 @@ function axis(orient, scale) { if(newTicks) tickValues = Array.from(newTicks); - return axis; + return {axis,tickValues}; }; axis.scale = function(_) { From 72524daf65a2080fb0e4b3a3168f0f94fd110f7e Mon Sep 17 00:00:00 2001 From: Optimal Date: Wed, 15 Apr 2026 02:52:57 -0400 Subject: [PATCH 10/21] store actual value from newTicks for debugging --- src/axis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index f711d37..39ea3db 100644 --- a/src/axis.js +++ b/src/axis.js @@ -195,7 +195,7 @@ function axis(orient, scale) { if(newTicks) tickValues = Array.from(newTicks); - return {axis,tickValues}; + return {axis,tickValues:newTicks}; }; axis.scale = function(_) { From 34c269d2407eb08b76c032cfafd0a58ff6ea3b2a Mon Sep 17 00:00:00 2001 From: Optimal Date: Wed, 15 Apr 2026 02:57:54 -0400 Subject: [PATCH 11/21] debugging --- src/axis.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index 39ea3db..b5bb2b8 100644 --- a/src/axis.js +++ b/src/axis.js @@ -175,7 +175,9 @@ function axis(orient, scale) { let tickDiff = Math.abs(ticks[1]-ticks[0]); newTicks = [...ticks]; - + + console.warn("New ticks") + console.warn(newTicks) // If extension > 0, extend to t, else extend to the left if (extension > 0) { let lastTick = ticks[ticks.length - 1]; From 5f256d73447454e21dbea680f7bfe6986e766ceb Mon Sep 17 00:00:00 2001 From: Optimal Date: Wed, 15 Apr 2026 02:59:22 -0400 Subject: [PATCH 12/21] moew debugging --- src/axis.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index b5bb2b8..fb49e3b 100644 --- a/src/axis.js +++ b/src/axis.js @@ -196,7 +196,9 @@ function axis(orient, scale) { if(newTicks) tickValues = Array.from(newTicks); - + + console.warn("New ticks end") + console.warn(newTicks) return {axis,tickValues:newTicks}; }; From 6fb1c09044d35dcb8786feb75a8d6d44578ea1b3 Mon Sep 17 00:00:00 2001 From: Optimal Date: Thu, 16 Apr 2026 01:29:13 -0400 Subject: [PATCH 13/21] axis patch to include tickValues --- src/axis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index fb49e3b..9b70ad6 100644 --- a/src/axis.js +++ b/src/axis.js @@ -118,7 +118,7 @@ function axis(orient, scale) { axis.extend = function(extension) { // Get the current ticks - let ticks = scale.ticks(); + let ticks = axis.tickValues() || scale.ticks(); let newTicks; if(orient === top || orient === bottom){ From 732efdb46dc8be9332371d31045646ebac991c9b Mon Sep 17 00:00:00 2001 From: Optimal Date: Thu, 16 Apr 2026 01:43:46 -0400 Subject: [PATCH 14/21] tickValues setter through function --- src/axis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index 9b70ad6..2d45f43 100644 --- a/src/axis.js +++ b/src/axis.js @@ -195,7 +195,7 @@ function axis(orient, scale) { } if(newTicks) - tickValues = Array.from(newTicks); + axis.tickValues(Array.from(newTicks)); console.warn("New ticks end") console.warn(newTicks) From 6ac1ad5dd9d15add4d0c191a9b5cb6940cdb91ae Mon Sep 17 00:00:00 2001 From: Optimal Date: Thu, 16 Apr 2026 01:46:45 -0400 Subject: [PATCH 15/21] remove commends --- src/axis.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/axis.js b/src/axis.js index 2d45f43..07a6d17 100644 --- a/src/axis.js +++ b/src/axis.js @@ -176,8 +176,6 @@ function axis(orient, scale) { newTicks = [...ticks]; - console.warn("New ticks") - console.warn(newTicks) // If extension > 0, extend to t, else extend to the left if (extension > 0) { let lastTick = ticks[ticks.length - 1]; @@ -197,9 +195,7 @@ function axis(orient, scale) { if(newTicks) axis.tickValues(Array.from(newTicks)); - console.warn("New ticks end") - console.warn(newTicks) - return {axis,tickValues:newTicks}; + return axis; }; axis.scale = function(_) { From d78791b04512e95f72bf8fcc589a35449cb01908 Mon Sep 17 00:00:00 2001 From: Optimal Date: Thu, 16 Apr 2026 01:59:29 -0400 Subject: [PATCH 16/21] add tickLimits --- src/axis.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index 07a6d17..63216d5 100644 --- a/src/axis.js +++ b/src/axis.js @@ -115,7 +115,7 @@ function axis(orient, scale) { .each(function() { this.__axis = position; }); } - axis.extend = function(extension) { + axis.extend = function(extension,ticksLimit) { // Get the current ticks let ticks = axis.tickValues() || scale.ticks(); @@ -190,6 +190,18 @@ function axis(orient, scale) { newTicks.unshift(firstTick); } } + + if(newTicks.length>ticksLimit){ + + let newTicks2 = []; + for(var i=0;i Date: Fri, 17 Apr 2026 18:05:38 -0400 Subject: [PATCH 17/21] added multi extension feature --- src/axis.js | 44 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/src/axis.js b/src/axis.js index 63216d5..38942b7 100644 --- a/src/axis.js +++ b/src/axis.js @@ -154,9 +154,28 @@ function axis(orient, scale) { } newTicks = [...ticks]; - + + //Extend BOTH ends of axis + if(extension.length>0){ + + let lastTick = ticks[ticks.length - 1]; + + let firstTick = ticks[0]; + + for (let i = 0; i < Math.abs(extension[0]); i++) { + firstTick = interval.offset(firstTick, -1*tickDiff); // Subtract a tick + newTicks.unshift(firstTick); + } + + + for (let i = 0; i < extension[1]; i++) { + lastTick = interval.offset(lastTick, tickDiff); // Add a new tick + newTicks.push(lastTick); + } + + } // If extension > 0, extend to the right, else extend to the left - if (extension > 0) { + else if (extension > 0) { let lastTick = ticks[ticks.length - 1]; for (let i = 0; i < extension; i++) { lastTick = interval.offset(lastTick, tickDiff); // Add a new tick @@ -177,7 +196,24 @@ function axis(orient, scale) { newTicks = [...ticks]; // If extension > 0, extend to t, else extend to the left - if (extension > 0) { + //Extend BOTH ends of axis + if(extension.length>0){ + + let lastTick = ticks[ticks.length - 1]; + + let firstTick = ticks[0]; + + for (let i = 0; i < Math.abs(extension[0]); i++) { + firstTick-=tickDiff; + newTicks.unshift(firstTick); + } + + for (let i = 0; i < extension[1]; i++) { + lastTick+=tickDiff; + newTicks.push(lastTick); + } + + } else if (extension > 0) { let lastTick = ticks[ticks.length - 1]; for (let i = 0; i < extension; i++) { lastTick+=tickDiff; @@ -187,7 +223,7 @@ function axis(orient, scale) { let firstTick = ticks[0]; for (let i = 0; i < Math.abs(extension); i++) { firstTick-=tickDiff; - newTicks.unshift(firstTick); + newTicks.unshift(firstTick); } } From 4ccbc902375a619042f7c802bd8b0643d45d6199 Mon Sep 17 00:00:00 2001 From: Optimal Date: Fri, 17 Apr 2026 18:09:45 -0400 Subject: [PATCH 18/21] fix mini bug --- src/axis.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/axis.js b/src/axis.js index 38942b7..e590628 100644 --- a/src/axis.js +++ b/src/axis.js @@ -203,12 +203,12 @@ function axis(orient, scale) { let firstTick = ticks[0]; - for (let i = 0; i < Math.abs(extension[0]); i++) { + for (let i = 0; i < Math.abs(extension[1]); i++) { firstTick-=tickDiff; newTicks.unshift(firstTick); } - for (let i = 0; i < extension[1]; i++) { + for (let i = 0; i < extension[0]; i++) { lastTick+=tickDiff; newTicks.push(lastTick); } From 7d4536bc59fdc12ac61234ebc2e0cfdd6a5cf9ee Mon Sep 17 00:00:00 2001 From: Optimal Date: Mon, 20 Apr 2026 21:52:15 -0400 Subject: [PATCH 19/21] fix NAN bug --- src/axis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index e590628..34394d9 100644 --- a/src/axis.js +++ b/src/axis.js @@ -232,7 +232,7 @@ function axis(orient, scale) { let newTicks2 = []; for(var i=0;i Date: Tue, 21 Apr 2026 14:40:43 -0400 Subject: [PATCH 20/21] add ticksLimit adjustment --- src/axis.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/axis.js b/src/axis.js index 34394d9..68cec03 100644 --- a/src/axis.js +++ b/src/axis.js @@ -238,6 +238,21 @@ function axis(orient, scale) { newTicks = newTicks2; } + else if(newTicks.length=2){ + + let newTicks2 = []; + + let step = (newTicks[newTicks.length-1] - newTicks[0]) / ticksLimit; + + let value = newTicks[0]; + + for(var i=0;i Date: Tue, 21 Apr 2026 14:43:17 -0400 Subject: [PATCH 21/21] fix bug --- src/axis.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/axis.js b/src/axis.js index 68cec03..1c6172e 100644 --- a/src/axis.js +++ b/src/axis.js @@ -238,7 +238,7 @@ function axis(orient, scale) { newTicks = newTicks2; } - else if(newTicks.length=2){ + else if(newTicks.length=2){ let newTicks2 = [];