序数比例尺的使用(ordinal)
d3js提供了多种比例尺可供选择,但总的来说分为两种,一种是quantitative(定量比例尺)一种是ordinal(序数比例尺),分别用于连续和不连续的数据。现在关于比例尺这一部分在v3和v4两个版本中的写法是有所区别的。(csdn的注释搞不定,注释格式请忽略)
首先说一下两个版本的区别
d3.scale.linear()
d3.scaleLinear()
虽然v4版本已经发布很久了,但是从我个人来说,还是习惯用上面v3的版本。
在d3里面使用的是链式结构,在linear scale中有一下方法:
"""这是基础方法,一般情况下简单图表这就足够了"""
d3.scale.linear()
.domain()/*定义域*/
.range()/*值域,可以用rangeRound()代替,这样的话输出值会进行四舍五入*/
.ticks(n)/*主要用来坐标轴刻度,有一个默认值,应该是10*/
.tickFormat(n,format)/*和ticks类似,不过可以返回自己设定的格式 */
.clamp(true)/*默认为false,如果不设置,输入超出定义域范围的值可能输出超出值域范围的值,如果设定,输出的最大最小值被限定在值域范围内,从我个人角度来看用到的不多*/
.nice()/*是定义域更加规整,因为输入数据不可能会很规整,这样会对调试造成一定困扰,这样可以得到规整的定义域,由于可视化对精度的要求没有高到那种程度,因此调用这个方法是不会对最后结果有较大影响的*/
.interpolate()/*设置差值,同样有interpolateRound的方法*/
.copy()/*从已有变换中复制一个变换(api这样说的,但是我没用过)*/
除此之外还有两个方法:
linear(x)
linear.invert(y)
我通常在控制台用:
console.log(linear(x))
console.log(linear.invert(y))
在定量比例尺中还有指数比例尺,对数比例尺和平方根比例尺,基本方法和线性比例尺一样,只不过分别多了一个指定指数和指定对数的方法。
"""相同的方法在这里不赘述了"""
d3.scale.sqrt()
d3.scale.pow()
.exponent()/*设置指数*/
d3.scale.log()
.base()/*设置底数*/
官方给的API中还有一下几种比例尺类型
d3.scale.quantize()
d3.scale.threshold()
d3.scale.quantile()
d3.scale.identity()
其中quantize和quantile是很类似的,他们的定义域是连续的但是值域是离散的,通常做具有热力图效果的图时会用到。这两种方法是有区别的,区别是quantile根据中位数来分隔区间,quantize根据算数平均值来分隔区间。而且和上述有一个方法不太一样,是invertExtent()而不是invert()。
threshold()是一个threshold(阈值)线性变换。他把定义域分为连续的n段,每一段与值域对应,也是把连续的定义域映射到离散值域中的方法。
identity()的方法官方给的说法是特殊的linear变换,因为我没用过(好像也没见到过),就不多说了。