博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
D3.js 区域生成器 (V3版本)
阅读量:4597 次
发布时间:2019-06-09

本文共 3722 字,大约阅读时间需要 12 分钟。

区域生成器(Area Generator)
 
区域生成器(Area Generator)用于生成一块区域,使用方法与线段生成器类似。线段生成器地址:数据访问器有x()、x0()、x1()、y()、y0()、y1()六个,数量很多,但不许要全部使用。举个例子:
 
1      var width = 600;            //SVG绘制区域的宽度 2         var height = 500;           //SVG绘制区域的高度 3         4         //定义画图区域svg 5         var svg = d3.select("#body") 6                     .append("svg") 7                     .attr("width",width) 8                     .attr("height",height) 9 10         //定义数据11         var dataList = [80,120,130,70,60,90]12         //创建一个区域生成器13         var areaPath = d3.svg.area()14                         .x(function(d,i){
return 50 + i * 80})15 .y0(function(d,i){
return height/2})16 .y1(function(d,i){
return height/2 - d})17 18 19 20 //添加路径21 svg.append("path")22 .attr("d",areaPath(dataList)) //使用了区域生成器23 .attr("stroke","black") //线段的颜色24 .attr("stroke-width","3px") //线段的宽度25 .attr("fill","yellow") //填充的颜色

 

 
上面代码定义了一个数组dataList和一个区域生成器areaPath。此区域生成器定制了三个访问器:x()y0()y1()。将areaPath当中函数使用,areaPath(dataList)返回的字符串直接作为<path>元素的d的值使用。结果如图: 
 
 
上图中,上边界的折现是数组dataList中各值得反映。根据访问器的设定,可得到以下数值(height的值是500)
当d = 80,i = 0 时,x等于50, y0等于250, y1等于170。
当d = 120,i = 1 时,x等于50 + 1 * 80, y0等于250, y1等于130。
以此类推。
 
下图展示了各访问器的意义,x是各段的x坐标,y0是区域的下限坐标,y1是区域的上限坐标。如果不定制访问器,默认是:
x为d[0],y0为0,y1为d[1]。此外还有x0()x1()y()三个访问器,意义类似,如果需要制作上图的横向图需要用到。
 
 
 
与线段生成器类似,区域生成器也有interpolate()tension()defined()这些方法,意义相同。通过设定interpolate
两点之间的插值会发生相应变化,规则与线段生成器一样。但是,某些模式是区域生成器里没有的,如linear-closed。因为区域本身
就是闭合的,所以不需要了。接下来给大家展示一下stepbasis两种插值模式:
 
step插值模式 :
 
1      var width = 600;            //SVG绘制区域的宽度 2         var height = 500;           //SVG绘制区域的高度 3         4         //定义画图区域svg 5         var svg = d3.select("#body") 6                     .append("svg") 7                     .attr("width",width) 8                     .attr("height",height) 9 10         //定义数据11         var dataList = [80,120,130,70,60,90]12       13         //step插值模式14         var areaPath = d3.svg.area()15                         .interpolate("step")16                         .x(function(d,i){
return 50 + i * 80})17 .y0(function(d,i){
return height/2})18 .y1(function(d,i){
return height/2-d})19 20 21 //添加路径22 svg.append("path")23 .attr("d",areaPath(dataList)) //使用了区域生成器24 .attr("stroke","black") //线段的颜色25 .attr("stroke-width","3px") //线段的宽度26 .attr("fill","yellow") //填充的颜色

 

 
效果图 :
 
 
 
basis插值模式 :
 
1       var width = 600;            //SVG绘制区域的宽度 2         var height = 500;           //SVG绘制区域的高度 3         4         //定义画图区域svg 5         var svg = d3.select("#body") 6                     .append("svg") 7                     .attr("width",width) 8                     .attr("height",height) 9 10         //定义数据11         var dataList = [80,120,130,70,60,90]12       13         //basis插值模式14         var areaPath = d3.svg.area()15                         .interpolate("basis")16                         .x(function(d,i){
return 50 + i * 80})17 .y0(function(d,i){
return height/2})18 .y1(function(d,i){
return height/2 - d})19 20 //添加路径21 svg.append("path")22 .attr("d",areaPath(dataList)) //使用了区域生成器23 .attr("stroke","black") //线段的颜色24 .attr("stroke-width","3px") //线段的宽度25 .attr("fill","yellow") //填充的颜色

 

 
效果图 :
 
 
在需要生成折现或曲线下方的面积的时候,可以考虑使用区域生成器。
 
 

转载于:https://www.cnblogs.com/littleSpill/p/10854021.html

你可能感兴趣的文章
20145202马超《JAVA》预备作业1
查看>>
台湾好市多概述
查看>>
shell-逐行读取文件
查看>>
贝叶斯如何生效
查看>>
UVA - 1588 - Kickdown
查看>>
Win32 SDK:ListBox 为什么不整个 LB_SETTEXT
查看>>
spring的优缺点
查看>>
优云老王的心路历程(一):那个做了五年的产品经理
查看>>
双态运维分享之:业务场景驱动的服务型CMDB
查看>>
cocos2dx-3.6 触摸,键盘,聚焦事件
查看>>
JEECG中t:dictSelect的extendJson用法
查看>>
web开发下的各种下载方法
查看>>
第六章 堆排序 6.5 优先队列
查看>>
Linux搭建我的世界服务器
查看>>
数据库之范式
查看>>
译文 [ROM][多国语言][2015.06.11] Lenovo S750 (MTK6589) - andrea_d86-lenovos750-4.2.2
查看>>
租用游艇问题
查看>>
如何修改SharePoint 2010默认的任务通知邮件的格式?
查看>>
单用户模式下连接被占用定位spid
查看>>
Django JWT
查看>>