d3.jsv3からv4にアップグレードするときにdXとdYの値が未定義

ジェブザキ

ズーム可能なツリーマップをv3からv4に移動しようとしていますが、最後に必要なのは、長方形を正しく描画するためのdx値とdy値を取得できないことです。私のレイアウト関数では、子dxとdyが未定義であるため、別の未定義になります。それで、それが最終的にrectに達するとき、それはそこで私には役に立たない。

どこが間違っているのですか?

提案されたブロックビルダーリンク付き。

http://blockbuilder.org/jebzaki/b2252c00d51ffaca0c7408b394b168a5

    var margin = {top: 25, right: 0, bottom: 0, left: 0},
    width = 960,
    height = 640 - margin.top - margin.bottom,
    formatNumber = d3.format(",d"),
    transitioning;

    var x = d3.scaleLinear()
        .domain([0, width])
        .range([0, width]);

    var y = d3.scaleLinear()
        .domain([0, height])
        .range([0, height]);

    var color = d3.scaleThreshold()
    .domain([-5,-0,0,5])
    .range(["#BB0000","#600A0A","#404040","#064D15","#1CA41C"]);

    var svg = d3.select("#heatmap").append("svg")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.bottom + margin.top)
        .style("margin-left", -margin.left + "px")
        .style("margin.right", -margin.right + "px")
      .append("g")
        .attr("transform", "translate(" + margin.left + "," + margin.top + ")")
        .style("shape-rendering", "crispEdges");

    var treemap = d3.treemap()
        .tile(d3.treemapSquarify.ratio(height / width * 0.5 * (1 + Math.sqrt(5))))
    .size([width, height])
    .round(false)
    .paddingInner(1);

    var grandparent = svg.append("g")
        .attr("class", "grandparent");

    grandparent.append("rect")
        .attr("y", -margin.top)
        .attr("width", width)
        .attr("height", margin.top);

    grandparent.append("text")
        .attr("x", 6)
        .attr("y", 6 - margin.top)
        .attr("dy", ".75em");

d3.json("new-data.json", function(error, data) {
  if (error) throw error;

  var root = d3.hierarchy(data)
      .eachBefore(function(d) { d.id = (d.parent ? d.parent.id + "." : "") + d.data.name; })
      .sum((d) => {d.value})
      .sort(function(a, b) { return b.height - a.height || b.value - a.value; });

      initialize(root);
      accumulate(root);
      layout(root);
      treemap(root);
      display(root);

  function initialize(root) {
    root.x = root.y = 0;
    root.dx = width;
    root.dy = height;
    root.depth = 0;
  }

  function accumulate(d) {
    return (d._children = d.children)
        ? d.value = d.children.reduce(function(p, v) { return p + accumulate(v); }, 0)
        : d.value;
  }

    function layout(d) {
      if (d._children) {
        d._children.forEach(function(c) {
          c.x = d.x + c.x * d.dx;
          c.y = d.y + c.y * d.dy;
          c.dx *= d.dx;
          c.dy *= d.dy;
          c.parent = d;
          layout(c);
        });
      }
    }

  function display(d) {
    grandparent
      .datum(d.parent)
        .on("click", transition)
      .select("text")
        .text(name(d));

    grandparent
      .datum(d.parent)
      .select("rect")
      .attr("fill", function(){ return color(d.data.change)})

    var g1 = svg.insert("g", ".grandparent")
      .datum(d)
      .attr("class", "depth");

    var g = g1.selectAll("g")
      .data(d._children)
      .enter().append("g");

    g.filter(function(d) { return d._children; })
      .classed("children", true)
      .on("click", transition);

    g.selectAll(".child")
      .data(function(d) { return d._children || [d]; })
      .enter().append("rect")
      .attr("class", "child")
      .call(rect);

    d3.select("#heatmap").select("#tooltip").remove();
    var div = d3.select("#heatmap").append("div")
      .attr("id", "tooltip")
      .style("opacity", 0);


    g.append("svg:a")
      .attr("xlink:href", function(d) {
          if(!d._children){
              var url = "#";
              return url; 
          }
      })
      .append("rect")
        .attr("class", "parent")
        .call(rect)
        .on("mouseover", function(d) {
               if (d.data.name !== "Results") {
                   d3.select("#tooltip").transition()
                      .duration(200)
                      .style("opacity", 1);
                   d3.select("#tooltip").html("<h3>"+d.data.name+"</h3><table>"+
                            "<tr><td>"+d.data.value+"</td><td> ("+d.data.change+"%)</td></tr>"+
                            "</table>")
                      .style("left", (d3.event.pageX-document.getElementById("heatmap").offsetLeft + 20) + "px")
                      .style("top", (d3.event.pageY-document.getElementById("heatmap").offsetTop - 60) + "px");
               }
        })
        .on("mouseout", function(d) {
          d3.select("#tooltip").transition()
            .duration(500)
            .style("opacity", 0);
        })

    g.append("text")
      .attr("dy", ".75em")
      .text(function(d) { return d.data.name; })
      .call(text);

    function transition(d) {
      if (transitioning || !d) return;
      transitioning = true;

      var g2 = display(d),
        t1 = g1.transition().duration(750),
        t2 = g2.transition().duration(750);

      x.domain([d.x0, d.x0 + d.x1]);
      y.domain([d.y0, d.y0 + d.y1]);

      svg.style("shape-rendering", null);

      svg.selectAll(".depth").sort(function(a, b) { return a.depth - b.depth; });

      g2.selectAll("text").style("fill-opacity", 0);

      t1.selectAll("text").call(text).style("fill-opacity", 0);
      t2.selectAll("text").call(text).style("fill-opacity", 1);
      t1.selectAll("rect").call(rect);
      t2.selectAll("rect").call(rect);

      t1.remove().each("end", function() {
        svg.style("shape-rendering", "crispEdges");
        transitioning = false;
      });
    }

    return g;
  }

  function text(text) {
    text.attr("x", function(d) { return x(d.x0) + (x(d.x0 + d.dx) - x(d.x0))/2; })
      .attr("y", function(d) { return y(d.y0) + (y(d.y0 + d.dy) - y(d.y0))/2; })
      .attr("dy", 0)
      .attr("font-size", function(d) { var w=x(d.x0 + d.dx) - x(d.x0),
                                           h=y(d.y0 + d.dy) - y(d.y0),
                                           t=(d.data.name).length/1.3;
                                       var tf=Math.min(Math.floor(w/t),h/3);
                                       return (tf>=5)?Math.min(tf, 30):0; })
      .attr("fill", "white")
      .attr("text-anchor", "middle");
  }

  function rect(rect) {
    rect.attr("x", function(d) { return x(d.x0); })
      .attr("y", function(d) { return y(d.y0); })
      .attr("width", function(d) { return x(d.x0 + d.dx) - x(d.x0); })
      .attr("height", function(d) { return y(d.y0 + d.dy) - y(d.y0); })
      .attr("fill", function(d){return color(parseFloat(d.data.change));});
  }

  function name(d) {
    return d.parent
      ? "Sector : "+d.data.name+" (Back to Overall Market)"
      : "Overall "+d.data.name;
  }
});
リー

これがあなたが実際に求めているものに対する答えであるかどうかわからないので、これをコメントとして投稿したでしょう(「ズーム可能なツリーマップを移動する」は私を混乱させましたが、これがタイプミスかどうかはわかりませんか?)、しかし私はそうするための担当者が不足しています。

ここにフィドルがあります:http//jsfiddle.net/b238u0hy/5/

このbl.ockをフォローしている必要があることに気づきました:https://bl.ocks.org/me1er/c64479f1ac8a5f993027f40a36c35dd9

次に、コードを元のコードと比較しました。長方形を作成できなかった理由は、d3.hierarchyによって生成された「x1」および「y1」の値を使用する代わりに「dx」、「dy」を設定したためです。 。

ここでのdy / dx問題の例:

c.x = d.x + c.x * d.dx;
c.y = d.y + c.y * d.dy;
c.dx *= d.dx;
c.dy *= d.dy;
c.parent = d;
layout(c);

元のコードが少し読みやすいと思ったので、元のコードを自分のコードに合うように変更しました(ただし、仕事をしているので、いくつかのことに怠惰でした):

  • カラー機能が機能していなかったのでコメントアウトしました。
  • データを変数としてロードし、d3.json()をコメントアウトしました。
  • 元のコードからshortName、text2のものを削除する必要はありませんでした。値の名前を変更して、実行されるようにしました。

編集:ツールチップを元に戻すのを忘れました。ツールチップのフィドルは次のとおりです。http //jsfiddle.net/74t8b9sp/(いくつかの小さな変更、ツールチップがマウスに追従するように「mousemove」に変更し、値を丸めました表示の目的で、内部rectを削除し、<a>最初に追加しました)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

D3をv4からv6にアップグレードした後、軸がグラフの中心に移動します

分類Dev

d3 v4でラベル付きのノードをドラッグすると、レイアウトの不具合が発生します

分類Dev

Неожиданное поведение d3 rangeRound

分類Dev

D3 SVGの「パス」要素をドラッグすると、dxが定義されたときに壊れます、非表示のデータ?

分類Dev

d3 v4に移行すると、ドラッグ時に重複が発生します

分類Dev

Typescriptとd3

分類Dev

v3からv4への移行-ツールチップがd3に表示されない

分類Dev

Wrapping Text in D3

分類Dev

Responsive d3 brushing

分類Dev

D3 tree with boxes

分類Dev

d3 squares in a grid

分類Dev

Irregular slider in D3

分類Dev

D3 Bounded Panning

分類Dev

D3 v4 .rangeBand()と同等

分類Dev

d3でv4からv3に変換する方法

分類Dev

D3階層レイアウトで座標dxとdyの名前を変更する

分類Dev

v3からv5にアップグレードするときにコードが機能しない

分類Dev

D3 v4のtree.links()

分類Dev

d3 v4 の tree.nodeSize

分類Dev

selection.append / insert:d3がv3からv4に変更されると、チェックボックスがテキストフィールドに変わります

分類Dev

D3 4.0 rangeRoundBandsと同等?

分類Dev

D3 .append()と変数

分類Dev

dxとdyが0の場合でも、d3ドラッグはイベントを発生させます

分類Dev

D3サークルパックをロードするときの未定義の関数

分類Dev

Bootstrap3から4にアップグレードすると間隔が消える

分類Dev

d3 (v4): 要素に勢いのある外観を与えますか?

分類Dev

JavaScript D3:ズーム

分類Dev

D3キー機能

分類Dev

D3:要素の削除

Related 関連記事

  1. 1

    D3をv4からv6にアップグレードした後、軸がグラフの中心に移動します

  2. 2

    d3 v4でラベル付きのノードをドラッグすると、レイアウトの不具合が発生します

  3. 3

    Неожиданное поведение d3 rangeRound

  4. 4

    D3 SVGの「パス」要素をドラッグすると、dxが定義されたときに壊れます、非表示のデータ?

  5. 5

    d3 v4に移行すると、ドラッグ時に重複が発生します

  6. 6

    Typescriptとd3

  7. 7

    v3からv4への移行-ツールチップがd3に表示されない

  8. 8

    Wrapping Text in D3

  9. 9

    Responsive d3 brushing

  10. 10

    D3 tree with boxes

  11. 11

    d3 squares in a grid

  12. 12

    Irregular slider in D3

  13. 13

    D3 Bounded Panning

  14. 14

    D3 v4 .rangeBand()と同等

  15. 15

    d3でv4からv3に変換する方法

  16. 16

    D3階層レイアウトで座標dxとdyの名前を変更する

  17. 17

    v3からv5にアップグレードするときにコードが機能しない

  18. 18

    D3 v4のtree.links()

  19. 19

    d3 v4 の tree.nodeSize

  20. 20

    selection.append / insert:d3がv3からv4に変更されると、チェックボックスがテキストフィールドに変わります

  21. 21

    D3 4.0 rangeRoundBandsと同等?

  22. 22

    D3 .append()と変数

  23. 23

    dxとdyが0の場合でも、d3ドラッグはイベントを発生させます

  24. 24

    D3サークルパックをロードするときの未定義の関数

  25. 25

    Bootstrap3から4にアップグレードすると間隔が消える

  26. 26

    d3 (v4): 要素に勢いのある外観を与えますか?

  27. 27

    JavaScript D3:ズーム

  28. 28

    D3キー機能

  29. 29

    D3:要素の削除

ホットタグ

アーカイブ