D3学习之旅(直方图)

D3学习之旅之直方图

样例代码

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>D3</title>
</head>

<body>
<script src="http://d3js.org/d3.v3.min.js"></script>

<script>

    var w = window.innerWidth||document.documentElement.clientWidth || document.body.clientWidth;
    var h = window.innerHeight||document.documentElement.clientHeight|| document.body.clientHeight;
    w=w*0.98
    h=h*0.98
    var b = d3.rgb(70,130,180);//低
    var a = d3.rgb(224,255,255);//高

    var d = d3.rgb(255,215,0);
    var c = d3.rgb(255,255,224);

    var compute1 = d3.interpolate(a,b);
    var compute2 = d3.interpolate(c,d);
    var dataset1=new Array("578","337","321","281","265","1119","271","103","450","245");
    var dataset2=new Array("150","176","152","32","54","530","174","67","262","70");
    var dataset3=new Array("北京大学","清华大学","浙江大学","国防科技大学","北京航空大学","北京邮电大学","哈尔滨工业大学","上海交通大学","南京大学","华东师范大学");
    var linear = d3.scale.linear()
            .domain([0,h])
            .range([0,1]);
   var linear2 = d3.scale.linear()
               .domain([0,1400])
               .range([0,h])

     var svg=d3.select("body")
                .append("svg")
                .attr("width",w)
                .attr("height",h)
//农小哥的logo
     svg.append("line")
            .attr("x1",1490)
            .attr("y1",10)
            .attr("x2",1520)
            .attr("y2",40)
            .attr("stroke", "LightSkyBlue")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1490)
            .attr("y1",55)
            .attr("x2",1490)
            .attr("y2",70)
            .attr("stroke", "rgb(240,230,140)")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1490)
            .attr("y1",55)
            .attr("x2",1520)
            .attr("y2",40)
            .attr("stroke", "LightSkyBlue")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1520)
            .attr("y1",25)
            .attr("x2",1595)
            .attr("y2",25)
            .attr("stroke", "rgb(240,230,140)")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1595)
            .attr("y1",25)
            .attr("x2",1595)
            .attr("y2",40)
            .attr("stroke", "rgb(240,230,140)")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1490)
            .attr("y1",70)
            .attr("x2",1565)
            .attr("y2",70)
            .attr("stroke", "rgb(240,230,140)")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1565)
            .attr("y1",55)
            .attr("x2",1595)
            .attr("y2",85)
            .attr("stroke", "LightSkyBlue")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1595)
            .attr("y1",40)
            .attr("x2",1565)
            .attr("y2",55)
            .attr("stroke", "LightSkyBlue")
            .attr("stroke-width", 4);
     svg.append("line")
            .attr("x1",1520)
            .attr("y1",40)
            .attr("x2",1565)
            .attr("y2",55)
            .attr("stroke", "LightSkyBlue")
            .attr("stroke-width", 4);
     svg.append("text")
     .attr("x",1530)
     .attr("y",35)
     .attr('fill', 'rgb(205,201,201')
    .attr('font-size', '10px')
    .text("18数科李钰林");
     svg.append("text")
     .attr("x",1495)
     .attr("y",65)
     .attr('fill', 'rgb(205,201,201')
    .attr('font-size', '10px')
    .text("201811153030");
//


     svg.append("rect")
     .attr("x",0)
     .attr("y",0)
     .attr("width",100)
     .attr("height",20)
     .attr("fill","rgb(240,230,140)")

     svg.append("text")
     .attr("x",50)
     .attr("y",15)
     .attr('fill', 'black')
    .attr('font-size', '10px')
    .attr('text-anchor', 'middle')
    .text("推免人数");


     svg.append("rect")
     .attr("x",0)
     .attr("y",30)
     .attr("width",100)
     .attr("height",20)
     .attr("fill","LightSkyBlue")

     svg.append("text")
     .attr("x",50)
     .attr("y",45)
     .attr('fill', 'black')
    .attr('font-size', '10px')
    .attr('text-anchor', 'middle')
    .text("总招生人数");


     svg.append("text")
     .attr("x",70)
     .attr("y",60)
     .attr('fill', 'black')
    .attr('font-size', '10px')
    .attr('text-anchor', 'middle')
    .text("数据来源:各高校研究生招生网");


     svg.append("text")
     .attr("x",w/2)
     .attr("y",100)
     .attr('fill', 'black')
    .attr('font-size', '50px')
    .attr('text-anchor', 'middle')
    .text("2021年计算机专业前十高校研究生招生情况");




     svg.selectAll("rect1")
     .data(dataset1)
     .enter()
     .append("rect")
     .attr("x",function(d,i){
        return i*(w/dataset1.length);
     })
     .attr("y",function(d){
        return h-linear2(d)-20;
     })
     .attr("width",(w/dataset1.length-10))
     .attr("height",function(d){
        return linear2(d)
     })
     .attr("fill",function(d){
     return compute1(linear(d))
     } )
             .on("mouseover",function(d,i){
            d3.select(this)
                .attr("fill","DarkSlateGray");
        })
        .on("mouseout",function(d,i){
            d3.select(this)
                .transition()
                .duration(500)
                .attr("fill",function(d){
     return compute1(linear(d))
     } )
     })




     svg.selectAll("rect2")
     .data(dataset2)
     .enter()
     .append("rect")
     .attr("x",function(d,i){
        return i*(w/dataset2.length);
     })
     .attr("y",function(d){
        return h-linear2(d)-20;
     })
     .attr("width",(w/dataset2.length-10))
     .attr("height",function(d){
        return linear2(d)
     })
     .attr("fill",function(d){
     return compute2(linear(d))
     } )
     .on("mouseover",function(d,i){
            d3.select(this)
                .attr("fill","Gainsboro");
        })
        .on("mouseout",function(d,i){
            d3.select(this)
                .transition()
                .duration(500)
                .attr("fill",function(d){
     return compute2(linear(d))
     } )
})

//总人数
     svg.selectAll('text1')
               .data(dataset1)
               .enter()
               .append('text')
               .attr('fill', 'white')
               .attr('font-size', '25px')
               .attr('text-anchor', 'middle')
               .attr('x', function(d,i) {
                     return i*(w/dataset1.length)+70;
               })
               .attr('y', function(d) {
                     return h-linear2(d);
               })
               .text(function(d) {
                     return d;
               })
//推免人数
     svg.selectAll('text2')
               .data(dataset2)
               .enter()
               .append('text')
               .attr('fill', 'LightSlateGray')
               .attr('font-size', '20px')
               .attr('text-anchor', 'middle')
               .attr('x', function(d,i) {
                     return i*(w/dataset1.length)+70;
               })
               .attr("y",function(d){
                    return h-linear2(d);
                    })
               .text(function(d) {
                     return d;
               })
//地标
     svg.selectAll('text3')
               .data(dataset3)
               .enter()
               .append('text')
               .attr('fill', 'DarkSlateGray')
               .attr('font-size', '20px')
               .attr('text-anchor', 'middle')
               .attr('x', function(d,i) {
                     return i*(w/dataset2.length)+70;
               })
               .attr('y', function(d) {
                     return h-5;
               })
               .text(function(d) {
                     return d;
               })



</script>
</body>
</html>

效果图

在这里插入图片描述
其中还有些小互动——当鼠标移到对应的框上时,会出现颜色上的强调。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值