本人的个人博客为: www.ourd3js.com

csdn博客为: blog.csdn.net/lzhlzz

转载请注明出处,谢谢。


在上一节中使用了一个非常重要的概念 — scale (这个不知道翻译成什么,暂且叫它比例)。本节将重点介绍它的相关用法。

在介绍 scale 之前,先介绍两个常常和 scale 一起出现的函数,在上一节中也出现了。

  • d3.max()
  • d3.min()
    它们用于求一个数组中的最大值和最小值,假设是一维数组,用法例如以下:
		var dataset = [ 30, 20 , 52 , 2 , 11 ];
var result = d3.max( dataset );

变量 result 中保存的是数组 dataset 的最大值 52。这是一维数组的使用方法,二维数组的使用方法例如以下:

var dataset = [ [ 30 , 20 ] ,
[ 52 , 2 ] ,
[ 90 , 11 ] ];
var result = d3.max( dataset , function(d){
return d[0]; } );

如此,返回的值为90, 由于比較的是30,52,90这三个数,最后一行的 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);

通过 d3.scale.linear() 指定要使用线性函数的 scale 。下两行指定 scale 的 domain 和 range ,这里分别为 [ 0 , 20 ] 和 [ 0 , 100 ],假设不指定,它们默认都为 [ 0 , 1 ] 。接下来调用 scale 函数,传了一个參数10给它,返回值保存在 result 中。 result 的值为多少呢, 是 50 。它是依据线性函数计算的。一定要记住,
scale 是一个函数。

    
    domain 和 range 最少放入两个数,能够超过两个数,但两者的数量必须相等,例如以下为放入3个数的情况:
		var scale = d3.scale.linear();
scale.domain([0,20,40])
.range([0,100,150]);
var result = scale(30);

这就是说有两个线性函数,当输入的值为30时,属于 domain (定义域)的20-40这个范围,那么输出为100-150这个范围。这里的30相应的值为125,所以 result 的值为125。



    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。




【 D3.js 入门系列 --- 4 】 怎样使用scale(比例)的更多相关文章

  1. 【 D3.js 入门系列 — 11 】 入门总结

    D3 新专题首页 一转眼,这个入门系列已经积累了二十二篇文章之多,我想作为 D3.js 这款数据可视化工具的入门来说已经足够了.相信仅仅要看完本系列.以后全然能够在辅以查询的情况下完毕大部分可视化工作 ...

  2. 【 D3.js 入门系列 --- 3 】 做一个简单的图表!

    前面说了几节,都是对文字进行处理,这一节中将用 D3.js 做一个简单的柱形图. 做柱形图有很多种方法,比如用 HTML 的 div 标签,或用 svg . 推荐用 SVG 来做各种图形.SVG 意为 ...

  3. 【 D3.js 入门系列 — 1 】 第一个程序 HelloWorld

    记得以前刚上大一学 C 语言的时候,写的第一个程序就是在控制台上输出 HelloWorld .当时很纳闷,为什么要输出这个.老师解释说所有学编程入门的第一个程序都是在屏幕上输出 HelloWorld, ...

  4. 【 D3.js 入门系列 --- 2.1 】 关于如何选择,插入,删除元素

    在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同 ...

  5. 【 D3.js 入门系列 --- 2 】 如何使用数据和选择元素

    接着上一讲的内容,这次讨论如何选择元素和使用数据.    现在页面中有三行文字,代码为: <p>Hello World 1</p> <p>Hello World 2 ...

  6. 【 D3.js 入门系列 --- 1 】 第一个程序HelloWorld

    下面开始用D3.js处理第一个简单问题,先看下面的代码: <html> <head> <meta charset="utf-8"> <ti ...

  7. 【 D3.js 入门系列 --- 0 】 简介和安装

    D3的全称是(Data-Driven Documents),顾名思义可以知道是一个关于数据驱动的文档的javascript类库.如果你不知道什么是javascript,请先学习javascript的相 ...

  8. 【 D3.js 入门系列 --- 2 】 怎样使用数据和选择元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 接着上一讲的内容,这 ...

  9. 【 D3.js 入门系列 --- 2.1 】 关于怎样选择,插入,删除元素

    本人的个人博客首页为: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/. 转载请注明出处,谢谢. 在D3.js中,选择 ...

  10. 【 D3.js 入门系列 --- 0 】 简介及安装

    家是我的个人博客: http://www.ourd3js.com/  ,csdn博客首页为:http://blog.csdn.net/lzhlzz/.转载请注明出处,谢谢. D3的全称是(Data-D ...

随机推荐

  1. codeforces 325B Stadium and Games

    这道题思路很简单,设刚开始队伍数为d=2^p*x,其中x是奇数,则比赛场次n=(2^p-1)*x+(x-1)*x/2,然后从0开始枚举p的值,接着解一元二次方程x^2+(2^(p+1)-3)x-2*n ...

  2. Google 搜索的基本语法

    ★搜索引擎的选择 先简单说一下"搜索引擎的选择". 在咱们天朝,Google 屡屡被 GFW 骚扰,导致百度占了便宜,成为份额最高的搜索引擎.不过今天这篇教程,俺还是继续拿 Goo ...

  3. 数据挖掘 决策树算法 ID3 通俗演绎

    决策树是对数据进行分类,以此达到预測的目的.该决策树方法先依据训练集数据形成决策树,假设该树不能对全部对象给出正确的分类,那么选择一些例外添�到训练集数据中,反复该过程一直到形成正确的决策集.决策树代 ...

  4. hdu 1086(判断线段相交)

    传送门:You can Solve a Geometry Problem too 题意:给n条线段,判断相交的点数. 分析:判断线段相交模板题,快速排斥实验原理就是每条线段代表的向量和该线段的一个端点 ...

  5. FZU2179(数位dp)

    传送门:Chriswho 题意:求区间[1,n]内能整除自己本身各位数字的数的个数. 分析:这题跟CF 55D Beautiful numbers一样的,一个数能被它的所有非零数位整除,则能被它们的最 ...

  6. 2014-5-22 java.lang.OutOfMemoryError: Java heap space的一次诊断

    收到消息某系统一个节点因为内存溢出而宕机.系统的中间件是weblogic.数据库的oracle. 1. 先用IBM  HeapAnalyzer分析内存溢出时的dump文件,找到占用内存最多的请求,然后 ...

  7. TopCoder SRM 625 Incrementing Sequence 题解

    本题就是给出一个数k和一个数组,包含N个元素,通过每次添加�数组中的一个数的操作,最后须要得到1 - N的一个序列,不用排序. 能够从暴力法入手,然后优化. 这里利用hash表进行优化,终于得到时间效 ...

  8. Android基于发展Service音乐播放器

    这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activit ...

  9. linux kickstart 自动安装

    最近很多业务系统都是linux lnmp平台安装,反复的安装让人觉得很苦恼,仔细钻研了下kickstart .这里环境是red hat linux 5.8 32位,系统盘中的软件包里包含有kickst ...

  10. xcode project

    An Xcode project is a repository for all the files, resources, and information required to build one ...