【发布时间】:2012-08-24 13:27:54
【问题描述】:
我正在 d3.js 中构建一个条形图,其中每个条形代表一个月内的总 TB 病例。数据本质上由一个日期(最初是 %Y-%m 格式的字符串,但使用 d3.time.format.parse 解析)和一个整数组成。我希望轴标签相对灵活(仅显示年份边界、每个月标签等),但我也希望条形间隔均匀。
当我使用日期刻度时,我可以获得灵活的轴标签:
var xScaleDate = d3.time.scale()
.domain(d3.extent(thisstat, function(d) { return d.date; }))
.range([0, width - margin.left - margin.right]);
...但由于每个月的天数不同(例如,2 月和 3 月明显比其他月份靠得更近),条形图的间距并不均匀。我可以使用线性刻度得到等距的条:
var xScaleLinear = d3.scale.linear()
.domain([0, thisstat.length])
.range([0, width - margin.left - margin.right]);
...但我不知道如何拥有基于日期的轴标签。我试过同时使用这两种刻度,只从xScaleDate 生成一个轴,只是想看看会发生什么,但刻度自然不会完全对齐。
有没有一种我想念的直接方法来实现这一点?
【问题讨论】:
-
听起来问题在于 D3 从实际时间戳设置 xpos。你如何计算
data.monthsFromJan2000或类似的并将其用作xpos 的数据输入?这样它们将均匀分布。您还可以存储data.year和data.month用于标记目的。
标签: javascript charts axis d3.js