d3jsグループ化された棒グラフの切り替え凡例

旧郡

グループ化された棒グラフをレンダリングするためにd3.jsを使用しており、凡例をクリックしたときに棒の遷移をアニメーション化することを検討しています-(異なるシリーズを表示/非表示)。

これから。

ここに画像の説明を入力してください これに

ここに画像の説明を入力してください

おそらくまたスケールを変更する

http://jsfiddle.net/0ht35rpb/202/

legend.append("rect")
  .attr("x", width - 18)
  .attr("width", 18)
  .attr("height", 18)
  .style("fill", color)
  .on("click", function(d) {
    console.log("d", d);
  });

いくつかのバー遷移コード

  bars.transition()
      .attr("id", function(d){ return 'tag'+d.state.replace(/\s|\(|\)|\'|\,+/g, '');})
      .attr("x", function(d) { return x(d.state); })
      .attr("width", x.rangeBand())
      .attr("y", function(d) {return y(d.value); })
      .attr("height", function(d) { return height - y(d.value); });

    bars.exit().remove();

その他のグループ化された棒グラフの参照。

https://bl.ocks.org/mbostock/3887051

https://plnkr.co/edit/JUaLXmeCvHh0zUmrKClQ?p=preview

http://jsfiddle.net/ramseyfeng/8790t2vk/

アンドリューリード

これを実行する方法はいくつかあります。開始/更新/終了のサイクルは簡単に使用できますが、ネストされた要素とチャートの状態間のスムーズな遷移を保証するためにキーを設定する必要があるため、サイクルの通常の使用と比較すると少し複雑です。

この状況では、配列を使用して、フィルターで除外するバーを保持し、それらのバーを非表示にし、それらのキーの値を使用しないようにスケールを更新し、残りのバーを更新する方が簡単な場合があります。

これには、凡例アイテムごとにonclickイベントが必要です。クリックすると、クリックした関数で、フィルターで除外された(filtered)アイテムの配列を次のように管理します。ここdで、は凡例の長方形に関連付けられたデータです。

// add the clicked key if not included:
if (filtered.indexOf(d) == -1) {
 filtered.push(d); 
  // if all bars are un-checked, reset:
  if(filtered.length == keys.length) filtered = [];
}
// otherwise remove it:
else {
  filtered.splice(filtered.indexOf(d), 1);
}

次に、スケールを更新できます(スケールのドメインx1、つまりnewKeys変数のフィルター処理された配列にないすべてのキーが必要です)。

var newKeys = [];
    keys.forEach(function(d) {
      if (filtered.indexOf(d) == -1 ) {
        newKeys.push(d);
      }
    })
    x1.domain(newKeys).rangeRound([0, x0.bandwidth()]);
    y.domain([0, d3.max(data, function(d) { return d3.max(keys, function(key) { if (filtered.indexOf(key) == -1) return d[key]; }); })]).nice();

次に、長方形を選択し、非表示にするか表示するかでフィルタリングし、それに応じて更新します。

var bars = svg.selectAll(".bar").selectAll("rect")
  .data(function(d) { return keys.map(function(key) { return {key: key, value: d[key]}; }); })

// filter out bars:
bars.filter(function(d) {
  return filtered.indexOf(d.key) > -1;
})
.transition()
.attr("x", function(d) {
  return (+d3.select(this).attr("x")) + (+d3.select(this).attr("width"))/2;  
})
.attr("height",0)
.attr("width",0)     
.attr("y", function(d) { return height; })
.duration(500);

// update persistent bars:
bars.filter(function(d) {
    return filtered.indexOf(d.key) == -1;
  })
  .transition()
  .attr("x", function(d) { return x1(d.key); })
  .attr("y", function(d) { return y(d.value); })
  .attr("height", function(d) { return height - y(d.value); })
  .attr("width", x1.bandwidth())
  .attr("fill", function(d) { return z(d.key); })
  .duration(500);

このソリューションは、入力/更新/終了のサイクルでもう少し「d3-ish」にすることができますが、要素の数が比較的固定されているため、これは他の多くの状況ほど有用ではありません。

上記の動作中のコードは次のとおりです。

https://bl.ocks.org/andrew-reid/64a6c1892d1893009d2b99b8abee75a7

また、コメントに記載されているように、スケールだけでなく、軸も更新する必要があります。そのために、チャートを更新するときに簡単に選択できるように、yスケールにクラスを追加しました。

       svg.select(".y")
        .transition()
        .call(d3.axisLeft(y).ticks(null, "s"))
        .duration(500);

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

グループ化された棒グラフから単純な棒グラフに切り替える方法

分類Dev

D3.jsのグループ化された棒グラフの凡例にデータがありません

分類Dev

D3.jsのグループ化された棒グラフ

分類Dev

chart.jsのグループ化された棒グラフ

分類Dev

ファセット内のグループ化された棒グラフを並べ替える

分類Dev

グループ化された棒グラフでの並べ替え機能の問題

分類Dev

降順でグループ化された棒グラフ値の並べ替え

分類Dev

グループ化された棒グラフ:適切な配置

分類Dev

グループ化された棒グラフでグループを並べ替える方法

分類Dev

d3の異なるグループでグループ化されたカテゴリ棒グラフ?

分類Dev

グループ化された棒グラフのD3ブラッシング

分類Dev

グループ化された棒グラフのD3ブラッシング

分類Dev

D3:グループ化された棒グラフの各棒の上部にラベルを追加する方法

分類Dev

Rの平均のグループ化された棒グラフ

分類Dev

d3jsの棒グラフの棒高さの問題

分類Dev

d3.jsを使用してグループ化された棒グラフを作成する

分類Dev

D3.jsを使用して「1行で」グループ化された棒グラフ

分類Dev

グループ化された棒グラフのggplotラベル棒

分類Dev

Rの2グループ化された棒グラフ

分類Dev

グループ化された棒グラフの作成方法

分類Dev

ggplotのグループ化された棒グラフ

分類Dev

グループ化された棒グラフの問題

分類Dev

ggplot2のグループ化された棒グラフ

分類Dev

グループ化された棒グラフと切り捨てられた折れ線グラフの組み合わせ

分類Dev

d3jsv5グループ化された棒グラフのサイズ変更

分類Dev

d3jsv4のグループ化された棒グラフにテキストを追加する

分類Dev

D3のグループ化された棒グラフ上に散布図を適切に描画できません

分類Dev

D3のグループ化された棒グラフはxスケールに沿って広がりません

分類Dev

D3.js-グループ化された棒グラフを拡大しながら長方形の外側の領域をクリップする方法

Related 関連記事

  1. 1

    グループ化された棒グラフから単純な棒グラフに切り替える方法

  2. 2

    D3.jsのグループ化された棒グラフの凡例にデータがありません

  3. 3

    D3.jsのグループ化された棒グラフ

  4. 4

    chart.jsのグループ化された棒グラフ

  5. 5

    ファセット内のグループ化された棒グラフを並べ替える

  6. 6

    グループ化された棒グラフでの並べ替え機能の問題

  7. 7

    降順でグループ化された棒グラフ値の並べ替え

  8. 8

    グループ化された棒グラフ:適切な配置

  9. 9

    グループ化された棒グラフでグループを並べ替える方法

  10. 10

    d3の異なるグループでグループ化されたカテゴリ棒グラフ?

  11. 11

    グループ化された棒グラフのD3ブラッシング

  12. 12

    グループ化された棒グラフのD3ブラッシング

  13. 13

    D3:グループ化された棒グラフの各棒の上部にラベルを追加する方法

  14. 14

    Rの平均のグループ化された棒グラフ

  15. 15

    d3jsの棒グラフの棒高さの問題

  16. 16

    d3.jsを使用してグループ化された棒グラフを作成する

  17. 17

    D3.jsを使用して「1行で」グループ化された棒グラフ

  18. 18

    グループ化された棒グラフのggplotラベル棒

  19. 19

    Rの2グループ化された棒グラフ

  20. 20

    グループ化された棒グラフの作成方法

  21. 21

    ggplotのグループ化された棒グラフ

  22. 22

    グループ化された棒グラフの問題

  23. 23

    ggplot2のグループ化された棒グラフ

  24. 24

    グループ化された棒グラフと切り捨てられた折れ線グラフの組み合わせ

  25. 25

    d3jsv5グループ化された棒グラフのサイズ変更

  26. 26

    d3jsv4のグループ化された棒グラフにテキストを追加する

  27. 27

    D3のグループ化された棒グラフ上に散布図を適切に描画できません

  28. 28

    D3のグループ化された棒グラフはxスケールに沿って広がりません

  29. 29

    D3.js-グループ化された棒グラフを拡大しながら長方形の外側の領域をクリップする方法

ホットタグ

アーカイブ