2016-08-25 11 views
0

以下のコードは、コンテナの左上隅に位置する円を生成します。私はそれが配列の値に対応する位置にあることを望みます。 DOMここサークルオブジェクトがSVGコンテナの左上隅に表示されるのはなぜですか?

<script> 
    var data = [ 30, 40, 50 ] 

    var svg = d3.select("body").append("svg") 
      .attr("width", 800) 
      .attr("height", 500) 
      .style("border", "3px solid black"); 

    var circles = svg.selectAll("g") 
        .data(data) 
        .enter() 
        .append("g"); 

    circles.append("circle") 
      .attr("cX", function(d) { return d; }) 
      .attr("cY", function(d) { return d; }) 
      .attr("r", 50) 
      .style("fill", "steelblue") 

    circles.append("text") 
      .text(function(d) { return d; }) 

</script> 

です: ここでは、コードです

enter image description here

そして、これが結果です:

enter image description here

+1

はREPROできません:https://でjsfiddle .net/fLa5tLmo /。 –

+0

あなたは冗談か?私が単に過去のコードをコピーすれば、それは受け入れられます。しかし、写真を撮って貼り付けると受け入れられません。それはばかげている。これは2時間それについた後正当な質問でした。 2日前に初めてD3を拾った後、すべてのことを知らないのは私には間違いありません。 – MLhacker

+2

svg要素の原点(0,0)が左上にあるためです。 –

答えて

3

P SVGには存在しないcXcYの使用があります。属性はcxcyで、小文字です。

ので、この:

circles.append("circle") 
     .attr("cx", function(d) { return d; }) 
     .attr("cy", function(d) { return d; }) 
     .attr("r", 50) 
     .style("fill", "steelblue") 

あなたは左上隅(SVGの原点)でのSVG要素を取得するたびに、NaNや他の容疑者:

circles.append("circle") 
     .attr("cX", function(d) { return d; }) 
     .attr("cY", function(d) { return d; }) 
     .attr("r", 50) 
     .style("fill", "steelblue") 

は、このあるべき(xyx1y1x2y2cxcyなど)の設定に問題があります。

これだけcxcyを変更する(そしてもう少し円を広めるためにデータを変更する)、あなたのコードです:

var data = [ 100, 200, 300 ] 
 

 
    var svg = d3.select("body").append("svg") 
 
      .attr("width", 400) 
 
      .attr("height", 400) 
 
      .style("border", "3px solid black"); 
 

 
    var circles = svg.selectAll("g") 
 
        .data(data) 
 
        .enter() 
 
        .append("g"); 
 

 
    circles.append("circle") 
 
      .attr("cx", function(d) { return d; }) 
 
      .attr("cy", function(d) { return d; }) 
 
      .attr("r", 50) 
 
      .style("fill", "steelblue") 
 

 
    circles.append("text") 
 
      .text(function(d) { return d; })
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

関連する問題