简体   繁体   English

附加以在D3中创建正方形网格时为x和y属性创建循环

[英]Creating loops for x and y attribute when appending to create a grid of squares in D3

I'm making a grid of squares, where each square is linked to a datapoint. 我正在制作一个正方形的网格,其中每个正方形都链接到一个数据点。

I'm trying increment the y attribute value and reset the x attribute value after every 5 squares in a row. 我正在尝试增加y属性值,并在连续每5个平方之后重置x属性值。 How do you create a loop for this? 您如何为此创建循环?

Ideally it should allow for as many data points to be added so that after every 5 squares in a row, a new row is created. 理想情况下,它应允许添加尽可能多的数据点,以便在连续每5个正方形之后创建一个新行。

Below is the setup: 以下是设置:

 var svg = d3.select('svg'); var dataSet = [10, 20, 30, 40, 10, 20, 30, 40]; var rectangle = svg.selectAll('rect') .data(dataSet) .enter() .append('rect') .attr({ x:function(d, i){ if(i<5){ return i*60 + 5 }else{ } }, y:function(d, i){ d = 80 if(i<5){ return d }else{ return d+40 }}, width: 50, height: 50, fill: 'red' }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.10/d3.min.js"></script> <svg width="100%"></svg> 

JS fiddle: http://jsfiddle.net/jlw01/9yak00f6/ JS小提琴: http//jsfiddle.net/jlw01/9yak00f6/

If I understand you correctly, you need something like the code below: 如果我对您的理解正确,则需要类似下面的代码:

 var svg = d3.select('svg'); var dataSet = [10, 20, 30, 40, 10, 20, 30, 40, 10, 20, 30, 40, 10]; var rectangle = svg .attr('width', window.innerWidth) .attr('height', window.innerHeight) .selectAll('rect') .data(dataSet) .enter() .append('rect') .attr({ x:function(d, i){ return i % 5 * 60 // use modulo operator to set x coord }, y:function(d, i){ return Math.floor(i / 5) * 60 }, width: 50, height: 50, fill: 'red' }); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.10/d3.min.js"></script> <svg width="100%"></svg> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM