[4] D3.js中使用scale(比例)

本人的个人博客为: 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 的值为多少呢, 是 10 。它是根据线性函数计算的。一定要记住,
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。

[4] D3.js中使用scale(比例),布布扣,bubuko.com

时间: 2024-12-28 10:25:10

[4] D3.js中使用scale(比例)的相关文章

[5.1] D3.js中整合坐标轴 - 图表 - 文字标签

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 前面几节讲解了图标.坐标轴.比例等等,这一节整合这些内容做一个实用的图表.结果图如下: 代码如下所示: <html> <head> <meta charset="utf-8"> <title>Chart</title> </head> <style> .axis pat

[5] D3.js中如何添加坐标轴

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢.      第3节中做了一个图标,但没有为它添加一个相应的坐标轴,这样不知道每一个柱形到底有多长.这一节做一个坐标轴. D3中的坐标轴都是以 svg 图的形式出现的,这也是为什么在第3节中要使用 svg 的方法做柱形图的原因.第4节里我们讲解了 scale (比例)的用法,在做坐标轴的时候也需要用到比例.第4节中,我们说到scale 是一个函数,这一节中的坐标轴也

[2] D3.js中如何使用数据和选择元素

对D3.js或数据可视化有兴趣的朋友欢迎到 www.ourd3js.com 讨论. 接着上一讲的内容,这次讨论如何选择元素和使用数据. 现在页面中有三行文字,代码为: <p>Hello World 1</p> <p>Hello World 2</p> <p>Hello World 3</p> 定义一个集合set,里面有三个元素: var set = ["I like dog","I like cat&qu

[6] D3.js中如何让图表动起来

本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. [5.1]节中制作了一个比较完善的图表,但它是静态的,想做出它的动态效果吗?在D3中只需要短短的几行代码即可. 这一节将涉及4个函数的使用. 1.transition() 启动转变效果只需要添加这个即可.把它加到两种状态之间,例如: .attr("fill","red") .transition() .attr("fill

[2.1] D3.js中关于如何选择,插入,删除元素

对D3.js或数据可视化有兴趣的朋友欢迎到 www.ourd3js.com 讨论,本人博客首页为: http://blog.csdn.net/lzhlzz ,转载请注明出处,谢谢. 在D3.js中,选择元素的函数有两个:select 和 selectAll . 先说明一下它们的区别: select 是选择所有指定元素的第一个 selectAll 是选择指定元素的全部(以用于后面同时操作) 来看一个具体的例子,现有如下代码: <html> <head> <meta charse

d3.js中data(), enter() 和 exit()的作用

我在刚接触使用d3.js的时候,最感到困惑的一个地方是data(), enter(), exit()这几个操作. 在我接触一段时间,有了一些了解之后,简单说说我的理解. data() 先看一个例子: <body> <p></p> <p></p> <p></p> </body> 执行代码: d3.select("body").selectAll("p").data([1,

D3.js中对array的使用

由于D3类库和array密切相关,我们有必要讨论一下D3中的数据绑定以及在数组内部运算的方法. 1.D3中的数组 和其他编程语言一样,D3的数组元素可以是数字或者字符等类型,例如: someData=[20,36,48,59,600,88]; 此外,考虑json数据在网络传输中的便利性,D3数组也支持将json对象,如: someBook=[{name:"book1", price: 50}, {name:"book2", price: 150}, {name:&q

D3.js的v5版本入门教程(第十二章)—— D3.js中各种精美的图形

D3.js的v5版本入门教程(第十二章) D3中提供了各种制作常见图形的函数,在d3的v3版本中叫布局,通过d3.layout.xxx,来新建,但是到了v5,新建一个d3中基本的图形的方式变了(我也并不知道是不是还叫布局,我觉得也可以这么叫,反正布局指的也是一个绘图函数) 下面是d3中一些常见的部分图形 bubble —— 泡泡图 packing —— 打包图 bundling —— 捆图 force —— 力导向图 chord —— 弦图 pie——饼状图 tree——树状图 中国地图 我们利

D3学习之:D3.js中的12中地图投影方式

特别感谢:1.[张天旭]的D3API汉化说明,已被引用到官方网站: 2.[馒头华华]提供的ourd3js.com上提供的学习系列教程,让我们这些新人起码有了一个方向. 不得不说,学习国外的新技术真的是一个很艰苦的过程. 在学习D3绘制地图的过程中,有朋友建议看一下其中投影的说明比较好,于是,凭借我这半吊子不到的英文水平,大致给翻译了下来,仅供参考: 原文链接:https://github.com/mbostock/d3/wiki/Geo-Projections#albers D3中一共提供了12