欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

D3.js 符号生成器 (V3版本)

程序员文章站 2022-03-26 12:29:22
符号生成器(Symbol Generator) 符号生成器(Symbol Generator)能够生成三角形、十字架、菱形、圆形等符号,相关方法有: d3.svg.symbol() //创建一个符号生成器。 symbol(datum[,index]) //返回指定数据datum的路径字符串 symb ......
符号生成器(symbol generator)
 
符号生成器(symbol generator)能够生成三角形、十字架、菱形、圆形等符号,相关方法有:
 
d3.svg.symbol()
//创建一个符号生成器。
 
symbol(datum[,index])
//返回指定数据datum的路径字符串
 
symbol.type([type])
//设定或获取符号的类型
 
symbol.size([size])
//设定或获取符号的大小,单位是像素的平方。例如设定为100,则是一个宽度为10,高度也为10的符号。默认为64.
 
d3.svg.symboltypes
//支持的符号类型。
 
type()size()是访问器,其参数可以是函数,也可以是常数。d3.svg.symboltypes是一个数组,里面存有各种各样符号的字符串,看代码:
 
 1      var width = 600;
 2         var height = 400;
 3 
 4         var svg = d3.select("#body")
 5                     .append("svg")
 6                     .attr("width",width)
 7                     .attr("height",height)
 8 
 9         //打印d3.svg.symboltypes数组里面的符号
10         console.log(d3.svg.symboltypes)             //输出["circle", "cross", "diamond", "square", "triangle-down", "triangle-up"]

 

由此可以看到,符号生成器的类型共有六种:圆形(circle)十字架(cross)菱形(diamond)正方形(square)下三角形(trangle-down)上三角形(trangle-up)。接下来定义一个数组,数组的每一项是一个对象,对象中有size和type成员。
 
 1      var width = 600;
 2         var height = 400;
 3 
 4         var svg = d3.select("#body")
 5                     .append("svg")
 6                     .attr("width",width)
 7                     .attr("height",height)
 8 
 9         //数组长度
10         var n = 30
11 
12         //数组
13         var datalist = []
14 
15         //给数组添加元素
16         for (var i = 0 ; i < n ; i++){
17             datalist.push({
18                 size : math.random() * 30 + 500 ,               //符号的大小
19                 type : d3.svg.symboltypes[math.floor(
20                     math.random() * d3.svg.symboltypes.length   //符号的类型
21                 )]
22             })
23         }
符号的大小和类型都使用随机数来生成的。数组datalist的每一项是一个对象,其中的变量包括:size表示大小,type表示类型。因此定制符号生成器时,sizetype访问器也要使用此名称,代码:
 
1 //创建一个符号生成器
2         var symbol = d3.svg.symbol()
3                         .size(function(d){return d.size})
4                         .type(function(d){return d.type})

 

size()的函数里,返回d.szie,表示对于传入的对象,以其名称为size的变量作为符号的大小。接下来,添加足够数量的路径元素,代码:
 
 1   //定义颜色
 2         var color = d3.scale.category20b();
 3 
 4         //添加路径
 5         svg.selectall()
 6             .data(datalist)
 7             .enter()
 8             .append("path")
 9             .attr("d",function(d){return symbol(d)})
10             .attr("transform",function(d,i){
11                 var x = 100 + i % 5 * 50;
12                 var y = 100 + math.floor(i/5) * 50;
13                 return "translate("+ x + "," + y + ")"
14             })
15             .attr("fill",function(d,i){
16                 return color(i)
17             })

 

symbol(d)的返回值是一个字符串,构成一个符号。效果图如下: 共30个符号,每行显示5个,符号的位置是通过设定属性transform确定的。
 
D3.js 符号生成器 (V3版本)