大家好,又见面了,我是你们的朋友全栈君。
<script src="https://d3js.org/d3.v5.js"></script>
<script> src="path/...../d3.js"</script>
(这个script可以单独成行)
官网:https://d3js.org/
d3是基于选择数据和绑定数据进行工作的。
<body>
<p></p>
<p></p>
<script src="https://d3js.org/d3.v5.js"></script>
<script> let p = d3.select('body') .selectAll("p"); p.text("伊雷娜和沙耶贴贴~~~") </script>
</body>
解释一下代码:
可以自己在html中试一试这一段代码(仔细看,我是直接引用了网络上的d3库,所以在网上都可以正常运行)
d3中有两个选择元素的函数:
比如:
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元素
d3提供一个把数据绑定在一个dom对象的函数(可以理解为赋值)。
示例:
<body>
<p>刻晴</p>
<p>甘雨</p>
<p>优菈</p>
<script src="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>
说明:
2.通过无名函数function进行访问,其中i代表索引编号,而d代表绑定的数据。
<body>
<p></p>
<p></p>
<p></p>
<script src="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>
说明:
假如使用data,然而dataset中与绑定的对象数目不同,那么该怎么办的?
d3中就提供了3个函数来解决这个问题:
<body>
<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 pEnter = enter.append("p") pEnter.text(function(d,i){
return "我的第" + i + "个老婆:" + d; }) </script>
</body>
<body>
<p></p>
<p></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){
if(i == 2) d3.select(this).style("color", "blue"); return "我的第" + i + "个老婆:" + d; }) </script>
</body>
<body>
<p></p>
<p class = "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提供了两种插入函数:
<body>
<p>甘雨</p>
<p id="myP">诺艾尔</p>
<p>砂糖</p>
<p>芭芭拉</p>
<p>莫娜</p>
<script> var d = d3.select("body") .append("p") .text("优菈!!") .style("color", "blue"); </script>
</body>
删除很简单,直接使用remove即可
var p = d3.select("body")
.select("#myP")
.remove();
这样就直接删除了id为’myP’的对象。
首先我们需要明确一下制作图标的思路:
那么我们的具体步骤就是:
var marge = {top: 60, bottom: 60, left: 60, right:60};
var dataset = [233, 466 , 699];
var svg = d3.select("svg");//得到svg画布
var g = svg.append("g")//生成一个对象来装这个svg
.attr("transform","translate("+marge.top+","+marge.left+")");//此处使用的是字符拼接
由于画出向上延伸的图标比较困难,那么这里就按照向上画的举出例子。
<body>
<svg></svg>
<script> var margin = {
top: 80, bottom: 60, left: 70, right: 60};//用于设定表格的位置 var dataset = []; for(var i = 0; i < 20; ++i) dataset[i] = Math.random() * 600; var svg = d3.select("svg") .attr("width", window.innerWidth) .attr("height", window.innerHeight); //↑将svg画布充满整个屏幕,当然也可自行调整,注意:如果svg过小,可能里面的内容显示不全,所以需要注意 var g = svg.append("g")//可以理解为把svg与g绑定在一起 .attr("transform", "translate(" + margin.top + "," + margin.left + ")");//设定左上角位置 var height = 0.8 * window.innerHeight, width = 0.8 * window.innerWidth; var rectWidth = width / dataset.length; //每个柱子的宽度 g.selectAll("rect") .data(dataset)//选中所有的rect对象进行操作 .enter()//由于都是新生成的,所以当然要用enter()了,这是上一节内容。 .append("rect")//自动补充rect对象与数据进行绑定 .attr("x", function (d, i) {
return i * rectWidth; }) .attr("y", function (d, i){
//由于高度是从上往下延伸的,所以柱子y轴开始的地方应该是它的顶端 return height - d; }) .attr("width", rectWidth * 0.9) .attr("height", function (d) {
return d; }) .attr("fill", "blue");//颜色 </script>
</body>
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/209838.html原文链接:https://javaforall.cn