gpt4 book ai didi

d3.js - 如何在 d3.js 中制作小时和分钟的自定义轴格式化程序?

转载 作者:行者123 更新时间:2023-12-02 20:56:44 24 4
gpt4 key购买 nike

我有一个数据集,正在使用 d3.js 绘制图形。 x 轴表示时间(以分钟为单位)。我想以 hh:mm 格式显示此轴,但我找不到在 d3 中干净地执行此操作的方法。

我的轴代码如下所示:

svg.append('g')
.attr('class', 'x axis')
.attr('transform', 'translate(0,' + height + ')')
.call(d3.svg.axis()
.scale(x)
.orient('bottom'));

它会在几分钟内生成类似于 [100, 115, 130, 140] 等的标签。

我当前的解决方案是在生成后选择 text 元素,并使用函数覆盖它们:

   svg.selectAll('.x.axis text')
.text(function(d) {
d = d.toFixed();
var hours = Math.floor(d / 60);
var minutes = pad((d % 60), 2);
return hours + ":" + minutes;
});

这会输出轴刻度,如[1:40, 1:55, 2:10]等。

但这感觉很糟糕并且避免使用d3.format。有没有更好的方法来制作这些标签?

最佳答案

如果您有绝对时间,您可能希望将x数据转换为JavaScript Date objects而不是简单的数字,然后你想使用 d3.time.scaled3.time.format 。轴的“hh:mm”格式示例如下:

d3.svg.axis()
.scale(x)
.orient("bottom")
.tickFormat(d3.time.format("%H:%M"));

实际上,您可能根本不需要指定刻度格式;根据您的刻度域和刻度数,default time scale format可能足以满足您的需求。或者,如果您想要完全控制,您还可以指定刻度的刻度间隔。例如,对于每十五分钟一次的刻度,您可能会说:

d3.svg.axis()
.scale(x)
.orient("bottom")
.ticks(d3.time.minutes, 15)
.tickFormat(d3.time.format("%H:%M"));

如果您有相对时间持续时间(因此数字代表分钟而不是绝对日期),您可以通过选择任意纪元将它们格式化为日期并即时转换。这样您就可以将数据本身保留为数字。例如:

var formatTime = d3.time.format("%H:%M"),
formatMinutes = function(d) { return formatTime(new Date(2012, 0, 1, 0, d)); };

由于仅显示分钟和小时,因此您选择哪个纪元并不重要。以下是使用此技术来格式化持续时间分布的示例:

关于d3.js - 如何在 d3.js 中制作小时和分钟的自定义轴格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286872/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com