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的倍数?
答案 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); }