【发布时间】:2019-03-23 15:17:48
【问题描述】:
我是 d3 的新手,使用以下代码在我的图表上创建 x 轴:
export const drawXAxis = (svg, timestamps, chartWidth, chartHeight) => {
console.log(chartWidth); // 885
console.log(timestamps.length); // 310
const xScale = d3.scaleLinear()
.domain([-1, timestamps.length])
.range([0, chartWidth]);
const xBand = d3.scaleBand()
.domain(
d3.range(-1, timestamps.length))
.range([0, chartWidth])
.padding(0.3);
const xAxis = d3.axisBottom()
.scale(xScale)
.tickFormat(function(d) {
const ts = moment.utc(timestamps[d]);
return ts.format('HH') + 'h';
});
const gX = svg.append("g")
.attr("class", "axis x-axis")
.attr("transform", "translate(0," + chartHeight + ")")
.call(xAxis);
return [xScale, xBand, xAxis, gX];
};
据我了解,d3 决定出现在 X 轴上的刻度数。
为了更好地控制 X 轴上出现的值以进行缩放,我想了解 d3 如何确定 - 在这种情况下 - 我有 16 个刻度。
如果我想更均匀地间隔刻度,例如,我想每 12 或 6 小时查看一次刻度,该怎么办?我的数据每天始终包含 0 -> 23 小时值,但 d3 在我的图表上显示随机时间。
【问题讨论】:
-
嘿,你能在 jsfiddle 或其他东西上重现它吗?我有预感如何为您解决它,但我需要先测试一下。
-
@wentjun 好的,我回家后会做的
-
当然!我已经对我的答案提出了解决方案的粗略草图。一旦我可以访问演示,我将尝试即兴创作。
标签: javascript d3.js