通过上面的一系列弯路,你或许已经隐隐察觉,ticks根本不是用来设定分段数量的。真正的分段,是靠每一段的单位来确定的,比如说定义域为[0, 40]想分5段,那么每一段长度应该为8,但是8根本不在2,5,10这个考虑范围内,同样的道理,[0, 700]想分3段也分不出来。
真正的思考逻辑是,用1,2,5及其10倍数作为除数去计算。比如[0, 600],用1,2,5及其10倍数去除,而不要用3,6,9之类的数去除。600/50=12,所以ticks填写12是可行的,600/3=200,所以ticks填写200是不行的。
ticks的值填写什么,根本不是段数决定的,而是除数决定的,先在脑海中想一下除数是否为1,2,5及其10倍数,(不是的话,放心,得不到你想要的效果,)想一下除出来的结果,再填写这个结果。
这里的定义域全部都是0开头的,实际上不一定从0开始,比如[300, 600],这个时候被除数应该用300。
如果你一不小心,填写了未经脑海计算的值,会得到什么结果呢?d3会尽可能处理到与你传入的值最接近的结果,但是有的时候就会变成上面那图的最后的效果,会让人摸不着头脑。
https://segmentfault.com/a/1190000008750211#articleHeader3