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)');
})

交互部分,設置該矩形在移入鼠標時的行爲和移出後的行爲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章