d3.js - d3js 时间线——在擦洗日为日期和时间生成清晰的粒度视图
问题描述
我正在构建一个时间线图 - 当画笔变小到 1 天的范围时,它会在顶部更改其日期比例 - 但是当它达到这种模式时 - 标签重叠并且看起来很乱,直到你达到 12小时传播。
清理此功能使其不重叠的最佳方法是什么。我想有 1 行显示日期 - 另一行显示该级别的小时数。
https://jsfiddle.net/aLh9d51t/
var tFormat = '%Y-%m';
var tTick = 'timeMonth';
if (days < 40) {
tFormat = '%Y-%m-%d';
tTick = 'timeWeek';
}
if (days <= 7) {
tFormat = '%Y-%m-%d';
tTick = 'timeDay';
}
if (days <= 1) {
tFormat = '%Y-%m-%d %H%p';
tTick = 'timeHour';
}
解决方案
首先,您可以尽可能隐藏日期的冗余部分:仅当可见多个时才显示年、月、日。所以当你显示小时和分钟时,你绝对不需要年和月。
看看默认的 d3 轴如何处理这个(例如https://bl.ocks.org/mbostock/1166403)。
其次,考虑到您的图表具有固定宽度,您可以针对不同的缩放级别微调不同的格式(您已经在代码片段中这样做了)。
看看这个例子:http
://bl.ocks.org/oluckyman/6199145
它的逻辑与你的代码片段相似:
https ://gist.github.com/oluckyman/6199145#file-axisdaysview-js- L33-L58
但是选择哪种格式取决于图表宽度:
https ://gist.github.com/oluckyman/6199145#file-axisdaysview-js-L72-L75
第三,如果由于某种原因您限制使用长标签,您可以将它们旋转到 30°-45°
推荐阅读
- python - Django - 通过 Ajax 发布 jQuery 字典在 views.py 中打印 None
- java - Apache-POI 在 Excel 中设置值,但另一个单元格的公式无法使用该值,直到我在处理条中手动按 enter
- angular - Angular:如何在动态组件中使用共享模块?
- php - 按自定义字段对管理列进行排序未按预期工作
- soap - 使用 Sabre soap api 访问 pnrs 列表并从队列中删除
- c# - 在 post 方法中初始化新列表时,下拉列表为空
- angular - 我在输入中绑定 ngModel 时出错
- java - 有没有办法在appium中捕获全屏截图
- jquery - 如果选项选择了jquery,如何隐藏div
- python - 使用 Python Pandas 将列表中的数据重新组织到表格中