d3.js - 自定义时间间隔无限循环
问题描述
我正在尝试创建一个自定义间隔,以仅在 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();
});
上面的代码导致无限循环。在这种情况下,我使用矩,但不使用矩也可以观察到相同的行为。
如何根据特定时间过滤掉具有自定义间隔的刻度?
解决方案
还是不知道为什么会有无限循环。我安慰了date
它,它将从 2020 年开始到“Fri Jun 01 -1379”。
但您可以使用 呈现日期tickValues
,请参见此处。
如果指定了 values 数组,则指定的值用于刻度,而不是使用刻度的自动刻度生成器。
axis.tickValues(scale.ticks().filter(d=>{
return d > cutOffDate;
}))
.tickFormat(d => moment(d).format('MMM'))
不使用 tickValues
像往常一样生成刻度
删除之前的那些
cutOffDate
axisSelection .attr('transform', "translate(0, 50)") .call(axis) .call(g=>{ g.selectAll(".tick") .each(function(d) { if(d < cutOffDate) { d3.select(this).remove() } }) });
推荐阅读
- php - 在 Laravel 中使用 when 和 whereHas
- javascript - ng-repeat 解析 JSON 后无法显示
- python - 将多维数组转换为 dict 而无需任何导入
- c# - 视觉工作室-2017。这些项目要么不受支持,要么需要影响修改的项目行为才能在此版本的 VS 中打开
- docker - 无法从 docker 容器连接到另一个容器。拒绝连接
- regex - Ansible regrex 插入或匹配问题
- excel - 匹配两个数字集时返回部分 int 值
- python-3.x - Python Reportlab 自动换行表
- mysql - Laravel - 获取多个 withCount() 的总和
- amazon-web-services - Redshift自动增量不起作用开始负数