Gaj*_*jus 6 javascript axis rounding d3.js
x.scale = d3.time.scale().domain(x.extent).range([0, dimensions.graph.width]);
Run Code Online (Sandbox Code Playgroud)
此代码使用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);
Run Code Online (Sandbox Code Playgroud)
如何扩展x.scale到最接近的25的倍数?
您在寻找好的功能吗?
x.scale = d3.time.scale().domain(x.extent)
.range([0, dimensions.graph.width]).nice();
Run Code Online (Sandbox Code Playgroud)
正确答案是interpolateRound,来自文档
返回两个数字 a 和 b 之间的内插器;插值器类似于
interpolateNumber,除了它将结果值四舍五入到最接近的整数。
var xScale = d3.scaleLinear()
.domain([0, 100])
.range([0, width])
.interpolate(d3.interpolateRound); // <-- round interpolation
Run Code Online (Sandbox Code Playgroud)
也许我有误解,但是你不能在应用比例函数后按照你的建议转换结果吗?IE:
function roundScale(origVal) { return Math.round(x.scale(origVal)/25) * 25;}
Run Code Online (Sandbox Code Playgroud)
然后使用该值来设置属性:
.attr("x", function(d) { return roundScale(d.value); }
Run Code Online (Sandbox Code Playgroud)