In D3 version 4's D3-array module,d3.ticks()
接受一个数组并输出一个适合图表轴标签的精确舍入值数组:
d3.ticks(start, stop, count)
在start和stop(包括)之间返回一个近似计数+ 1均匀间隔,精确舍入的值的数组。每个值是10的幂乘以1,2或5.另请参阅tickStep和linear.ticks ...
Ticks是包容性的,因为它们可能包含指定的起始值和停止值,如果(并且仅当)它们是精确的,精确舍入的值与推断的步骤一致。更正式地说,每个返回的tick t满足start≤t和t≤stop。
然而,我没有得到我期望的结果。例如,为此:
d3.ticks( 0, 63500, 7 );
我希望输出如下:
[ 0, 10000, 20000, 30000, 40000, 50000, 60000, 70000 ]
相反,我得到的是:
[ 0, 10000, 20000, 30000, 40000, 50000, 60000 ]
...其中我的最高价值(63500)大于我图表的最高价格,这意味着我期望一个价值延伸到图表之外。
请求不同数量的刻度并没有解决它:
( 0, 63500, 8 )
提供相同的内容( 0, 63500, 9 )
也提供相同的( 0, 63500, 10 )
提供[0, 5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000, 45000, 50000, 55000, 60000]
,这不是更好24
,其中[0, 2000, 4000, ... 62000, 64000]
为什么会发生这种情况(我是否误解了某些内容,或者这是否违反了#s;t≤t停止")来自文档?),我如何确保我的刻度覆盖我的范围?
我已经看到问题d3.js scale doesn't place tick at the top,其中描述了D3版本3中的类似问题,并附有说明:
...但版本4中的功能不同,答案中的文档链接不适用于D3版本4.
我已查看D3-Scale - linear.ticks()
的链接似乎已被破坏 - 但我并不理解为什么我要做的事情需要一个全新的D3子模块和缩放算法。
答案 0 :(得分:0)
试试这个
getRoundedYMaxValue(number) {
var numLen = number.toString().length;
var dividerValue = "1"
for (var i = 0; i < numLen - 1; i++) {
dividerValue += 0
}
return Math.ceil(number / dividerValue) * dividerValue
}