Merge pull request #963 from hgiesel/ease130
Coerce ease graph min to 130 if applicable
This commit is contained in:
commit
0bd94659f1
@ -15,7 +15,7 @@ import {
|
|||||||
scaleSequential,
|
scaleSequential,
|
||||||
interpolateRdYlGn,
|
interpolateRdYlGn,
|
||||||
} from "d3";
|
} from "d3";
|
||||||
import type { Bin } from "d3";
|
import type { Bin, ScaleLinear } from "d3";
|
||||||
import { CardType } from "anki/cards";
|
import { CardType } from "anki/cards";
|
||||||
import type { HistogramData } from "./histogram-graph";
|
import type { HistogramData } from "./histogram-graph";
|
||||||
import type { I18n } from "anki/i18n";
|
import type { I18n } from "anki/i18n";
|
||||||
@ -43,6 +43,30 @@ function makeQuery(start: number, end: number): string {
|
|||||||
return `${fromQuery} AND ${tillQuery}`;
|
return `${fromQuery} AND ${tillQuery}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getAdjustedScaleAndTicks(
|
||||||
|
min: number,
|
||||||
|
max: number,
|
||||||
|
desiredBars: number
|
||||||
|
): [ScaleLinear<number, number, never>, number[]] {
|
||||||
|
const prescale = scaleLinear().domain([min, max]).nice();
|
||||||
|
const ticks = prescale.ticks(desiredBars);
|
||||||
|
|
||||||
|
const predomain = prescale.domain() as [number, number];
|
||||||
|
|
||||||
|
const minOffset = min - predomain[0];
|
||||||
|
const tickSize = ticks[1] - ticks[0];
|
||||||
|
|
||||||
|
if (minOffset === 0 || (minOffset % tickSize !== 0 && tickSize % minOffset !== 0)) {
|
||||||
|
return [prescale, ticks];
|
||||||
|
}
|
||||||
|
|
||||||
|
const add = (n: number): number => n + minOffset;
|
||||||
|
return [
|
||||||
|
scaleLinear().domain(predomain.map(add) as [number, number]),
|
||||||
|
ticks.map(add),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
export function prepareData(
|
export function prepareData(
|
||||||
data: GraphData,
|
data: GraphData,
|
||||||
i18n: I18n,
|
i18n: I18n,
|
||||||
@ -56,16 +80,15 @@ export function prepareData(
|
|||||||
}
|
}
|
||||||
const total = allEases.length;
|
const total = allEases.length;
|
||||||
const [, origXMax] = extent(allEases);
|
const [, origXMax] = extent(allEases);
|
||||||
let xMax = origXMax;
|
|
||||||
const xMin = 130;
|
const xMin = 130;
|
||||||
|
const xMax = origXMax! + 1;
|
||||||
xMax = xMax! + 1;
|
|
||||||
const desiredBars = 20;
|
const desiredBars = 20;
|
||||||
|
|
||||||
const scale = scaleLinear().domain([130, xMax!]).nice();
|
const [scale, ticks] = getAdjustedScaleAndTicks(xMin, xMax, desiredBars);
|
||||||
|
|
||||||
const bins = histogram()
|
const bins = histogram()
|
||||||
.domain(scale.domain() as any)
|
.domain(scale.domain() as [number, number])
|
||||||
.thresholds(scale.ticks(desiredBars))(allEases);
|
.thresholds(ticks)(allEases);
|
||||||
|
|
||||||
const colourScale = scaleSequential(interpolateRdYlGn).domain([xMin, 300]);
|
const colourScale = scaleSequential(interpolateRdYlGn).domain([xMin, 300]);
|
||||||
|
|
||||||
|
@ -122,7 +122,6 @@ export function prepareIntervalData(
|
|||||||
const desiredBars = Math.min(70, xMax! - xMin!);
|
const desiredBars = Math.min(70, xMax! - xMin!);
|
||||||
|
|
||||||
const prescale = scaleLinear().domain([xMin!, xMax!]);
|
const prescale = scaleLinear().domain([xMin!, xMax!]);
|
||||||
|
|
||||||
const scale = scaleLinear().domain(
|
const scale = scaleLinear().domain(
|
||||||
(niceNecessary ? prescale.nice() : prescale).domain().map(increment)
|
(niceNecessary ? prescale.nice() : prescale).domain().map(increment)
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user