D3.js常用图形

var ele = d3.select('body')//select()返回一个对DOM中匹配的第一个元素的引用
    .append('p')//append()创建一个新DOM元素,然后将其追加到条用的元素末尾
    .text('new paragraph');//text()接收字符串,将其插入当前元素的开始和结束标签之间
var dataset = [3, 2, 1];
var eles = d3.select('body')
    .selectAll('p') //选中DOM中所有段落,若无则返回空
    .data(dataset)//解析并输出数据值
    .enter()//创建新的绑定数据的元素(占位元素)
    .append('p')
    .text('paragraph');
//CSV数据
id,name,title
1,alice,girl
2,ben,boy
3,carl,boy

//加载CSV数据
var dataset;
d3.csv('./assets/data/demo.csv', function (error, data) {
    if (error) {
        console.log(error);
    } else {
        dataset = data;//将csv数据交给全局变量
        console.log(dataset);
    }
});
console.log(dataset);//debug:undefined
{"id":1, "name":"alice", "age":20}

//加载json数据
var dataset;
d3.json('./assets/data/demo.json', function (json) {
    console.log(json);
});
//创建SVG元素
var w = 500, h = 500;
var svg = d3.select('body')
    .append('svg')
    .attr('width', w)
    .attr('height', h);

var dataset = [10, 20, 30, 40, 50, 60, 70];//半径
//创建圆形
var circles = svg.selectAll('.circle')
    .data(dataset)
    .enter()
    .append('circle');

circles.attr('cx', function (d, i) {
    return i * 50 + 25;
})
    .attr('cy', h / 2)
    .attr('r', function (d) {
        return d;
    })
    //填充
    .attr('fill', 'yellow')
    //描边
    .attr('stroke', 'orange')
    .attr('stroke-width', function (d) {
        return d / 3;
    });

![Uploading image_806296.png . . .]

//条形图
var w = 500, h = 500, barPadding = 1;
var svg = d3.select('body').append('svg').attr('width', w).attr('height', h);
//绑定数据
var dataset = [15, 20, 14, 19, 40, 20, 90, 55, 42];
var len = dataset.length;
//创建矩形
var rect = svg.selectAll('.rect')
    .data(dataset)
    .enter()
    .append('rect');
//矩形属性
rect.attr('x', function (d, i) {
    return i * (w / len);
})
    .attr('y', function (d, i) {
        return h - d;
    })
    .attr('width', w / len - barPadding)
    .attr('height', 100)
    .attr('fill', function (d) {
        return 'rgb(0,0,' + (d * 10) + ')';
    });
//值标签
var text = svg.selectAll('.text')
    .data(dataset)
    .enter()
    .append('text')
    .text(function (d) {
        return d;
    });
text.attr('x', function (d, i) {
    return i * (w / len) + 15;
})
    .attr('y', function (d) {
        return (h - d) + (h - (h - d)) / 2 + 2;
    })
    .attr('font-family', 'sans-serif')
    .attr('font-size', '16px')
    .attr('fill', 'white');
4933701-46b44a4c93f5613b.png
image.png
/*比例尺*/
var w = 500,h = 500, padding = 20;
var svg = d3.select('body').append('svg').attr('width',w).attr('height',h);
//定义绑定数据
var dataset = [];
var xRange = Math.random()*1000;
var yRange = Math.random()*1000;
var len = 50;
for(var i=0; i<len; i++){
    var num1 = Math.floor(Math.random() * xRange);
    var num2 = Math.floor(Math.random() * yRange);
    dataset.push([num1,num2]);
}
//定义水平线性比例尺
var xScale = d3.scaleLinear()
    .domain([0, d3.max(dataset, function(d){
        return d[0];
    })])
    .range([padding, w-padding*2]);
//定义垂直线性比例尺
var yScale = d3.scaleLinear()
    .domain([0, d3.max(dataset, function(d){
        return d[1];
    })])
    .range([h-padding,padding]);
//定义半径线性比例尺
var rScale = d3.scaleLinear()
    .domain([0, d3.max(dataset, function(d){
        return d[1];
    })])
    .range([2,5]);
//定义底部水平x坐标轴
var xAxis = d3.axisBottom()
    .scale(xScale)
    .ticks(5);
//定义左侧垂直y坐标轴
var yAxis = d3.axisLeft()
    .scale(yScale)
    .ticks(5);
//创建圆形
var circle = svg.selectAll('.circle')
    .data(dataset)
    .enter()
    .append('circle');
circle.attr('cx', function(d){
    return xScale(d[0]);
})
    .attr('cy', function(d){
        return yScale(d[1]);
    })
    .attr('r', function(d){
        return rScale(d[1]);
    })
    .attr('fill','red');
//创建值标签
svg.selectAll('.text')
    .data(dataset)
    .enter()
    .append('text')
    .text(function(d){
        return d[0]+','+d[1];
    })
    .attr('x', function(d){
        return xScale(d[0]);
    })
    .attr('y', function(d){
        return yScale(d[1]);
    })
    .attr('font-family','sans-serif')
    .attr('font-size', '12px')
    .attr('fill','red');
//创建x轴
svg.append('g')
    .attr('class', 'axis')
    .attr('transform', 'translate(0,'+(h-padding)+')')
    .call(xAxis);
//创建y轴
svg.append('g')
    .attr('class','axis')
    .attr('transform', 'translate('+padding+',0)')
    .call(yAxis);
4933701-8df84626b1114fbb.png
image.png
var w=960,h=960;
var svg = d3.select('body').append('svg').attr('width',w).attr('height',h);
var format = d3.format(',d');
var color = d3.scaleOrdinal(d3.schemeCategory20c);
var pack = d3.pack().size([w,h]).padding(1.5);

d3.csv('./assets/data/flare.csv', function(d){
    d.value += d.value;
    if(d.value){
        return d;
    }
},function(error,data){
    if(error){
        throw error;
    }

    var root = d3.hierarchy({children:data})
        .sum(function(d){
            return d.value;
        })
        .each(function(d){
            if(id = d.data.id){
                var id, i=id.lastIndexOf('.');
                d.id = id;
                d.package = id.slice(0,1);
                d.class = id.slice(i+1);
            }
        });

    var node = svg.selectAll('.node')
        .data(pack(root).leaves())
        .enter()
        .append('g')
        .attr('class','node')
        .attr('transform', function(d){
            return 'translate('+d.x+','+d.y+')';
        })

    node.append('circle')
        .attr('id', function(d){
            return d.id;
        })
        .attr('r', function(d){
            return d.r;
        })
        .style('fill', function(d){
            return color(d.package);
        });

    node.append('clipPath')
        .attr('id', function(d){
            return 'clip-'+d.id;
        })
        .append('use')
        .attr('xlink:href', function(d){
            return '#'+d.id;
        });

    node.append('text')
        .attr('clip-path', function(d){
            return 'url(#clip'+d.id+')';
        })
        .selectAll('tspan')
        .data(function(d){
            return d.class.split(/(?=[A-Z][^A-Z])/g);
        })
        .enter()
        .append('tspan')
        .attr('x',0)
        .attr('y', function(d,i,nodes){
            return 13+(i-nodes.length/2-0.5)*10;
        })
        .text(function(d){
            return d;
        });

    node.append('title')
        .text(function(d){
            return d.id+'\n'+format(d.value);
        });
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值