d3.timeFormat 在域上只有 1 个值

d3.timeFormat on domain has only 1 value

我正在尝试将 dayofweek 整数替换为其对应的名称。

var y_label = [...new Set(data.map((item) => item.y))].sort(d3.descending); // [0 - 6]

// Build Y scales and axis:
const y = d3.scaleBand().range([height, 0]).domain(y_label).padding(0.01);
svg.append("g").call(d3.axisLeft(y));

现在我正在添加.tickFormat(d3.timeFormat("%A"))

var y_label = [...new Set(data.map((item) => item.y))].sort(d3.descending); // [0 - 6]

// Build Y scales and axis:
const y = d3.scaleBand().range([height, 0]).domain(y_label).padding(0.01);
svg.append("g").call(d3.axisLeft(y).tickFormat(d3.timeFormat("%A")));

我得到的是这样的:

我什至不知道星期四是从哪里来的。 如何修复我的代码?

当您从数字构造 Date 对象时,它会将值作为自 1970 年 1 月 1 日 00:00(星期四)以来的毫秒数。 因此,从 0 到 6 的任何数字都被解释为那天的开始。 不要使用 d3.timeFormat。而只是定义:

const weekDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];

....call(d3.axisLeft(y).tickFormat(d => weekDays[d.y]);