实例 [1]_ ########### 选择元素 ========= :: d3.select() d3.selectAll() 实例: var body = d3.select("body");//选择文档中的body元素 var svg = body.select("svg");//选择body中的svg元素 var p = body.selectAll("p");//选择body中所有的p元素 var p1 = body.select("p");//选择body中第一个p元素 绑定数据data,datum ==================== :: data():讲一个数组绑定到选择集上,数组各项和选择集各元素绑定,也就是一一对应的关系 datum():将一个数据绑定到所有选择集上 datum()的使用::

dog

cat

pig

输出:: 第0个元素is an animal 第1个元素is an animal 第2个元素is an animal data()的使用::

dog

cat

pig

输出:: 第0个动物so cute 第1个动物cute 第2个动物fat Update、Enter、Exit ========================= .. image:: https://img.zhaoweiguo.com/knowledge/images/charts/common_force_directed2.png Update与Enter的使用::

dog

cat

pig

结果:: update: 3, index 0 update: 6, index 1 update: 9, index 2 enter: 12, index 3 enter: 15, index 4 Update与Exit的使用::

dog

cat

pig

rat

结果:: update: 3, index 0 update: 6, index 1 exit exit 选择元素select,selectAll ======================== 实例::

dog

cat

pig

rat

// 选择第一个元素

var p = d3.select("body") .select("p"); p.style("color","red"); // 选择全部元素 var p = d3.select("body") .selectAll("p"); p.style("color","red"); 选择任意元素::

dog

cat

pig

rat

var p = d3.select("body") .selectAll(".myP2"); p.style("color","red"); 选择任意元素(扩展):: var dataset = [3,6,9,12]; var p = d3.select("body") .selectAll("p") .data(dataset) .text(function(d,i){ if(i==3){ d3.select(this).style("color","red"); } return d; }) 插入元素append,insert ===================== 说明:: append():在选择集尾部插入元素 insert():在选择集前面插入元素 实例:: var p = d3.select("body") .append("p") .text("another animal") .style("color","red"); 删除元素remove ============== 实例:: var p = d3.select("body") .select("#myP3") .remove(); svg画布入门 =========== * svg画布:svg绘制的是矢量图(还有canvas画布,这个是JavaScript用来绘制2D图像的,是位图) * rect元素:是d3中在svg中绘制矩形的元素 * g元素:分组的时候使用 `svg画布入门 `_ 比例尺 ====== 两种比例尺: * `线性比例尺:d3.scaleLinear() `_ * `序数比例尺:d3.scaleOrdinal() `_ * 第3种比例尺d3.scaleBand() 使用比例尺完成svg画面: `比例尺画布 `_ 坐标轴 ====== 定义一个坐标轴: * 朝下: axisBottom * 朝上: axisTop * 朝左: axisLeft * 朝右: axisRight 调用:call() `坐标轴 `_ d3.range(dataset.length),这里返回的是一个等差数列 让图表动起来 ============ * .attr(xxx).transition()表示添加过渡,也就是从前一个属性过渡到后一个属性 * .duration(2000),表示过渡时间持续2秒 * .delay(500),表示延迟0.4秒后再进行过渡 * .ease(d3.easeElasticInOut)表示过渡方式,注意这里和v3版本的区别 `让图表动起来 `_ 交互式操作 ========== * on("eventName",function);该函数是添加一个监听事件,它的第一个参数是事件类型,第二个参数是响应事件的内容 * d3.select(this),选择当前元素 常见的事件类型:: click:鼠标单击某元素时触发,相当于mousedown和mouseup的组合 mouseover:鼠标放在某元素上触发 mouseout:鼠标移出某元素时触发 mousemove:鼠标移动时触发 mousedown:鼠标按钮被按下时触发 mouseup:鼠标按钮被松开时触发 dblclick:鼠标双击时触发 查看监听事件:: .on("click",function(){ console.log(d3.event); }) 为柱状图添加监听事件:: .on("mouseover",function(){ var rect = d3.select(this) .transition() .duration(1500)//当鼠标放在矩形上时,矩形变成黄色 .attr("fill","yellow"); }) .on("mouseout",function(){ var rect = d3.select(this) .transition() .delay(1500) .duration(1500)//当鼠标移出时,矩形变成蓝色 .attr("fill","blue"); }) `交互式操作 `_ 饼状图 ======== * d3.arc( {} ),弧形生成器,用以绘制弧形,需要传入一些用以绘制弧形基本的数据的对象 * d3.pie(),饼状图生成器,用于生成饼图 * d3.arc().centroid() * d3.schemeCategory10,一些离散的色彩数组 `饼状图 `_ 力导向图 ======== * d3.forceSimulation() ,新建一个力导向图, * d3.forceSimulation().force(),添加或者移除一个力 * d3.forceSimulation().nodes(),输入是一个数组,然后将这个输入的数组进行一定的数据转换 * d3.forceLink.links(),这里输入的也是一个数组(边集),然后对输入的边集进行转换 * d3.drag(),是力导向图可以被拖动 * tick(),重要,力导向图是不断运动的,每一时刻都在发生更新,所以需要不断更新节点和连线的位置 `力导向图 `_ 树状图 ====== * d3.hierarchy(),层级布局,需要和tree生成器一起使用,来得到绘制树所需要的节点数据和边数据 * d3.hierarchy().sum() ,后序遍历 * d3.tree(),创建一个树状图生成器 * d3.tree().size(),定义树的大小 * d3.tree().separation(),定义邻居节点的距离 * node.descendants()得到所有的节点,已经经过转换的数据 * node.links(),得到所有的边,已经经过转换的数据 * d3.linkHorizontal(),创建一个水平贝塞尔生成曲线生成器 * d3.linkVertical(),垂直的贝塞尔生成曲线生成器 `树状图 `_ .. [1] https://blog.csdn.net/qq_34414916/article/details/80026180