如何使比例舍入到#的最接近的倍数?

时间:2012-08-25 20:24:08

标签: javascript axis d3.js rounding

x.scale = d3.time.scale().domain(x.extent).range([0, dimensions.graph.width]);

此代码使用x.extent[Wed Aug 01 2012 00:00:00 GMT+0300 (EEST), Tue Aug 07 2012 00:00:00 GMT+0300 (EEST)])和图形宽度(1000)生成x值比例。但是,我需要将此值四舍五入到最接近的25(Math.round(x/25)*25)。

通过这样做,我想实现精确的宽度刻度,现在定义为:

x.axis = d3.svg.axis()
    .ticks(d3.time.days, 1)
    .tickSize(10, 5, 0)
    .scale(x.scale);

如何将x.scale扩展到最接近的25的倍数?

3 个答案:

答案 0 :(得分:3)

您在寻找nice功能吗?

x.scale = d3.time.scale().domain(x.extent)
            .range([0, dimensions.graph.width]).nice();

答案 1 :(得分:3)

文档中正确的答案是interpolateRound

  

返回两个数字a和b之间的内插器;内插器与interpolateNumber相似,除了它会将结果值舍入到最接近的整数。

var xScale = d3.scaleLinear()
    .domain([0, 100])
    .range([0, width])
    .interpolate(d3.interpolateRound); // <-- round interpolation

答案 2 :(得分:1)

也许我误解了,但是你不能在应用比例函数后按照你的建议改变结果吗?即:

function roundScale(origVal) { return Math.round(x.scale(origVal)/25) * 25;}

然后使用该值设置属性:

.attr("x", function(d) { return roundScale(d.value); }