d3.svg.line() 曲线构造器

曲线构造器(注意,这指的是line()返回的结果)是一个函数,它要求调用者传入一个数组。 默认情况下,数组的每一项应当是一个包含x、y坐标的数组,第一个值代表x,第二个值代表y。比如:

  1. var line = d3.svg.line();
  2. var d = line([[10,20],[20,30],[50,70],[100,60]]);

提醒一下,尽管称为line,但是这个方法实际和SVG的line元素毫无关系。

试着查看下→_→代码中line(data)返回的内容,努力记住,line()方法返回的是一个函数!

使用x,y访问器

很多情况下,我们的数据模型不符合曲线构造器的要求。比如:

  1. var data=[
  2. {year:1981,yield:129303},
  3. {year:1982,yield:901234},
  4. ......
  5. ];

这时可以使用构造器的x、y访问器函数告诉构造如何访问我们的数据:

  1. line.x([x_accessor])
  2. line.y([y_accessor])

构造器会将数据集中的每一个数据传入访问器函数,并使用其返回值作为 x坐标或y坐标:

  1. var line = d3.svg.line()
  2. .x(function(d){return d.year;})
  3. .y(function(d){return d.yield;});
  4. var d = line(data);

定义插值策略

我们为曲线构造器仅仅指定了一些关键点,中间点的计算是曲线构造器完成的,这个 过程就是插值

曲线构造器默认的插值模式是线性插值,所以我们看到一些直线段将我们提供 的各个点连接起来。

使用intepolation()方法,可以告诉构造器使用不同的插值策略:

  1. line.interpolate([interpolate])

如果inerpolate参数是一个字符串,表示要求构造器使用一个预置的插值 策略,可以是:

  • linear - 线性插值
  • linear-closed - 线性插值,封闭起点和终点形成多边形
  • step - 步进插值,曲线只能沿x轴和y轴交替伸展
  • step-before - 步进插值,曲线只能沿y轴和x轴交替伸展
  • step-after - 同step
  • basis - B样条插值
  • basis-open - B样条插值,起点终点不相交
  • basis-closed - B样条插值,连接起点终点形成多边形
  • bundle - 基本等效于basis,除了有额外的tension参数用于拉直样条
  • cardinal - Cardina样条插值
  • cardinal-open - Cardina样条插值,起点终点不相交
  • cardinal-closed - Cardina样条插值,连接起点终点形成多边形
  • monotone - 立方插值,保留y方向的单调性

interpolate参数也可以是一个函数,这个函数接受传入的数据点集,返回 path的d字符串。我们先无视掉。

转载于:https://www.cnblogs.com/0769fe/p/6558436.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
d3.js是一个用于数据可视化的JavaScript库,它提供了丰富的功能和工具来创建交互式和动态的数据可视化图表。其中,svg的path标签在d3.js中被称为"可以组成任何形状的形状"。d3.js提供了多种path生成器,可以用来创建不同类型的路径。 以下是一些常用的d3.js svg path生成器: 1. d3.svg.line() - 线path生成器 2. d3.svg.line.radial() - 径向path生成器 3. d3.svg.area() - 区域path生成器 4. d3.svg.area.radial() - 径向区域path生成器 5. d3.svg.arc() - 圆与圆弧path生成器 6. d3.svg.symbol() - 符号path生成器 7. d3.svg.chord() - chord path生成器 8. d3.svg.diagonal() - diagonal path生成器 9. d3.svg.diagonal.radial() - diagonal radial path生成器 这些生成器可以通过调用相应的方法来生成路径,并且还可以使用其他方法来改变其属性。此外,这些生成器还支持链式调用,可以方便地进行多个操作。 范例: ```javascript // 创建一个svg元素 var svg = d3.select("body") .append("svg") .attr("width", 500) .attr("height", 500); // 创建一个线path生成器 var lineGenerator = d3.svg.line(); // 创建一个路径并设置其属性 var path = svg.append("path") .attr("d", lineGenerator([[0, 0], [100, 100], [200, 50]])) .attr("stroke", "black") .attr("fill", "none"); // 创建一个圆与圆弧path生成器 var arcGenerator = d3.svg.arc() .innerRadius(50) .outerRadius(100) .startAngle(0) .endAngle(Math.PI); // 创建一个路径并设置其属性 var path = svg.append("path") .attr("d", arcGenerator()) .attr("transform", "translate(250, 250)") .attr("fill", "red"); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值