d3是一个及其庞大的库,有20个模块,大小也达到了216kb,是JQ1.x的2倍多,JQ3.x的3倍多,JQ本来就挺笨重的一个库,d3更是如此,但是它的功能确实很强悍~

d3的定位是一个科学计算库,并不是一个图形库,只是它能帮你算出路径,但是把路径画成svg图它是没有帮你的,有时候算出来的路径还要经过一系列处理。

所以说人生苦短,莫用d3~~当然,作为一个有追求的程序猿萌新,对这么一个优秀的库,我们还是秉承着了解学习的态度,下面由我带大家一起大概领略一下d3吧~


官网:https://d3js.org/

可以看到d3有如下这么20个模块,

 Arrays (Statistics, Search, Transformations, Histograms)(数组、 静态方法、查找类方法、变换类方法、直方图)
Axes(坐标轴)
Brushes(刷子)
Chords(弦图)
Collections(Object,Maps,Sets,Nests)(集合、对象、map、嵌套)
Colors(颜色)
Delimiter-Separated Values(d3-dsv)(dsv模块)
Dispatches(事件调度)
Dragging(拖拽)
Easings(过渡类型)
Forces(力学仿真模拟)
Number Formats(数值格式化)
Geographies(地理)
Hierarchies(层次结构布局)
Interpolators(插值器)
Paths(Canvas和SVG之间互转)
Polygons(二维多边形)
Quadtrees(四叉树)
Queues(队列)
Random Numbers(随机数)
Requests(数据请求)
Scales (Continuous, Sequential, Quantize, Ordinal)(比例尺)
Selections (Selecting, Modifying, Data, Events, Control, Local Variables, Namespaces)(选择集)
Shapes (Arcs, Pies, Lines, Areas, Curves, Symbols, Stacks)(形状)
Time Formats(日期时间)
Time Intervals(时间间隔)
Timers(定时器)
Transitions(过渡)
Voronoi Diagrams(Voronoi图)
Zooming(缩放)

因为d3在国内实在运用不广泛,只有特定的需求才需要用到它,就不详细解说每一个模块,挑几个实用一些的模块来说说吧~(说不定以后大家会遇到需要用到这方面功能的呢~)


在介绍模块前,不得不提的是d3的核心观念,accessor(访问器) genertor(生成器)

accessor(访问器)相当于先把传入的数组先做一次map映射,如d3.max(arr,accessor):

//例如想取得年纪最大的人
let arr = [{name:'david',age:12},{name:'james',age:14},{name:'rick',age:26},{name:'wade',age:18}];
let res = d3.max(arr,item=>item.age); //

generator(生成器),设置好生成器的需要的设置,然后这个生成器可以无限用,这样实现代码复用,提高性能,例如format:

let gen = d3.format('.3f');
gen(15); //15.000
gen(13.6798); //13.680

Array

有这些常用的方法max、min、extend(最大最小一起返回)、sum、mean(均值)、median(中位数)、quantile(分位数)

let arr = [5,8,12,26,18];
d3.extent(arr); //[5,26]

Collection

map方法,建立一个映射对象,item=>item.name是指定哪个是map的key

get,has,set分别是根据key来获取,查看是否存在,设定map对象,当然还有很多其他的方法

let arr1 = [{name:'david',age:12},{name:'james',age:14},{name:'james',age:17},{name:'rick',age:26},{name:'wade',age:18}];
let map = d3.map(arr1,item=>item.name);
console.log(map.get('james')) //{name: "james", age: 17}
console.log(map.has('james')) //true
map.set("alibaba", {name: "alibaba", age: 30});
console.log(map.get('alibaba')) //{name: "alibaba", age: 30}

color

d3.color('colorStr~~~'),把任意格式的字符串转化为一样的格式对象

console.log(d3.color('rgba(100,100,150,.5)'));//{r: 100, g: 100, b: 150, opacity: 0.5}
console.log(d3.color('rgb(200,129,150)'));//{r: 200, g: 129, b: 150, opacity: 1}
console.log(d3.color('gray'));//{r: 128, g: 128, b: 128, opacity: 1}
console.log(d3.color('#ccc'));//{r: 204, g: 204, b: 204, opacity: 1}

formats

number格式转换:

let gen = d3.format('.2f');
console.log(gen(15)); //15.00
console.log(gen(13.679)); //13.68
let gen2 = d3.format('5.0f');
console.log(gen2(1)); //

和c语言差不多,例如5.2f表示——总共5位,保留2位小数

还有其他,例如:

d3.format("$")(10);     //"$10"
d3.format("#")(0b1111); //"15"
d3.format(",")(100000); //"100,000"

date格式转换:

let dateGen = d3.timeFormat("%y年%m月%d日 %H:%M:%S");
console.log(dateGen(new Date())); //17年12月16日 10:16:26

相应的有逆转换:

let dateParse = d3.timeParse("%y年%m月%d日 %H:%M:%S");
console.log(dateParse('17年12月16日 10:16:28')); //Sat Dec 16 2017 10:16:28 GMT+0800 (中国标准时间)

shape

用于画任何图形,例如画饼图:

window.onload=function(){
//d3.pie生成对应数据
let data = [80,50,60,100,20];
let pieData = d3.pie()(data);
//d3.arc
let arc = d3.arc().innerRadius(0).outerRadius(150);
let g = d3.select('body').append('svg').attr('width',800).attr('height',600).append('g');
let color = ['#fc0','#cf0','#0fc','#f0c','#c0f'];
pieData.forEach((item,index)=>{
//arc(item)把每一份pie传给arc,生成路径
g.append('path').attr('d',arc(item)).attr('fill',color[index]).attr('stroke','#000');
})
g.attr('transform','translate(500,200) rotate(30)');
}

d3浅谈的更多相关文章

  1. [nRF51822] 14、浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(科普类干货)

    蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到耳机.游戏手柄.音响.电视, 再到手环.电子秤.智能医疗器械(血糖仪.数字血压计.血气计.数字脉搏/心率监视器.数字体 ...

  2. 浅谈Linux下如何修改IP

    linux 下命令之浅谈//cd ..  //返回上一级//创建文件夹touch test.txt//Linux不区分大小写//往一个文件中追加内容echo "****" > ...

  3. 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理

    [微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...

  4. 浅谈蓝牙低功耗(BLE)的几种常见的应用场景及架构(转载)

    转载来至beautifulzzzz,网址http://www.cnblogs.com/zjutlitao/,推荐学习 蓝牙在短距离无线通信领域占据举足轻重的地位—— 从手机.平板.PC到车载设备, 到 ...

  5. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  6. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  7. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  8. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  9. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

随机推荐

  1. Codeforces 954C Matrix Walk (思维)

    题目链接:Matrix Walk 题意:设有一个N×M的矩阵,矩阵每个格子都有从1-n×m的一个特定的数,具体数的排列如图所示.假设一个人每次只能在这个矩阵上的四个方向移动一格(上下左右),给出一条移 ...

  2. C++学习之从C到C++

    头文件的包含 包含头文件可以不加.h结尾,如iostream,一些常用的头文件在引用时可以不加.h后缀,并在开头增加c,如: #include <cstdio> #include < ...

  3. ES6 之reduce的高级技巧

    reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值.reduce() 方法接受四个参数:初始值(或者上一次回调函数的返回值),当前元素值,当前索引,调用 ...

  4. pt-online-schema-change的实现原理

    pt-online-schema-change用于MySQL的在线DDL. 下面结合官方文档和general log来分析其实现原理. 测试表 mysql> show create table ...

  5. 巧用ios朗读kindle图书

    想必大家都有想过kindle出中文的有声阅读刊物吧? 今天突发奇想想到一招能够让我们听自己拿kindle买的中文图书.当然这是有条件的. 前提是你得有一个ios设备,不管是iphone还是ipad,i ...

  6. 浅谈iOS 自动调节文本高度

    文字展示是任何GUI开发的一个最常规的编程任务.可能一提及文字我们脑中想到的无非就是 Label 和 Text 这两个关键词,今天我们就谈谈 Label. 无论在 Windows 或者 Web 开发中 ...

  7. Android 实现 WheelView

    wheel view 目录(?)[-] Android WheelView效果图 网上的开源代码 实现思路 扩展Gallery 如何使用 我们都知道,在iOS里面有一种控件------滚筒控件(Whe ...

  8. PAT甲题题解-1006. Sign In and Sign Out (25)-找最小最大

    判断哪个人最早到,哪个人最晚走水,就是找最大值最小值 #include <iostream> #include <cstdio> #include <algorithm& ...

  9. PAT-1045. Favorite Color Stripe (30)-LIS

    将Eva喜欢的颜色按顺序编个优先级, 2 3 1 5 6-> 1 2 3 4 5 然后读取stripe,将Eva不喜欢的先剔除掉,剩下的颜色替换为相应的优先级 2 2 4(去掉) 1 5 5 6 ...

  10. 《Linux内核分析与实现》 第四周 读书笔记

    第五章 系统调用 20135307 张嘉琪 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层主要作用有三个: 它为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳 ...