D3JS常用API

D3JS常用APID3JS 常用 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)); // 设置最终状态 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214041.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午5:07
下一篇 2026年3月18日 下午5:07


相关推荐

  • 扣子Coze智能体万字教程:从入门到精通,一文掌握AI工作流搭建

    扣子Coze智能体万字教程:从入门到精通,一文掌握AI工作流搭建

    2026年3月12日
    2
  • glusterfs进程

    glusterfs进程glusterfs 进程管理

    2025年8月30日
    7
  • lofter限流怎么解决_高并发限流

    lofter限流怎么解决_高并发限流前言:学习本篇博客是有一些前提基础的1、熟悉gateway网关使用2、熟悉nginx使用3、熟悉sentinel的应用,会涉及网关规则持久化改造看不懂的童鞋们可以补一下微服务gateway网关和Sentinel相关知识秒杀链路兜底方案之限流&降级实战一、秒杀场景介绍1.1秒杀场景的特点1.2流量消峰1.3兜底方案二、限流实战2.1nginx限流(https://nginx.org/en/docs)2.2网关限流2.2.1网关接入sentinel控制台2.2.2Sentinel

    2022年10月6日
    4
  • nginx负载均衡原理

    nginx负载均衡原理负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backendservers,后面简称backend)来做复杂的计算、处理和响应,并且在业务量增加的时候可以方便地扩容后台服务器。负载均衡可以分为硬件负载均衡和软件负载均衡…

    2022年6月24日
    32
  • WebViewJavascriptBridge使用

    WebViewJavascriptBridge使用由于项目中使用到原生和 H5 交互的技术 其实这个也有很多的解决方法 最后选择使用一个叫 WebViewJavas 的进行操作 在项目使用中遇到很多问题 在这把配置和使用问题一一罗列出来步骤 1 import WebViewJavas h 2 interfaceHom UIWebViewDel property str

    2025年12月10日
    5
  • 在ubuntu下完美安装RTX(解决离线、乱码问题) 转

    在ubuntu下完美安装RTX(解决离线、乱码问题) 转

    2021年8月26日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号