d3チャートを新しいデータで更新する

チャーリー

棒グラフを新しいデータで更新したいので、この質問を調べました。d3.js棒グラフを新しいデータで更新する方法しかし、それは私には機能しません。おそらく、コード内のexit()。remove()関数をどこに配置するかわからないためです。この線を入れてみました

svg.selectAll("rect").exit().remove();

バーの作成セクションの下にありますが、すべてのラベルが削除されるだけです。次に、ラベルの作成部分の直後に配置すると、グラフが完全に削除されます。更新ボタンでチャートを新しいデータに変更するにはどうすればよいですか?

    function draw(data) {
        //Width and height
        var w = 250;
        var h = 250;

        var xScale = d3.scale.ordinal()
                        .domain(d3.range(data.length))
                        .rangeRoundBands([0, w], 0.05);

        var yScale = d3.scale.linear()
                        .domain([0, d3.max(data)])
                        .range([0, h]);

        //Create SVG element
        var svg = d3.select("#chart")
                    .append("svg")
                    .attr("width", w)
                    .attr("height", h);

        //Create bars
        svg.selectAll("rect")
           .data(data)
           .enter()
           .append("rect")
           .attr("x", function(d, i) {
                return xScale(i);
           })
           .attr("y", function(d) {
                return h - yScale(d);
           })
           .attr("width", xScale.rangeBand())
           .attr("height", function(d) {
                return yScale(d);
           })
           .attr("fill", "steelblue");

        //Create labels
        svg.selectAll("text")
           .data(data)
           .enter()
           .append("text")
           .text(function(d) {
                return d;
           })
           .attr("text-anchor", "middle")
           .attr("x", function(d, i) {
                return xScale(i) + xScale.rangeBand() / 2;
           })
           .attr("y", function(d) {
                return h - yScale(d) + 14;
           })
           .attr("font-family", "sans-serif")
           .attr("font-size", "11px")
           .attr("fill", "white");

        };

        function update() {
            var data = [ 25, 22, 18, 15, 13 ];
            draw(data);
        }

        var data = [ 21, 3, 5, 21, 15 ];

        window.onload = draw(data);
ミハイル・シャブリコフ

d3v3では(コードからわかるように、このバージョンを使用しています)、次のようにグラフを更新する必要があります。

update機能のための新しいドメインを設定しますyScale

function update(newData) {
  yScale.domain([0, d3.max(newData)]);

その後、で新しい選択を適用しselectAll("rect").data(newData)、選択をrects変数に格納適切な属性に新しい値を設定します(アニメーション効果が必要ない場合は、削除します.transition() .duration(300))。

var rects = d3.select("#chart svg")
  .selectAll("rect")
  .data(newData);

// enter selection
rects
  .enter().append("rect");

// update selection
rects
  .transition()
  .duration(300)
  .attr("y", function(d) {
    return h - yScale(d);
  })
  .attr("height", function(d) {
    return yScale(d);
  })

exitメソッドを使用して選択を終了します。

rects
  .exit().remove();

で同じようにしtextます。私はあなたのコードを書き直します、以下の隠されたスニペットの例を見てください:

var myData = [21, 3, 5, 21, 15];
//Width and height
var w = 250;
var h = 250;
var yScale = null;

function draw(initialData) {
  var xScale = d3.scale.ordinal()
    .domain(d3.range(initialData.length))
    .rangeRoundBands([0, w], 0.05);

  yScale = d3.scale.linear()
    .domain([0, d3.max(initialData)])
    .range([0, h]);

  //Create SVG element
  var svg = d3.select("#chart")
    .append("svg")
    .attr("width", w)
    .attr("height", h);

  svg.selectAll("rect")
    .data(initialData)
    .enter()
    .append("rect")
    .attr("x", function(d, i) {
      return xScale(i);
    })
    .attr("y", function(d) {
      return h - yScale(d);
    })
    .attr("width", xScale.rangeBand())
    .attr("height", function(d) {
      return yScale(d);
    })
    .attr("fill", "steelblue");

  svg.selectAll("text")
    .data(initialData)
    .enter()
    .append("text")
    .text(function(d) {
      return d;
    })
    .attr("text-anchor", "middle")
    .attr("x", function(d, i) {
      return xScale(i) + xScale.rangeBand() / 2;
    })
    .attr("y", function(d) {
      return h - yScale(d) + 14;
    })
    .attr("font-family", "sans-serif")
    .attr("font-size", "11px")
    .attr("fill", "white");
}


function update(newData) {
  yScale.domain([0, d3.max(newData)]);

  var rects = d3.select("#chart svg")
    .selectAll("rect")
    .data(newData);

  // enter selection
  rects
    .enter().append("rect");

  // update selection
  rects
    .transition()
    .duration(300)
    .attr("y", function(d) {
      return h - yScale(d);
    })
    .attr("height", function(d) {
      return yScale(d);
    })

  // exit selection
  rects
    .exit().remove();

  var texts = d3.select("#chart svg")
    .selectAll("text")
    .data(newData);

  // enter selection
  texts
    .enter().append("rect");

  // update selection
  texts
    .transition()
    .duration(300)
    .attr("y", function(d) {
      return h - yScale(d) + 14;
    })
    .text(function(d) {
      return d;
    })

  // exit selection
  texts
    .exit().remove();
}

window.onload = draw(myData);

setInterval(function() {
  var data = d3.range(5).map(function() {
    return parseInt(Math.random() * 20 + 1);
  });

  update(data);
}, 3000)
<div id="chart"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.js"></script>

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

新しいデータセットでハイチャートを更新する

分類Dev

新しいデータでチャートを絶えず更新する方法は?

分類Dev

onchangeスライダーイベントでd3チャートのデータを更新するにはどうすればよいですか?

分類Dev

d3:DOMを更新しないデータセットを更新する

分類Dev

可変長の新しいデータでd3棒グラフラベルを更新する

分類Dev

古いチャートの上に新しいD3チャートを追加します

分類Dev

-AJAXを使用してd3チャートを更新するための最良の方法は何ですか

分類Dev

-AJAXを使用してd3チャートを更新するための最良の方法は何ですか

分類Dev

タプルしかない場合にJSONからD3チャートにデータをロードする方法

分類Dev

d3.jsチャートを更新する前にデータをきれいに削除する方法は?

分類Dev

d3散布図を更新すると、新しいデータポイントが正しい位置にありません

分類Dev

djangoでd3チャートを表示する

分類Dev

d3チャートが正しく更新されない

分類Dev

D3 / dagre-D3 / javascriptでデシジョンツリー/フローチャートを作成するにはどうすればよいですか?

分類Dev

ストアドプロシージャ=>新しいデータでテーブルを更新する

分類Dev

新しいデータ JavaScript を使用した Onclick 更新バー チャート (モリス チャート)

分類Dev

mpAndroidチャートの新しい値で棒グラフを更新する方法

分類Dev

D3v4力図を新しいデータでスムーズに更新する方法

分類Dev

新しい観測データでPyMC3のモデルを更新する

分類Dev

d3.js:新しいデータセットでグラフを更新します

分類Dev

ハイチャート-新しいデータを表示するには、ページを更新する必要があります

分類Dev

d3チャートを正しくズームする方法は?

分類Dev

データ駆動型d3チャートからデータを含む2番目のツールチップを追加する方法

分類Dev

リクエスト本文を使用して、Spring mvc から d3 チャートに JSON データを入力する

分類Dev

htmlフォームのデータを使用してd3.jsチャートを再描画するにはどうすればよいですか?

分類Dev

角度のあるd3チャート間でX軸を共有する

分類Dev

D3を使用してバブルチャートの凡例を作成する

分類Dev

d3チャートをドラッグしている間、最後のY軸のみが更新されます

分類Dev

D3バージョン4でデータを更新する方法は?

Related 関連記事

  1. 1

    新しいデータセットでハイチャートを更新する

  2. 2

    新しいデータでチャートを絶えず更新する方法は?

  3. 3

    onchangeスライダーイベントでd3チャートのデータを更新するにはどうすればよいですか?

  4. 4

    d3:DOMを更新しないデータセットを更新する

  5. 5

    可変長の新しいデータでd3棒グラフラベルを更新する

  6. 6

    古いチャートの上に新しいD3チャートを追加します

  7. 7

    -AJAXを使用してd3チャートを更新するための最良の方法は何ですか

  8. 8

    -AJAXを使用してd3チャートを更新するための最良の方法は何ですか

  9. 9

    タプルしかない場合にJSONからD3チャートにデータをロードする方法

  10. 10

    d3.jsチャートを更新する前にデータをきれいに削除する方法は?

  11. 11

    d3散布図を更新すると、新しいデータポイントが正しい位置にありません

  12. 12

    djangoでd3チャートを表示する

  13. 13

    d3チャートが正しく更新されない

  14. 14

    D3 / dagre-D3 / javascriptでデシジョンツリー/フローチャートを作成するにはどうすればよいですか?

  15. 15

    ストアドプロシージャ=>新しいデータでテーブルを更新する

  16. 16

    新しいデータ JavaScript を使用した Onclick 更新バー チャート (モリス チャート)

  17. 17

    mpAndroidチャートの新しい値で棒グラフを更新する方法

  18. 18

    D3v4力図を新しいデータでスムーズに更新する方法

  19. 19

    新しい観測データでPyMC3のモデルを更新する

  20. 20

    d3.js:新しいデータセットでグラフを更新します

  21. 21

    ハイチャート-新しいデータを表示するには、ページを更新する必要があります

  22. 22

    d3チャートを正しくズームする方法は?

  23. 23

    データ駆動型d3チャートからデータを含む2番目のツールチップを追加する方法

  24. 24

    リクエスト本文を使用して、Spring mvc から d3 チャートに JSON データを入力する

  25. 25

    htmlフォームのデータを使用してd3.jsチャートを再描画するにはどうすればよいですか?

  26. 26

    角度のあるd3チャート間でX軸を共有する

  27. 27

    D3を使用してバブルチャートの凡例を作成する

  28. 28

    d3チャートをドラッグしている間、最後のY軸のみが更新されます

  29. 29

    D3バージョン4でデータを更新する方法は?

ホットタグ

アーカイブ