scaleLinear
这个比例尺是线性的,可以如下使用
var x = d3.scaleLinear()
.domain([10, 130])
.range([0, 960]);
x(20); // 80
x(50); // 320
这里还可以用来计算颜色,这个以前在项目中遇到过,需要根据传入的值,显示不同的颜色
var color = d3.scaleLinear()
.domain([10, 100])
.range(["brown", "steelblue"]);
color(20); // "#9a3439"
color(50); // "#7b5167"
invert
这个函数的作用就是根据传入的range值,返回domain的值,实例如下
var x = d3.scaleLinear()
.domain([10, 130])
.range([0, 960]);
x.invert(80); // 20
x.invert(320); // 50
rangeRound
这个返回一个整数
clamp
如果clamp设置了为true,则如果输入了不在范围之内的数值,仍然返回范围之内的数值,实例如下
var x = d3.scaleLinear()
.domain([10, 130])
.range([0, 960]);
x(-10); // -160, outside range
x.invert(-160); // -10, outside domain
x.clamp(true);
x(-10); // 0, clamped to range
x.invert(-160); // 10, clamped to domain
unknown
设置当输入非法值的时候,返回的值,实例如下:
paint = d3.scaleLinear()
.range(["yellow", "red"])
.unknown("#ccc")
paint(NaN) 返回 #ccc
Interpolate
插入器,其实就是scaleLinear如何来根据range的值,如何返回domain的值,你可以使用d3自带的替换scaleLinear的默认插入器,比如
scaleRound = d3.scaleLinear()
.range([0, 960])
.interpolate(d3.interpolateRound)
scaleRound(1 / 3)
320
或者自己定义插入器,比如
scaleDecimal = d3.scaleLinear()
.range([0, 960])
.interpolate(function(a, b) {
const c = b - a;
return function(t) {
return +(a + t * c).toFixed(1);
};
})
scaleDecimal(2 / 7)
274.3
ticks
设置把坐标分成几部分,但是并不是严格按照ticks传入的数值进行区分,而是根据传入的数据结构合理的进行划分,
当domain是[0, 100] 的时候,ticks 不管传入任何值,只会取0,1 ,2,5 10, 比如你传入3,实际和传入5一样的,也就是说ticks(3) 和 ticks(5)的结果是一样的。
详细可以看这里 blog.csdn.net/weixin_3370…
总之你可以按照最大值减去最小值除以1,2,5,10和10的倍数来设置。
tickFormat
设置坐标中展示刻度的表现形式