本人的个人博客为: 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. java学习笔记13--比较器(Comparable、Comparator)

    java学习笔记13--比较器(Comparable.Comparator) 分类: JAVA 2013-05-20 23:20 3296人阅读 评论(0) 收藏 举报 Comparable接口的作用 ...

  2. UDP 通信

    import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public ...

  3. JAVA进阶----ThreadPoolExecutor机制(转)

    ThreadPoolExecutor机制 一.概述 1.ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任务执行,线程 ...

  4. spring Annotation 组分注塑

    spring 注意分类 启动spring自己主动扫描功能 <context:component-scan/> 1.@Repository: 它用于将数据訪问层 (DAO 层 ) 的类标识为 ...

  5. VSTO之旅系列(三):自定义Excel UI

    原文:VSTO之旅系列(三):自定义Excel UI 本专题概要 引言 自定义任务窗体(Task Pane) 自定义选项卡,即Ribbon 自定义上下文菜单 小结 引言 在上一个专题中为大家介绍如何创 ...

  6. 使用ILmerge合并Exe、Dll文件的帮助类

    原文:使用ILmerge合并Exe.Dll文件的帮助类 using System; using System.Collections.Generic; using System.Text; using ...

  7. shortcut switch in terminal start pos & end pos

    ctrl a ctrl e switch in terminal start pos & end pos

  8. urses.ascii.ispunct(ch):

    Nullege: A Search Engine for Python source code urses.ascii.ispunct(ch): TypeError: 'unicode' object ...

  9. 【cocos2d-js官方文档】十、log

    api修改情况.左边为新增,右边为原来的. cc.log 不变 cc.warn 新增 cc.error 新增 cc.assert <-- cc.Assert 此次改造有下面几点原因: 加入原来没 ...

  10. PS顶级胶片滤镜插件 Alien Skin Exposure v6.x最新通用汉化补丁

    Alien Skin Exposure v6.0 是一款专业的PS胶片调色滤镜软件,使用Alien Skin Exposure可以迅速将照片调出各种胶片效果,如电影胶片.宝丽来胶片效果.波拉潘胶片效果 ...