d3.js 如何在方格周围添加填充?

eh57zj3b  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(171)

我正在尝试使用D3创建一个正方形网格。我的代码可以工作,但是我想在每个正方形周围添加一些填充,这样网格看起来就不那么“紧凑”了。
下面是我的代码:

class Matrix {

    constructor(parentElement, data1, data2, data3) {
        this.parentElement = parentElement;
        this.data1 = data1;
        this.data2 = data2;
        this.data3 = data3;

        this.cellHeight = 40;
        this.cellWidth = 40;

        this.initializeVisual()

    }

    initializeVisual() {
        let vis = this;

        vis.margin = {top: 20, right: 20, bottom: 20, left: 40};
        vis.width = document.getElementById(vis.parentElement).getBoundingClientRect().width - vis.margin.left - vis.margin.right;

        vis.height = 800 - vis.margin.top - vis.margin.bottom;

        // init drawing area
        vis.svg = d3.select('#' + vis.parentElement).append('svg')
            .attr('width', vis.width + vis.margin.left + vis.margin.right)
            .attr('height', vis.height + vis.margin.top + vis.margin.bottom)
            .append('g')
            .attr('transform', `translate (${vis.margin.left}, ${vis.margin.top})`);

        // Draws the initial grid

        let squaresPerRow = 16

        let scale = d3.scaleLinear()
            .domain([0, squaresPerRow -1])
            .range([0, this.cellWidth * squaresPerRow])

        vis.squares = vis.svg.selectAll('.squares')
            .data(d3.range(256))
            .enter()
            .append('rect')
            .attr('x', (d, i) => {
                let n = i % squaresPerRow
                return scale(n)
            })
            .attr('y', (d, i) => {
                let n = Math.floor(i / 16)
                return scale(n)
            })
            .attr('width', this.cellWidth)
            .attr('height', this.cellHeight)
            .attr('fill', 'lightgrey');

}

生成的网格如下所示:

如何添加填充?
谢谢你!

6yjfywim

6yjfywim1#

就我个人而言,我会将线性标度改为点标度,但这里有一个使用大部分代码的解决方案。
首先,去掉域中的负1,这是一种创建填充的繁琐方法:

.domain([0, squaresPerRow -1])

然后,在设置填充(此处命名为padding)后,可以将xy的位置平移一半,并将矩形的宽度和高度减去该填充。
下面是一个演示,针对不同的空间更改变量padding
第一个

相关问题