在上一节中使用了一个很重要的概念 — scale (这个不知道翻译成什么,暂且叫它比例)。本节将重点介绍它的相关使用方法。
在介绍 scale 之前,先介绍两个经常和 scale 一起出现的函数,在上一节中也出现了。
- d3.max()
- d3.min()
它们用于求一个数组中的最大值和最小值,如果是一维数组,使用方法如下:
- var dataset = [ 30, 20 , 52 , 2 , 11 ];
- var result = d3.max( dataset );
- var dataset = [ [ 30 , 20 ] ,
- [ 52 , 2 ] ,
- [ 90 , 11 ] ];
- var result = d3.max( dataset , function(d){
- return d[0]; } );
接下来介绍 scale (比例)的用法,首先要明确一点: scale 是函数,不错,是函数。
为什么要使用 scale 呢?假设现在要为一个汽车公司做数据可视化,要将它每月的汽车销量用柱形图表示,假设这个月又100销量,你用100个像素长度的柱子来表示销量。下个月500销量,你用500个像素,再下个月又3000台呢?恐怕你不可能用3000个像素吧。这时候就要用到 scale (比例)了。
scale 是用于给定一个 domain (定义域),给定一个 range (值域) ,能够自动进行数值之间的转换。
最常用的 scale 是线性函数。它的用法如下:
- var scale = d3.scale.linear();
- scale.domain([0,20])
- .range([0,100]);
- var result = scale(10);
domain 和 range 最少放入两个数,可以超过两个数,但两者的数量必须相等,如下为放入3个数的情况:
- var scale = d3.scale.linear();
- scale.domain([0,20,40])
- .range([0,100,150]);
- var result = scale(30);
d3.scale.linear() 中还有一些方法,这里介绍两个:
- nice() ,改变函数的 domain ,能自动把 0.00000000000001 变为最接近它的 0 , 9.999999991 变为最接近它的 10
- rangeRound() , 能自动把输出变为最接近它的整数。
调用的时候形如:
- scale.domain([0.000000001,9.99999999991])
- .range([0,100])
- .nice();
上面介绍的是最常用的线性函数的 scale ,其他还有 sqrt ,pow,log,quantize,ordinal 等等各种 scale。 需要用的时候可到 d3js.org 查询API。
来自:
博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz