D3.js 对角线生成器 (V3版本)
程序员文章站
2022-05-14 12:05:42
对角线生成器(Diagonal Generator) 对角线生成器(Diagonal Generator)用于将两个点连接起来,连接线是三次贝塞尔曲线,该生成器使用d3.svg.diagonal()创建。有两个访问器,source()和target(),还有一个投影函数projection(),用于 ......
对角线生成器(diagonal generator)
对角线生成器(diagonal generator)用于将两个点连接起来,连接线是三次贝塞尔曲线,该生成器使用d3.svg.diagonal()创建。有两个访问器,source()和target(),还有一个投影函数projection(),用于将坐标进行投影。现有数据:
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 var datalist = { 10 source: { x: 100, y: 100 }, 11 target: { x: 300, y: 200 } 12 }
source是起点,target是终点,其中包含的是x坐标和y坐标。接下来将这两个点用三次贝塞尔曲线连接起来。先定义一个对角线生成器,访问器都使用默认的。然后添加<path>元素,再使用生成器得到所需要的对角线路径。代码:
1 //创建一个对角线生成器 2 var diagonal = d3.svg.diagonal() 3 4 5 //添加路径 6 svg.append("path") 7 .attr("d",diagonal(datalist)) 8 .attr("fill","none") 9 .attr("stroke","black") 10 .attr("stroke-width","3px")
结果图如下:, 左上角的是source起点,右下角的是target终点,中间的曲线有两个弯。
使用projection()可以定制具有投影的生成器。投影用于将坐标进行变换,定义了之后,起点和终点坐标都会首先调用该投影进行坐标转换,然后再生成路径。举个例子:
1 //使用投影函数 2 var diagonal = d3.svg.diagonal() 3 .projection(function(d){ 4 var x = d.x * 1.5 5 var y = d.y * 1.5 6 return [x,y] 7 })
这样,对于每个起点和终点坐标,x坐标和y坐标都会放大1.5倍,起点坐标变为(150,150),终点坐标变为(450,300)。但是,原数据并不会改变,只是在绘制的时候使用投影后的坐标。
推荐阅读
-
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
-
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
-
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
-
D3.js比例尺 定量比例尺 之 阈值比例尺(v3版本)
-
D3.js比例尺 序数比例尺(v3版本)
-
D3.js 弧生成器 (V3版本)
-
D3.js的基础部分之数组的处理 嵌套结构(Nest)(v3版本)
-
D3.js的基础部分之数组的处理 集合(Set)(v3版本)
-
D3.js坐标轴的绘制方法、添加坐标轴的刻度和各比例尺的坐标轴(V3版本)
-
D3.js的基础部分之数组的处理 映射(v3版本)