D3 时间刻度 tickFormat 不根据范围排序
D3 time scale tickFormat doesn't ordered based on the range
我有以下代码:
import { scaleTime } from "d3-scale";
import { timeFormat } from "d3-time-format";
const scale = scaleTime().domain([1625747708797, 1625747709671])
.range([0, 1317]);
const ticks = scale.ticks();
const tickFormat = scale.tickFormat(1, '%L');
console.log(ticks.map(tickFormat));
控制台输出为:
["800", "900", "000", "100", "200", "300", "400", "500", "600"]
为什么不从头到尾对列表进行排序:
["000", "100", ...., "800"]
想象一下,你的数据集已经存在很多年了,而你 运行:
const tickFormat = scale.tickFormat(1, '%m');
ticks.map(tickFormat);
你会得到一个由月份数字 ([01-12]) 组成的字符串数组,但它们会乱序,因为你的数据是按时间顺序排列的(年,然后是月,等等)。
我有以下代码:
import { scaleTime } from "d3-scale";
import { timeFormat } from "d3-time-format";
const scale = scaleTime().domain([1625747708797, 1625747709671])
.range([0, 1317]);
const ticks = scale.ticks();
const tickFormat = scale.tickFormat(1, '%L');
console.log(ticks.map(tickFormat));
控制台输出为:
["800", "900", "000", "100", "200", "300", "400", "500", "600"]
为什么不从头到尾对列表进行排序:
["000", "100", ...., "800"]
想象一下,你的数据集已经存在很多年了,而你 运行:
const tickFormat = scale.tickFormat(1, '%m');
ticks.map(tickFormat);
你会得到一个由月份数字 ([01-12]) 组成的字符串数组,但它们会乱序,因为你的数据是按时间顺序排列的(年,然后是月,等等)。