D3.js 自定义时间间隔无限循环

D3.js 自定义时间间隔无限循环,d3.js,D3.js,我正在尝试创建一个自定义间隔,以便在d3时间刻度中只渲染我想要的刻度。我可以这样部分实现这一点: const customInterval = d3.timeMonth.filter(date => { return d3.timeMonth.count(0, date) % 2 === 0; }); 然后,我可以将其用于我的轴: axis.ticks(customInterval) 在这种情况下,我每个月都会打勾。当我想根据已知日期限制刻度时,问题就出现了。例如,我可能希望仅在2

我正在尝试创建一个自定义间隔,以便在d3时间刻度中只渲染我想要的刻度。我可以这样部分实现这一点:

const customInterval = d3.timeMonth.filter(date => {
  return d3.timeMonth.count(0, date) % 2 === 0;
});
然后,我可以将其用于我的轴:

axis.ticks(customInterval)
在这种情况下,我每个月都会打勾。当我想根据已知日期限制刻度时,问题就出现了。例如,我可能希望仅在2020/03/01之类的日期之后渲染刻度。因此,采用同样的方法,我做了如下工作:

const customInterval = d3.timeMonth.filter(date => {
  return date > moment('2020/03/01', 'YYYY/MM/DD').toDate();
});
上面的代码导致无限循环。在这种情况下,我使用的是力矩,但不使用力矩也可以观察到相同的行为

如何根据特定时间以自定义间隔过滤出刻度


复制到这里:

仍然不知道为什么会有无限循环。我安慰了
日期
,它将从2020年开始到“6月1日-1379日星期五”

但您可以使用
tickValues
呈现日期,请参阅

如果指定了值数组,则指定的值将用于刻度,而不是使用标尺的自动刻度生成器

不使用tickvalue

  • 像往常一样生成滴答声

  • 删除截止日期之前的代码

     axisSelection
     .attr('transform', "translate(0, 50)")
     .call(axis)
     .call(g=>{
         g.selectAll(".tick")
             .each(function(d) {
             if(d < cutOffDate) {
                 d3.select(this).remove()
             }
           })
     });
    
    axisSelection
    .attr('transform',“translate(0,50)”)
    .呼叫(安讯士)
    .call(g=>{
    g、 全选(“.勾选”)
    .每个功能(d){
    如果(d<截止日期){
    d3.选择(此).remove()
    }
    })
    });
    

  • 我使用的库是d3的一个抽象,对于我的用例,我需要使用
    d3.ticks
    而不是
    d3.tickValues
    @garethdn生成tick。您可以渲染所有tick,然后在
    截止日期之前删除这些tick。
    
     axisSelection
     .attr('transform', "translate(0, 50)")
     .call(axis)
     .call(g=>{
         g.selectAll(".tick")
             .each(function(d) {
             if(d < cutOffDate) {
                 d3.select(this).remove()
             }
           })
     });