初识d3.js(2) ——简单的条形图

2 篇文章 0 订阅
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="d3/d3.js"></script>
</head>
<body>
    <div id="box"></div>
</body>
</html>
<script>
    let arr = [12,22,8,14,25,6,17];
    let bar_h = 50;
    let bar_m = 10;
    let svg_w = 600;
    let svg_h = (bar_h + bar_m) * arr.length;

    //scale缩放功能  linear线型缩放  domain设置初始比率值  range()缩放后的比率
    //把初始数组中的比率根据svg整个的画布宽度进行换算  返回一个方法
    let scale = d3.scale.linear().domain([0,d3.max(arr)]).range([0,svg_w]);

    //向box添加一个svg元素并设置宽高,attr给元素添加属性
    let svg = d3.select('#box').append('svg').attr({'height':svg_h,'width':svg_w});

    //d3的方法中如果在前边已经接收过数据,后边的方法在回调函数中都可以去使用这些数据,
    //函数中的第一个参数是数据,第二个参数是下标
    //给svg画板画板中添加g元素,平移g元素
    let bar = svg.selectAll('g').data(arr).enter().append('g').style(
        'transform',function (v,i) {
            //console.log(v,i);
            //return 'translate(0,' + (bar_h + bar_m) * i + 'px)'
            return `translate(0,${(bar_h + bar_m) * i}px)`
        }
    );

    //添加矩形
    bar.append('rect')
        .attr({
            'width':v => scale(v),    //rect的宽度应该是使用比率换算过之后的值
            'height':bar_h
        }).style('fill','#48e');

    //添加文字
    bar.append('text').text( v => v )
        .attr({
            'x':v => scale(v),
            'y':bar_h / 2,
            'dx':-10,
            'dy':5,
            'text-anchor':'end'
        })
</script>

效果如图:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值