定量比例尺 :
数学上有函数的概念,不是编程中所说的函数,如线性函数、指数函数、对数函数等,而指的是一个量随着另一个量的变化而变化。例如有一下线性函数 : y=2x+1该函数在二维坐标系中绘制出来的图形是一条直线,如果限制x的范围为[0,2],则可计算得到y的范围为[1,5]。x的范围[0,2]称为该函数的定义域,y的范围称为该函数的值域。根据x计算得到y的方法称为对应法则。定义域、值域、对应法则称为函数的三要素。
 
在数据可视化中,常需要像上述函数一样,将一个量转换为另一个量。D3提供了这样的转换方法,称为比例尺(scale)。
 
我们现在所说的定量比例尺,是指当定义域是连续的情况。从0~2之间的所有值,称为连续的值。类似0、1、2这样的值,称为离散的值
 
定量比例尺包括 : 线性比例尺指数比例尺对数比例尺量子比例尺分位比例尺阈值比例尺
 
按上面顺序,首先先介绍线性比例尺 。
 
线性比例尺
线性比例尺(Linear Scale)是常用比例尺,与线性函数类似,计算线性的对应关系。相关方法有:
 
d3.scaleBand.linear()        
//创建一个比例尺。
 
linear(x)             
//输入一个在定义域内的值x,返回值域内对应的值。
 
linear.invert(y)          
//输入一个在值域内的值,返回定义域内对应的值。
 
linear.domain([numbers])       
//设定或获取定义域
 
linear.range([values])       
 //设定或获取值域
 
linear.rangeRound([values])    
//代替range()使用的话,比例尺的输出值会进行四舍五入的运算,结果为整数。
 
linear.clamp([boolean])         
//默认被设置为false,当该比例尺接受一个超出定义域范围内的值时,依然能够按照同样的计算方法计算得到一个值,这个值可能是超出值域范围的,如果设置为true,则任何超出值域的范围的值,都会被收缩到值域范围内。
 
linear.nice([count])          
 //将定义域的范围扩展成比较理想的形式。例如,定义域为[0.50000543,0.899995433221],则使用nice()之后,其定义域变为[0.5,0.9]。对于[0.500000543,69.99998888]这样的定义域,则自动将其变为[0,70].
 
linear.ticks([count])          
//设定或获取定义域内具有代表性的值得数目。count默认为10,如果定义域[0,70],则该函数返回[0,10,20,30,40,50,60,70]。如果count设置为3,则返回   [0,20,40,60]。该方法主要用于选取坐标轴刻度。
 
linear.tickFormat(count,[format])   
//用于设置定义域内具有代表性的值得表示形式,如显示到小数点后两位,使用百分比的形式显示,主要用于坐标轴上。
 
以上方法中,linear(x)、invert()、domain()、range()是基础方法,使用形式看代码:
 
 var linear = d3.scale.linear()
.domain([0,20]) //设置定义域为[0,20]
.range([0,100]) //设置值域为[0,100] console.log(linear(10)) //返回值50
console.log(linear(30)) //返回值150
console.log(linear.invert(80)) //返回值16
 
用linear()计算的结果是,输出都是输入值得5倍。而使用linear.invert()时,输出都是输入值得五分之一。要注意的是,倒数第二行,linear()接收了一个超出定义域范围的值30,结果还是正常输出其乘以5之后的值150.此输出值也超过了值域的范围如果不希望其超出范围,可以使用clamp(),代码如下:
 
 linear.clamp(true)
console.log(linear(30)) //返回值100
 
将clamp()设置为true后,超出值域的值会取值域的上下限作为输出。对于输出的数值,如果希望对其进行四舍五入,要使用rangRound()来设置:
 
  linear.rangeRound([0,100]);
console.log(linear(13.33)) //返回值67
 
如果不用rangeRound()重新设置值域,则输出值为66.649999999999,其四舍五入后值为67.如果定义域中有无穷小数,可用nice(),代码:
 
 linear.domain([0.123000000,0.488888888])
.nice()
console.log(linear.domain()) //返回值[0.1,0.5] linear.domain([33.611111,45.97745])
.nice()
console.log(linear.domain()) //返回值[33,46]
应用nice()后,定义域变成了比较工整的形式,但是并不是四舍五入。最后讲解ticks()和tickFormat()的用法,它们主要是用在坐标轴上的。看代码:
 
 var linear2 = d3.scale.linear()
.domain([-20,20])
.range([0,100])
var ticks = linear2.ticks(5);
console.log(ticks) //返回值[-20, -10, 0, 10, 20] var tickFormat = linear2.tickFormat(5,"+");
for (var i = 0; i < ticks.length ; i++){
//ticks数组中的每一个值,都使用一次tickFormat()函数
ticks[i] = tickFormat(ticks[i])
}
console.log(ticks) //返回值["-20", "-10", "+0", "+10", "+20"]
 
这段代码中,比例尺的定义域为[-20,20],调用ticks(5)之后返回一个数组,分别是该定义域内具有代表性的值。然后,调用tickFormat(),返回值是一个函数,因此调用时要使用函数的调用方式。最终结果是,ticks变成了设定的格式。此外设定的格式为"+":表示如果是正数,则在前面添加一个加号,负数则添加一个减号。除此之外,常用的格式还有%、$等,遵循迷你语言格式规范。
 
比例尺的domain()和range()最少放入两个数,可以超过两个数,但两者的数量必须相等,放入三个数的情况如下,代码:
 var scale = d3.scale.linear();
scale.domain([0,20,40])
.range([0,100,150]);
console.log(scale(30)) //返回值125

这表示有两个线性函数,当输入的值为30时,属于domain的20~40的范围,那么输出为100~150范围。
 
下一文章介绍指数比例尺和对数比例尺。
 
 
 
 
 
 

D3.js比例尺 定量比例尺 之 线性比例尺(v3版本)的更多相关文章

  1. D3.js的v5版本入门教程(第七章)—— 比例尺的使用

    D3.js的v5版本入门教程(第七章) 比例尺在D3.js中是一个很重要的东西,我们可以这样理解d3.js中的比例尺——一种映射关系,从domain映射到range域(为什么会是domain和rang ...

  2. D3.js(v3)+react 制作 一个带坐标与比例尺的柱形图 (V3版本)

    现在用D3.js + react做一个带坐标轴和比例尺的柱形图.我已经尽力把代码全部注释上了,最后我也会把完整柱形图代码奉上.如果还有疑惑的,可以去翻看一下我之前介绍的方法,以下方法都有介绍到. 还有 ...

  3. D3.js坐标轴的绘制方法、添加坐标轴的刻度和各比例尺的坐标轴(V3版本)

    坐标轴(Axis)   坐标轴(Axis)在很多图表中都可见到,例如柱形图.折线图.散点图等.坐标轴由一组线段和文字组成,坐标轴上的点由一个坐标值确定.但是,如果使用SVG的直线和文字一笔一画的绘制坐 ...

  4. D3.js比例尺 序数比例尺(v3版本)

    上一章介绍了阈值比例尺:https://www.cnblogs.com/littleSpill/p/10825038.html.到目前所有的定量比例尺已经介绍完了. 现在给大家介绍一下序数比例尺. 定 ...

  5. D3.js 比例尺的使用

    比例尺是 D3 中很重要的一个概念,直接用数值的大小来代表像素不是一种好方法 一.为什么需要比例尺 制作一个柱形图,会有一个数组:var dataset = [ 250 , 210 , 170 , 1 ...

  6. D3.js系列——比例尺和坐标轴

    比例尺是 D3 中很重要的一个概念.绘制图形时直接用数值的大小来代表像素不是一种好方法,本章正是要解决此问题. 一.为什么需要比例尺 上一章制作了一个柱形图,当时有一个数组,绘图时,直接使用 250 ...

  7. 交互式数据可视化-D3.js(三)比例尺

    线性比例尺 线性比例尺是常用比例尺常用方法有: var linear = d3.scaleLinear() - 创建一个定量的线性比例尺. linear.domain([numbers]) - 定义或 ...

  8. D3.js(v3)+react框架 基础部分之数据绑定及其工作过程与绑定顺序

    数据绑定: 将数据绑定到Dom上,是D3最大的特色.d3.select和d3.selectAll返回的元素的选择集.选择集上是没有数据的. 数据绑定就是使被选择元素里“含有”数据. 相关函数有两个: ...

  9. D3.js (v3)+react框架 基础部分之认识选择集和如何绘制一个矢量图

    首先需要下载安装d3.js  :  yarn add d3 然后在组建中引入 :  import * as d3 from 'd3' 然后定义一个方法,在componentDidMount()这个钩子 ...

随机推荐

  1. 假如Kafka集群中一个broker宕机无法恢复,应该如何处理?

    假如Kafka集群中一个broker宕机无法恢复, 应该如何处理? 今天面试时遇到这个问题, 网上资料说添加新的broker, 是不会自动同步旧数据的. 笨办法 环境介绍 三个broker的集群, z ...

  2. 前端(十六)—— JavaScript盒子模型、JS动画、DOM、BOM

    JS盒子模型.JS动画.DOM.BOM 一.JS盒模型 1.width | height parseInt(getComputedStyle(ele, null).getPropertyValue(' ...

  3. scip 练习2.20

    (define (same-parity x . z) (define (q? y) (= (remainder y ) )) (define (o? y) (= (remainder y ) )) ...

  4. PHP算法之罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1.12 ...

  5. ElementUI的使用

    一.安装 1.安装 在项目目录下执行 npm i element-ui -S 2.引入 在 main.js 中写入以下内容: import ElementUI from 'element-ui'; i ...

  6. Magento获取当前页面URL地址

    Magento获取当前页面URL地址 http://www.sunhaibing.com/?p=1260 在Magento中,可以通过core/url助手类中的getCurrentUrl()方法获取当 ...

  7. 【安装】Mac rabbitMQ

    安装 brew install rabbitmq 目录  cd /usr/local/Cellar/rabbitmq/3.7.4/sbin 插件 sudo ./rabbitmq-plugins ena ...

  8. luoguP3799 妖梦拼木棒 [组合数学]

    题目背景 上道题中,妖梦斩了一地的木棒,现在她想要将木棒拼起来. 题目描述 有n根木棒,现在从中选4根,想要组成一个正三角形,问有几种选法? 输入输出格式 输入格式: 第一行一个整数n 第二行n个整数 ...

  9. 线性dp——hdu6578经典dp

    多校第一场第一题,这种类型的dp之前做过两题,状态转移一般是从当前状态往后推的 很经典的dp,不过很卡时间 /* 定义 dp[t][i][j][k]代表填完前 t 个位置后,{0, 1, 2, 3} ...

  10. 50 ubuntu下pcl编译以及用 VSCode配置pcl / opencv开发环境

    0 引言 最近在VSCode下搞开发,于是将pcl库迁移到这个环境下,用来跑一些依赖pcl的开源的代码以及自己做一些快速开发等. 1 pcl编译 主要参考了这篇博客,链接如下. https://blo ...