var body = d3.select("body"); //选择html文档中的body元素 var svg = body.select("svg"); //选择body中的svg元素,注意声明了body后,就可以把body当作一个新的d3对象使用(大概这个意思) var p = body.selectAll("p"); //选择body中所有的p元素 var p1 = body.select("p"); //选择body中第一个p元素
2.绑定数据
d3提供一个把数据绑定在一个dom对象的函数(可以理解为赋值)。
data() : 把一个数组绑定到一个选择的对象上,进行 一一对应。
datum() : 把一个数据绑定到 所有选择集 上。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<body> <p>刻晴</p> <p>甘雨</p> <p>优菈</p> <scriptsrc="https://d3js.org/d3.v5.js"></script> <script> var str = '个老婆'; var p = d3.select("body") .selectAll("p"); p.datum(str) .text(function (d, i) { return"这是我" + (i+1) + d; }) </script> </body>
说明:
将str与p中所有的数据绑定
2.通过无名函数function进行访问,其中i代表索引编号,而d代表绑定的数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
<body> <p></p> <p></p> <p></p> <scriptsrc="https://d3js.org/d3.v5.js"></script> <script> var dataset = ['甘雨', '刻晴', '优菈']; var p = d3.select("body") .selectAll("p"); p.data(dataset) .text(function (d, i) { return d + "是我老婆"; }) </script> </body>
<body> <p></p> <pclass = "myP"></p> <p></p> <p></p> <p></p> <script> var dataset = ['甘雨','诺艾尔','砂糖','芭芭拉','莫娜']; var p = d3.select("body") .selectAll("p"); var update = p.data(dataset) var enter = update.enter(); update.text(function(d,i){ return"我的第" + i + "个老婆:" + d; }) var d = d3.select("body") .selecAll(".myP"); d.style("style", "blue") </script> </body>
如果是class定义的话,在名称前加’.’,如果是通过id定义的话,前面加’#’。
插入元素
d3提供了两种插入函数:
append() : 在选择集尾部插入元素
insert() : 在选择集头部插入元素
1 2 3 4 5 6 7 8 9 10 11 12 13
<body> <p>甘雨</p> <pid="myP">诺艾尔</p> <p>砂糖</p> <p>芭芭拉</p> <p>莫娜</p> <script> var d = d3.select("body") .append("p") .text("优菈!!") .style("color", "blue"); </script> </body>
删除元素
删除很简单,直接使用remove即可
1 2 3
var p = d3.select("body") .select("#myP") .remove();
这样就直接删除了id为’myP’的对象。
制作简单的图表
首先我们需要明确一下制作图标的思路:
生成svg画布
使用d3中的rect元素对svg进行赋值,即各类参数
在完成赋值之前,需要我们自己去设计数据,让d3进行数据转化,从而赋值给svg。
那么我们的具体步骤就是:
设定数据
1 2
var marge = {top: 60, bottom: 60, left: 60, right:60}; var dataset = [233, 466 , 699];
生成svg画布,并生成操作对象
1 2 3
var svg = d3.select("svg");//得到svg画布 var g = svg.append("g")//生成一个对象来装这个svg .attr("transform","translate("+marge.top+","+marge.left+")");//此处使用的是字符拼接
Reprint policy:
All articles in this blog are used except for special statements
CC BY 4.0
reprint polocy. If reproduced, please indicate source
BY 水蓝
!