D3 定量与线性比例尺
比例尺(Scale),是在数据可视化以及专业图表中常用的一个基本元素,通过使用比例尺可以让一个数据图表更加的专业且复杂。比例尺的作用是将数据1:1对应到比例尺
中,就如数据 one
,对应比例尺值中的two
一样。
比例尺作用
就如上述所示,我们根据的是当一个数据为100
时,就用长度为100
的像素进行表示,但是当数据为1000
的时候,长度再使用1000
表述就显得极为啦跨,且不可能一眼直观的看出差别,所以根据这种情况,我们可以合理的使用比例尺
来表明数据。
定量比例尺
在数学中,共有线性函数、指数函数、对数函数
,他们都有一个特征就是都是随着一个量的变化而变化,如上图中的一个线性函数y=2x+1
,之后先标注x
轴坐标为[0,2]
,之后分别通过使用2*0+1=1,2*2+1=5
来得出y
轴的坐标[1,5]
。那么才此时,x
将会被称之为定义域,而y
的范围可被称之为该值中的值域
,而计算的出的结果被称之为对应法则,这三种定义域、值域、对应法则也被称之为函数的三要素。
在D3的数据可视化中那个,需要通过一个量计算出另外一个量的方法,所提供的方法被称之为比例尺,定量比例尺是值定义域是连续的情况而被称之为定量比例尺,通常 0~2
之间的所有值将会被称之为“连续值”,像是1,2,3
将会被称之为离散值。
线性比例尺
线性比例尺方法
线性比例尺(Linear Scale
)是d3.js 中最为常用且与线性函数类似的计算相应关系的一种计算方式,主要包括如下方法 :
ID | DA | FA |
---|---|---|
d3.scale.linear() | 创建一个线性的比例尺 | |
linear(x) | 选择一个定义域内的值,并返回值域内对应的数据 | |
linear.invert(y) | 选择一个值域内的值,并返回定义域内所对应的数据 | |
linear.clamp() | 默认被设置为 false ,即当比例尺收到了一个超过本身定义范围时依然按照同样 的方法计算的出。如果被设置为true 那么将会被缩小至值域 范围以内。 |
|
linear.nice() | 将定义域的范围修改为稍微理想的格式,如定义域为[0.40000112312,0.9999998123] 这种格式,那么输出的将会是[0.4,0.9] 的定义域格式。(主要用于选取坐标轴的刻度) |
|
linear.tickFormat() | 主要用于设置就有代表性的定义域中的值 表示形式,可设置显示小数点的后两位以及使用百分号表示形式等(主要用于在坐标轴上) |
|
linear.ticks() | 返回一个在定义域内值 中较为有代表性的数目,(默认为10), |
|
.domain() | 设定 \ 获取一个定义域 (domain) | |
.range() | 设定 \ 获取一个值域 (range) | |
linear.rangeRound() | 可代替 .range() 进行使用,比例尺中的数据将会被进行四舍五入 进行计算,且结果为整数 |
clamp and linear.invert or linear.invert
1 | var linear = d3.scale.linear() |
通过使用 clamp and linear.invert or linear.invert
方法,我们可以将当超过定义域
时压缩至值域范围内,也可以通过设置其值域
来返回定义域所定应的值。
rangeRound vs nice
rangeRound
1 | var linear = d3.scale.linear() |
1 |
|
1 |
|
1 |
|
基础格式与应用
在 d3.js 中,为开发者所提供了根据各种场合所适用与不同的计算方式,就比如下方的线性比例尺
,在所有比例尺中都需要指定一个定义域(domain)为x
轴,以及一个值域(range)为y
轴来进行定义一个线性比例尺:
1 | var linear = d3.scale.linear() |
通过上述的 code 我们们创建了一个其定义域为500
、值域为100
的比例尺。通过定义了线性比例尺,我呢可以通过x
来计算y
,就比如在上述的code中我们主要提供了10、15、20
规模的数据,通过计算结果可以分别的出2,3,4
规模的数据。