D3 - 绘制条形统计图

D3绘制简单条形统计图

效果图:
在这里插入图片描述
(图中箭头出表示鼠标位置,交互显示位置处的矩形)

完整代码:

<body>
<script src="https://d3js.org/d3.v5.js"></script>
<script>

    let w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    let h = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;
    w *= 0.98;
    h *= 0.9;

    let svg = d3.select("body")
        .append("svg")
        .attr("width", w)
        .attr("height", h);

    let a = new Array(10);
    for (let i = 0; i < 10; ++i)
        a[i] = Math.random() * 200;

    svg.selectAll("rect")
        .data(a)
        .enter()
        .append("rect")
        .attr("x", function (d, i) {
            return i * (w / a.length);
        })
        .attr("y", function (d) {
            return h - d;
        })
        .attr("width", (w / a.length - 10))
        .attr("height", function (d) {
            return d;
        })
        .attr("fill", function (d, i) {
            return 'rgba(0,' + (200 - d) + ',0,0.8)';
        })
        .on("mouseover", function (d) {
            d3.select(this)
                .attr("fill", 'blue');
        })
        .on("mouseout", function (d) {
            d3.select(this)
                .attr("fill", 'rgba(0,' + (200 - d) + ',0,0.8)');
        });

</script>
</body>

代码解释:

rect元素:d3在svg中绘制矩形的元素

.attr() 设置属性

    .attr("x", function (d, i) {
        return i * (w / a.length);
    })
    .attr("y", function (d) {
        return h - d;
    })

分别设置每个矩形左上点坐标(x,y)的x值和y值。

要注意选中的画布的左上角坐标是(0,0),为了使矩形画到画面的下方,y值不能直接引用d的值。

    .attr("width", (w / a.length - 10))
    .attr("height", function (d) {
        return d;
    })

设置每个矩形的宽和长。

    .attr("fill", function (d, i) {
        return 'rgba(0,' + (200 - d) + ',0,0.8)';
    })

填充每个矩形的颜色。

rgba即是 Red + Green + Blue + Alpha。红色值 + 绿色值 + 蓝色值 + 透明度。前三项的值取值范围是0 ~ 255(十六进制0xFF)。透明度取值0 ~ 1。

注意出现变量时的格式。

.on("mouseover", function (d) {
    d3.select(this)
        .attr("fill", 'blue');
})
.on("mouseout", function (d) {
    d3.select(this)
        .attr("fill", 'rgba(0,' + (200 - d) + ',0,0.8)');
})

交互部分,设置该矩形在移入鼠标时的行为和移出后的行为。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值