精通D3.js学习笔记(2)比例尺和坐标

1、线性比例尺

d3.scale.linear()   创建一个线性比例尺

.domain([0,500]) 定义域

.range([0,1000]) 值域

linear(x)  输入定义域 返回 值域

linear.invert(y) 输入值域,返回定义域

linear.domain([numbers]) 设定或获取定义域

linear.range([values])设定或获取值域

linear.rangeRound([valuses]) 四舍五入,结果是整数

linear.clamp([boolean])     false不收缩  true 收缩

linear.nice([count])  扩展成理想状态

linear.ticks([ticks]) 默认是10 用于选取坐标刻度

linear.ticksFormat(count,[format]) 设置定义域内具有代表的值的表示形式,如小数

3、指数和对数比例尺

指数   exponent()    对数base()

var pow = d3.scle.pw().exponent(3);

pow.exponent(0.5)  //设置指数比例尺的指数为0.5机平方根

4、量子和分位比例尺

var quantize  = d3.scale.quantize()

.domain([0.10])

.range(["red","green]","blue","yellow","black");

定义域被分成5段,每一个段对应值域的一个值。[0,2]对应red,

<script>

var quantize = d3.scale.quantize()

.domain([50,0])

.range(["#888","#666","#444","#222","#000"]);

var r = [45,35,25,15,5];

var svg = d3.select(‘body‘).append(‘svg‘)

.attr(‘width‘,400)

.attr(‘height‘,400);

svg.selectAll("circle")

.data(r)

.enter()

.append(‘circle‘)

.attr("cx",function(d,i){return 50 + i * 30;})

.attr("cy",50)

.attr("r",function(d){return d;})

.attr("fill",function(d){return quantize(d);})

</script>

5.阈值比例尺

是指一个效应能够产生的最低值或最高值。类似量子

6、序数比例尺

定义域和值域都是离散的

d3.scale.orinal() 构建一个序数比例尺

ordinal(x) 返回y

ordinal.domain([values]) 设定和获取x

ordinal.range([values]) 设定或获取y

ordinal.rangePoint(interval,[padding])  设置值域

ordinal.rangeRoundPoints(interval,[padding]) 和ranggePoint()一样,但是会将结果取正

ordinal.rangeRoundBands(interval,[padding],[outerpadding]) 代替 range()设定值域

ordinal.rangeRoundRoundBands()  结果取整

ordinal.rangeBand() 返回使用rangeBands() 设定后每一段的宽度

ordinal.rangeExtend()  返回一个数组,值域的最大值和最小值

7、颜色序数比例尺

category10  10种颜色

category20()   20种颜色

category20b()  20种颜色

category20c()  20种颜色

var ordinal = d3.scale.ordinal()

.domain([1,2,3,4,5])

.rangePoints([0,100]);

console.log( ordinal.range() );

console.log( ordinal(1) );//0

console.log( ordinal(3) );//50

console.log( ordinal(5) );//100

ordinal.rangePoints([0,100],5);

console.log( ordinal.range() );//27.77777 38.88888 50 61.11111 72.22222

//padding 是5    step 是100/5+5-1   =11.11111

ordinal.rangeRoundPoints([0,100],5);

console.log( ordinal.range() );//28 39 50 61 72  取正了

var bands = d3.scale.ordinal()

.domain([1,2,3,4,5])

.rangeBands([0,100]);

console.log( bands.range() );  //0.20.40.60.80

console.log( bands.rangeBand() );  //20//返回rangBand的值

bands.rangeBands([0,100],0.5,0.2);  //pading 为0.5 outerPadding

console.log( bands.range() );//4.08163 24.48979 44.89795 ....

console.log( bands.rangeBand() ); //10.20408

//左右边界的空白是step*outerPadding 约等于4  step*padding 约是10 ,即rangBand之间的空白长度

var color = d3.scale.category10();

console.log( color(1) );

console.log( color("zhangsan") );

8、坐标轴

d3.svg.axis()  创建默认的新坐标系

axis(selection)将此坐标轴应用到指定的选择集上,改选择集需要包裹有<svg>或<g>

axis.scale([scale]) 设定或获取坐标轴的比例尺

axis.orient([orientation])设定或获取坐标轴的方向。

axis.ticks([argument...]) 设定或获取坐标轴的分隔数。默认是10

axis.tickValues([values])设定或获取坐标轴的指定刻度

axis.tickSize([inner,outer])设定或获取坐标轴内外刻度的长度。默认是6

axis.innerTickSize([size])设定或获取坐标轴的内刻度。

axis.outerTickSize([size])设定或获取坐标轴的外刻度

axis.tickFormat([format])设定或获取刻度的格式

< style>

.axis path,

.axis line {

fill:none ;

stroke: black;

shape-rendering: crispedges;

}

.axis text {

font-family: sans-serif;

font-size: 11px;

}

</style>

< script type= "text/javascript" src= "js/d3.min.js" ></script>

</ script>

</ head>

< body>

</ body>

< script>

var width = 600;

var height = 600;

var svg = d3.select( "body").append("svg" )

. attr("width" ,width)

. attr(‘height‘ ,height);

var xScale = d3.scale.linear()

.domain([ 0,10 ])

. range([0 ,300])

var axis = d3.svg.axis()

.scale(xScale)

.orient( "bottom");

var gAxis = svg.append("g")

. attr("transform" ,"translate(80,80)");

gAxis.attr( "class","axis" );

axis(gAxis);

</script>

<script>  

//圆心数据
var center = [[0.5,0.5],[0.7,0.8],[0.4,0.9],[0.11,0.32],[0.88,0.25],
               [0.75,0.12],[0.5,0.1],[0.2,0.3],[0.4,0.1],[0.6,0.7]];

var width  = 500;    //SVG绘制区域的宽度
var height = 500;    //SVG绘制区域的高度

var svg = d3.select("body")            //选择<body>
            .append("svg")            //在<body>中添加<svg>
            .attr("width", width)    //设定<svg>的宽度属性
            .attr("height", height);//设定<svg>的高度属性

//x轴宽度
var xAxisWidth = 300;

//y轴宽度
var yAxisWidth = 300;

//x轴比例尺
var xScale = d3.scale.linear()
                .domain([0, 1.2 * d3.max(center,function(d){ return d[0]; })])
                .range([0,xAxisWidth]);

//y轴比例尺
var yScale = d3.scale.linear()
                .domain([0, 1.2 * d3.max(center,function(d){ return d[1]; })])
                .range([0,yAxisWidth]);            

//外边框
var padding = { top: 30 , right: 30, bottom: 30, left: 30 };

//绘制圆
var cirlce = svg.selectAll("circle")
                .data(center)        //绑定数据
                .enter()            //获取enter部分
                .append("circle")    //添加circle元素,使其与绑定数组的长度一致
                .attr("fill","black")        //设置颜色为black
                .attr("cx", function(d){        //设置圆心的x坐标
                    return padding.left + xScale(d[0]);
                })
                .attr("cy", function(d){        //设置圆心的y坐标
                    return height- padding.bottom - yScale(d[1]);
                })
                .attr("r", 5 );

var xAxis = d3.svg.axis()
                .scale(xScale)
                .orient("bottom")
                .ticks(5);

yScale.range([yAxisWidth,0]);

var yAxis = d3.svg.axis()
                .scale(yScale)
                .orient("left")
                .ticks(5);

svg.append("g")
        .attr("class","axis")
        .attr("transform","translate(" + padding.left + "," + (height - padding.bottom) +  ")")
        .call(xAxis);

svg.append("g")
        .attr("class","axis")
        .attr("transform","translate(" + padding.left + "," + (height - padding.bottom - yAxisWidth) +  ")")
        .call(yAxis); 

</script> 

时间: 2024-12-25 03:59:32

精通D3.js学习笔记(2)比例尺和坐标的相关文章

精通D3.js学习笔记(1)基础的函数

买了本吕大师的d3可视化.最近来学习一下,做个笔记. 1.选择元素  select(第一元素) 和selectAll(全部的元素) 类似css的选择器.也可以是dom选中的. var impotant = document.getElementById("important"); d3.select(important); getElementById  使用select    getElementsByClassName  使用selectAll 2.选择集 d3.select  a

d3.js学习笔记

入门好文:http://www.ourd3js.com/wordpress/?p=51 d3.js和d3.min.js内容一样,后者是压缩过的,适合发行版本,前者适合开发人员. 1.选择集(满足css选择符的要求)主要和数据绑定一起使用 d3.select() d3.selectAll() var body = d3.select("body") 2.数据绑定(实质就是在选择集的元素对象里面添加一个变量,并赋值) p.text(function(d,i)){return d+"

d3.js学习笔记(1)

很早之前就知道d3,当初看到它的时候,第一反应就是"我去,怎么这么炫酷",但是一直没有学(自己太懒了),最近可能是五月病犯了,不想看书,不想写代码,不想看论文,不想写论文,虽然什么事情都不想做,不过还是找点事情做吧,那就学学d3呗,说不定将来什么时候就用到了呢. 这篇博客主要从源码的角度去学习,所以对于没有接触过d3的朋友,请先看完下面的资料. 学习资料 学习嘛,当然得找到好的资料咯,下面是我昨天看的一些文章,在d3的github上都能够找到,毕竟最好的学习资料就是官网的文档.教程和源

Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.2.

[Pro Angular.JS]学习笔记1.1:设置开发环境

可以使用yeoman.io,很方便.我已经写了一篇随笔,介绍如何使用.这里也有一篇介绍的文章:http://www.cnblogs.com/JoannaQ/p/3756281.html 代码编辑器,在Mac下用了一下WebStorm,太恶心了.另外发现书的作者使用的开发环境是Windows + VS Express 2013,为了方便学习,我也使用VS Express 2013 Update2.VS2013用起来蛮舒服的,把WebStorm比得跟驼屎一样.也许是因为我没用习惯吧. 1.安装Nod

【转】Backbone.js学习笔记(二)细说MVC

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Angular JS 学习笔记

特定领域语言 编译器:遍历DOM来查找和它相关的属性, 分为编译和链接两个阶段, 指令:当关联的HTML结构进入编译阶段时应该执行的操作,可以写在名称里,属性里,css类名里:本质上是函数 稳定的DOM:绑定了数据模型的DOM元素的实例不会在绑定的生命周期发生改变 作用域:用来检测模型的改变和为表达式提供执行上下文的 AngularJS 和其它模板系统不同,它使用的是DOM而不是字符串 指令: 由某个属性.元素名称.css类名出现而导致的行为,或者说是DOM的变化 Filter过滤器:扮演着数据

Node.js学习笔记(3) - 简单的curd

这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简单介绍 这次demo,只涉及到简单的curd操作,用到的数据库是mongo,所以要安装mongo数据库,数据库连接驱动是mongoose: 当然关于mongo的驱动有很多,比如mongous mongoskin等:(详见http://cnodejs.org/topic/4f4ca8e0940ce2e

JS学习笔记-OO疑问之封装

封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 匿名函数 即没有名字的函数,其创建方式为 function(){...} 单独存在的匿名函数,无法运行,可通过赋值给变量调用或通过表达式自我执行来实现运行. 1.赋值给变量为一般的函数使用方式 var run = function(){ return '方法运行中'; }; alert(run()); 2.通过表达式自我执行 (function(a