如何控制 d3 scaleTime 的日期格式并删除不需要的时钟时间刻度?

How can I control the date format for d3 scaleTime and remove unwanted clock time ticks?

我正在尝试在面积图中显示一周的数据,并想使用 scaleTime() 填充我的 x 轴。我已将日期字符串转换为日期对象,并且域看起来是正确的,但我无法让 x 轴显示我想要的格式。我想看到的是显示日、月和年的 7 个刻度线。相反,我看到的是星期几和日期,并且还有显示“下午 12 点”的其他刻度线,如附图所示。

我已经尝试指定刻度线的数量,但它变得更加奇怪,尤其是在月份转换时,并且可能会显示类似 'Mon 29, Tues 30, Wed 31, November, Fri 2'.

的内容

最重要的是,我在实施比例尺时是否遗漏了什么?如果没有,我该如何微调刻度线以仅显示我想看到的内容?我找到的示例似乎 运行 与我遇到的问题不同。

我的日期对象的当前格式:“2020-07-22T06:00:00.000Z”

代码:

let x = d3.scaleTime().range([0, width-margin.right-margin.left])
let y = d3.scaleLinear().range([height-margin.bottom, margin.top])
x.domain([d3.min(area_data, d => d.date), d3.max(area_data, d=>d.date)])
y.domain([0, max_cases])
let xAxis = d3.axisBottom(x);
let yAxis = d3.axisLeft(y);

提前致谢。

你可以这样做

const xAxis = d3.axisBottom(x)
    .ticks(d3.timeDay.every(1), '%-d %b %Y');

ticks says that you want one tick for each day. The second argument is a format specifier 的第一个参数定义了如何将日期格式化为字符串。 '%-d %b %Y' 显示没有填充的日期、缩写的月份名称和完整的年份。例如,2021 年 11 月 22 日。您可以根据需要修改它以获得所需的格式。