D3JS常用API

数组API

d3.min(数组): 返回给定数组中的最小值.

d3.max(array): 返回给定数组中的最大值

d3.extent(array): 以数组形式返回给定数组中的最小值和最大值

d3.sum(数组): 返回给定数组,元素的和

d3.mean(数组): 返回给定数组的平均值

d3.merge(arrays): 合并数组

d3.merge([[10], [20]]); // output is [10, 20]

集合API

d3.keys(对象): 以数组的形式返回对象的所有键

d3.values(object): 以数组的形式返回对象的所有值

d3.entries(object) : 以数组的形式返回对象的键和值

选择API

d3.select(selector): 用于选择与指定选择器字符串匹配的第一个元素

d3.selectAll(selector): 选择与指定选择器字符串匹配的所有元素.

selection.filter(过滤器): 用于过滤选择,返回包含的新选择只有指定过滤器为真的元素.

//过滤一系列表行只返回奇数.
 var even = d3.selectAll("tr").filter(":nth-child(odd) ");

路径API

d3.path() : 此方法用于创建新路径.

path.moveTo(x,y) : 此方法用于移动指定的x和y值.

path.closePath() : 此方法用于关闭当前路径.

path.lineTo(x,y) : 此方法用于创建从当前点到定义的x,y值的线.

path.quadraticCurveTo(cpx,cpy,x,y ) : 此方法用于绘制从当前点到指定点的二次曲线.

path.bezierCurveTo(cpx1,cpy1,cpx2,cpy2, x,y) : 此方法用于绘制从当前点到指定点的贝塞尔曲线.

path.arcTo(x1,y1,x2,y2,radius) : 此方法用于从当前点到指定点(x1,y1)绘制圆弧,并结束指定点(x1,y1)和(x2,y2)之间的直线.

path.arc(x,y,radius,startAngle,endAngle [,anticlockwise]) : 此方法用于将圆弧绘制到指定的中心(x,y),半径,startAngle和endAngle.如果逆时针值为真,则弧沿逆时针方向绘制,否则沿顺时针方向绘制.

path.rect(x ,y,w,h) : 该方法用于创建仅包含四个点(x,y),(x + w,y),(x + w,y + h),(x,y + h)的新子路径.通过这些由直线连接的四个点将子路径标记为闭合.相当于context.rect并使用SVG的"lineto"命令.

path.toString() : 根据SVG的路径数据规范返回此路径的字符串表示形式.

形状API

圆弧

d3.arc() : ;此方法用于创建新的圆弧生成器.
arc(args) : 它用于生成具有指定给定参数的弧.具有对象半径和角度的默认设置定义如下.

<script>
   var arc = d3.arc();
   arc({
      //内弧半径
      innerRadius: 0,
      //外弧半径
      outerRadius: 100,
      //起始角度
      startAngle: 0,
      //结束角度
      endAngle: Math.PI / 2
   });
</script>

arc.centroid(args) : 此方法用于计算具有指定参数的圆弧中心线的中点[x,y].
arc.innerRadius([半径]) : 此方法用于设置给定半径的内半径并返回弧生成器.它定义如下 :
arc.outerRadius([radius]) : 此方法用于设置给定半径的外半径并返回一个弧生成器.它定义如下.

arc.startAngle([角度]) : 此方法用于从给定角度设置函数的起始角度.它定义如下 :

function startAngle(d) {
   return d.startAngle;
}

arc.endAngle([angle]) : 此方法用于从给定角度设置函数的结束角度.它定义如下.

function endAngle(d) {
   return d.endAngle;
}

示例1

// 创建一个svg
 let svg = d3.select('#abc').append('svg').attr('width',200).attr('height',400);
 // 创建一个弧的路径
 let arcPath = d3.arc().innerRadius(50).outerRadius(100);
 // 通过颜色比例尺获取颜色
 let color = d3.scaleOrdinal(d3.schemeCategory10);
 // 弧的角度
 let data = {startAngle: 0,endAngle: Math.PI * 0.75};
 // 往svg中添加路径
 svg.append('path')
     .attr('d',arcPath(data))
     .attr('transform','translate(50,120)')
     .attr('stroke','black') // 描边
     .attr('stroke-width','3px') // 宽度
     .attr('fill',(d,i) => color(i));

在这里插入图片描述
示例2

// 创建一个svg
let svg = d3.select('#abc').append('svg').attr('width',200).attr('height',400);
// 创建一个弧的路径
let arcPath = d3.arc().innerRadius(20).outerRadius(50);
// 通过颜色比例尺获取颜色
let color = d3.scaleOrdinal(d3.schemeCategory10);
// 弧的角度
let data = [
    {startAngle: 0,endAngle: Math.PI * 0.5},
    {startAngle: Math.PI * 0.5,endAngle: Math.PI * 1},
    {startAngle: Math.PI * 1,endAngle: Math.PI * 1.5},
    {startAngle: Math.PI * 1.5,endAngle: Math.PI * 2}
];
// 往svg中添加路径
svg.selectAll('path') // 获取所有路径
    .data(data)
    .enter()
    .append('path') // 添加路径
    .attr('d',d => arcPath(d))
    .attr('transform','translate(60,120)')
    .attr('stroke','black') // 描边
    .attr('stroke-width','3px') // 宽度
    .attr('fill',(d,i) => color(i));

在这里插入图片描述

饼图

d3.pie() : 使用默认设置构造一个新的饼图生成器.

pie(参数)

pie([{
  	index : 弧的索引.
	startAngle : 弧的起始角度.
	endAngle : 弧的结束角度.
	padAngle : 弧的垫角.
}])

pie.value([value ]) : 此方法用于将值设置为指定的函数并生成饼图.

pie.startAngle([angle]) : 此方法用于将饼图的起始角度设置为指定的函数.如果未指定角度,则返回当前的起始角度.它的定义如下.

function startAngle() {
   return 0;
}

pie.endAngle([angle]) : 此方法用于将饼图的结束角度设置为指定的函数.如果未指定角度,则返回当前结束角度.它定义如下.

function endAngle() {
   return 2 * Math.PI;
}

pie.padAngle([angle]) : 此方法用于将填充角度设置为指定的函数并生成饼图.该函数定义如下.

function padAngle() {
   return 0;
}

示例1

// 创建一个svg
let svg = d3.select('#abc').append('svg').attr('width',300).attr('height',400);
// 数据源
let chartData = [{label: 'a',value: 2},{label: 'b',value: 3},{label: 'c',value: 5}];
// 创建一个饼图生成器
let pie = d3.pie().value(d => d.value);
// 饼图信息
let pieData = pie(chartData);
// 生成一个弧
let arcPath = d3.arc().innerRadius(60).outerRadius(100);
// 颜色
let color = (index) => {
    let colors = ['red','blue','yellow'];
    return colors[index];
};
// 绘制饼图
svg.selectAll('path')
    .data(pieData)
    .enter()
    .append('path')
    .attr('d',d => arcPath(d)) // 设置路径值
    .attr('stroke','blue')
    .attr('fill',(d,i) => color(i))
    .attr('transform','translate(100,120)');

在这里插入图片描述
示例2

// 创建一个svg
let svg = d3.select('#abc').append('svg').attr('width',350).attr('height',400);
// 数据源
let data = [{label: '电影',value: 50},{label: '电视剧',value: 60},{label: '动漫',value: 100}];
// 颜色
let colors = ['#5c84f2','#C8D0E6','#dddddd'];
// 创建一个饼图
let pie = d3.pie().value(d => d.value);
// 饼图数据
let pieData = pie(data);
// 创建饼图的弧路径
let arcPath = d3.arc().innerRadius(60).outerRadius(100);
// 创建分组,每一组里保存一个扇形信息
let arcList = svg.selectAll('g')
    .data(pieData)
    .enter()
    .append('g')
    .attr('transform','translate(150,200)');
// 在组里添加路径
arcList.append('path')
    .attr('d',d => arcPath(d))
    .attr('fill',(d,i) => colors[i])
    .attr('stroke','black')
    .on('mouseover',function(e,d) {
        d3.select(this)
            .attr('fill','#f8aba6');
    })
// e是事件对象,d是数据对象
    .on('mouseout',function(e,d) {
        d3.select(this)
            .attr('fill',colors[d.index]);
    });


/* 上面的代码是绘制饼图,下面绘制饼图的文字    */

// 绘制扇形区域的数值
arcList.append('text')
    .attr('fill','white')
    .attr('text-anchor','middle')
    .attr('transform',function(d) {
        // 获取弧的中线点
        var x = arcPath.centroid(d)[0];
        var y = arcPath.centroid(d)[1];
        return 'translate(' + x + ',' + y + ')';
    })
    .text(d => d.value);


// 绘制扇形区域对应的类型,就是线条加类型
arcList.append('line')
    .attr('stroke',(d,i) => colors[i])
    .attr('x1',function(d) { return arcPath.centroid(d)[0] * 1.34; })
    .attr('y1',function(d) { return arcPath.centroid(d)[1] * 1.34; })
    .attr('x2',function(d) { return arcPath.centroid(d)[0] * 1.8; })
    .attr('y2',function(d) { return arcPath.centroid(d)[1] * 1.8; });

arcList.append('text')
    .attr('fill',(d,i) => colors[i])
    .attr('transform',function(d) {
        var x = arcPath.centroid(d)[0] * 1.9;
        var y = arcPath.centroid(d)[1] * 1.9;
        return 'translate(' + x + ',' + y + ')';
    })
    .attr('text-anchor','middle')
    .text(d => d.data.label);

在这里插入图片描述

颜色API

d3.hsl(颜色): 将颜色值转换为HSL

HSL是一种将RGB色彩模型中的点在圆柱坐标系中的表示法。

var convert = d3.hsl("green ");
//将色调旋转45度
convert.h + = 45;
//修改透明度
convert.opacity = 0.5;

d3.color(颜色): 以对象的形式返回颜色rgba值

var color = d3.color("green"); 

color.opacity: 颜色透明度,读写一体,是属性不是方法

color.rgb(颜色): 以对象的形式返回颜色rgba值

color.toString(): 以字符串形式返回颜色值

color.displayable(): 如果颜色可显示,则返回true.如果RGB颜色值小于0或大于255,或者不透明度不在[0,1]范围内,则返回false

d3.rgb(颜色): 用于构造新的rgb颜色

 console.log(d3.rgb("yellow"));
 console.log(d3.rgb(200,100,0));

d3.hcl(颜色): 构造一个新的HCL颜色.通道值在返回的实例上公开为h,c和l属性

拖动API

d3.drag(): 用于创建新的拖动.

selection.call(): 调用函数

drag.on(typenames,[listener]): 监听事件

示例

// 创建一个svg
let svg = d3.select('#abc').append('svg').attr('width',300).attr('height',300)
    .append('g')
    .attr('transform', `translate(50,50)`);

// 创建一个圆
let circle = svg.append('circle')
    .attr('r', 10)
    .attr('fill', 'red')
    .attr('cursor','pointer');


// 创建拖动
let drag = d3.drag()
    .on('start',() => {
        console.log('拖动开始');
    })
    .on('end',() => {
        console.log('拖动结束');
    })
    .on('drag',move);

// 给圆添加拖动
circle.call(drag);

function move(e) {
    let {x,y} = e;
    // console.log(e);
    d3.select(this)
        .attr('cx',x)
        .attr('cy',y);
}

在这里插入图片描述

缩放API

d3.zoom(): 创建一个缩放行为

zoom.scaleExtent([extent]): 设置缩放范围

示例1: 滑轮滚动缩放,鼠标按住平移(需要人为操作)

// 创建一个svg
 let svg = d3.select('#abc').append('svg').attr('width',300).attr('height',300)
     .append('g')
     .attr('transform', `translate(50,50)`);

 // 创建一个圆
 let circle = svg.append('circle')
     .attr('r', 10)
     .attr('fill', 'red')
     .attr('cursor','pointer');

 // 创建缩放对象
 let zoom = d3.zoom()
     .scaleExtent([1,10]) // 设置缩放范围
     .on('start',() => {
         console.log('start');
     })
     .on('zoom',e => {
         console.log(e);
         circle.attr('transform','scale(' + e.transform.k + ')') // 缩放
             .attr('cx', e.transform.x).attr('cy', e.transform.y); // 平移
     })
     .on('end',() => {
         console.log('end');
     });

 // 给圆添加缩放
 circle.call(zoom);

在这里插入图片描述

示例2: 自动缩放

// 创建一个svg
let svg = d3.select('#abc').append('svg').attr('width',300).attr('height',300)
    .append('g')
    .attr('transform', `translate(50,50)`);

// 创建一个圆
let circle = svg.append('circle')
    .attr('r', 10)
    .attr('fill', 'red')
    .attr('cursor','pointer');

// 创建缩放对象
let zoom = d3.zoom()
    .scaleExtent([1,10]) // 设置缩放范围
    .on('start',() => {
        console.log('start');
    })
    .on('zoom',e => {
        console.log(e);
        circle.attr('transform','scale(' + e.transform.k + ')') // 缩放
            .attr('cx', e.transform.x).attr('cy', e.transform.y); // 平移
    })
    .on('end',() => {
        console.log('end');
    });

// 给圆添加缩放
circle
    .transition().duration(2000) // 设置过度时间
    .call(zoom.transform,d3.zoomIdentity.scale(5)); // 设置最终状态

在这里插入图片描述

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无知的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值