2017-05-01 16 views
2

d3jsで散布図を作成するための乱数を生成しようとしています。私は次のようにそれをやっている:乱数生成とJavaScriptのネスト配列

//declare an array of arrays 
 
var dataset = [ 
 
    [] 
 
]; 
 
var inner = []; 
 

 
/* 
 
    set the svg width and height 
 
*/ 
 
var svgWidth = 500; 
 
var svgHeight = 100; 
 
var xCoord = 0; 
 
var yCoord = 0; 
 

 
for (var i = 0; i < 20; i++) { 
 
    do { 
 
    xCoord = Math.floor(Math.random() * svgWidth); 
 
    yCoord = Math.floor(Math.random() * svgHeight); 
 
    } while (xCoord <= 0 | yCoord <= 0); 
 

 

 
    if (xCoord > 0 && yCoord > 0) { 
 
    inner.push(xCoord); 
 
    inner.push(yCoord); 
 

 
    dataset.push(inner); 
 
    } 
 

 
    inner = []; 
 
} 
 

 
var svg = d3.select("body") 
 
    .append("svg") 
 
    .attr("width", svgWidth) 
 
    .attr("height", svgHeight); 
 

 

 
svg.selectAll("circle") 
 
    .data(dataset) 
 
    .enter() 
 
    .append("circle") 
 
    .attr("cx", function(d) { 
 
    return d[0]; 
 
    }) 
 
    .attr("cy", function(d) { 
 
    return d[1]; 
 
    }) 
 
    .attr("r", 5);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

外側の配列はわずか20の要素を含むべきである、私はそれだけ半径の値を持つ最初の要素との代わりに21個の要素を作成していることが判明しました円の中心の座標値はありません。いくつかのヒントは、この問題を理解することが大変です。

+0

'しばらく(のxCoord <= 0 | YCOORD <= 0)' – epascarello

答えて

2

これを試してみてください:

//declare an array of arrays 
var dataset = []; 
var inner = []; 

/* 
    set the svg width and height 
*/ 
var svgWidth = 500; 
var svgHeight = 100; 
var xCoord = 0; 
var yCoord = 0; 

for (var i = 0; i < 20; i++) { 
    do { 
    xCoord = Math.floor(Math.random() * svgWidth); 
    yCoord = Math.floor(Math.random() * svgHeight); 
    } while (xCoord <= 0 | yCoord <= 0); 


    if (xCoord > 0 && yCoord > 0) { 
    inner.push(xCoord); 
    inner.push(yCoord); 

    dataset.push(inner); 
    } 

    inner = []; 
} 

var svg = d3.select("body") 
    .append("svg") 
    .attr("width", svgWidth) 
    .attr("height", svgHeight); 


svg.selectAll("circle") 
    .data(dataset) 
    .enter() 
    .append("circle") 
    .attr("cx", function(d) { 
    return d[0]; 
    }) 
    .attr("cy", function(d) { 
    return d[1]; 
    }) 
    .attr("r", 5); 
+1

少し混乱しかし、どのようにしてJavaScriptでネストされた配列を宣言します。本の「インタラクティブなWebの視覚化」では、ネストされたハードブラケットは配列内の配列を示しています – sajis997

3

内部配列は必要ありませんが、実際は問題です。

var dataset = [ 
    [] 
]; 

ただ削除してください。

var dataset = [];