Skip to content

Commit 8ef2184

Browse files
committed
normalize identity range
1 parent 76aba6d commit 8ef2184

File tree

2 files changed

+13
-19
lines changed

2 files changed

+13
-19
lines changed

src/marks/axis.js

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -500,9 +500,14 @@ function axisMark(mark, k, ariaLabel, data, options, initialize) {
500500
let channels;
501501
const m = mark(
502502
data,
503-
initializer(options, function (data, facets, _channels, scales) {
504-
const {[k]: scale} = scales;
503+
initializer(options, function (data, facets, _channels, scales, dimensions) {
504+
let {[k]: scale} = scales;
505505
if (!scale) throw new Error(`missing scale: ${k}`);
506+
if (scale.type === "identity" && (k === "x" || k === "y") && scale.range === undefined) {
507+
const {width, height, marginLeft, marginTop, marginRight, marginBottom} = dimensions;
508+
const range = k === "x" ? [marginLeft, width - marginRight] : [height - marginBottom, marginTop];
509+
scale = {...scale, range, domain: range};
510+
}
506511
let {ticks, tickSpacing, interval} = options;
507512
if (isTemporalScale(scale) && typeof ticks === "string") (interval = ticks), (ticks = undefined);
508513
if (data == null) {
@@ -589,25 +594,15 @@ function inferTickFormat(scale, ticks, tickFormat) {
589594
.tickFormat(isIterable(ticks) ? null : ticks, tickFormat);
590595
default:
591596
return scaleLinear()
592-
.domain(scale.domain ?? scale.range)
597+
.domain(scale.domain)
593598
.tickFormat(isIterable(ticks) ? null : ticks, tickFormat);
594599
}
595600
}
596601

597-
function inferTickFunction(scale) {
598-
switch (scale.type) {
599-
case "point":
600-
case "band":
601-
return;
602-
case "log":
603-
return scaleLog().domain(scale.domain).ticks;
604-
case "time":
605-
return scaleTime().domain(scale.domain).ticks;
606-
case "utc":
607-
return scaleUtc().domain(scale.domain).ticks;
608-
default:
609-
return scaleLinear().domain(scale.domain ?? scale.range).ticks;
610-
}
602+
function inferTickFunction({type, domain}) {
603+
if (type === "point" || type === "band") return;
604+
const S = type === "log" ? scaleLog : type === "time" ? scaleTime : type === "utc" ? scaleUtc : scaleLinear;
605+
return S().domain(domain).ticks;
611606
}
612607

613608
const shapeTickBottom = {

src/scales.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -568,12 +568,11 @@ export function exposeScales(scales) {
568568
}
569569

570570
function censorScale({label, ...scale}) {
571-
if (scale.type === "identity") delete scale.range;
572571
return scale;
573572
}
574573

575574
function instantiateScale({scale, type, domain, range, interpolate, interval, transform, percent, pivot, label}) {
576-
if (type === "identity") return {type, apply: (d) => d, invert: (d) => d, ...(range && {range: slice(range)})};
575+
if (type === "identity") return {type, apply: (d) => d, invert: (d) => d};
577576
const unknown = scale.unknown ? scale.unknown() : undefined;
578577
return {
579578
type,

0 commit comments

Comments
 (0)