コネクタ付きD3ドーナツグラフ

lexiexiexi

jsonオブジェクトのラベルとコネクタを使用して静的なd3ドーナツグラフを作成しようとしています。このフィドルの配列で動作させることはできましたが、必要なデータオブジェクトとともに表示されるコネクタまたはラベルテキストを取得できません。

ドーナツグラフは機能しており、ラベルはパーセンテージで表示されていますが、ラベルとコネクタで表示する必要があります。コネクタをマッピングしようとしている方法と関係があると思いますが、エラーを理解できません。

コードは以下にあり、またここに動作するフィドルへのリンクがありますhttps//jsfiddle.net/hef1u71o/

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>


<script src="https://d3js.org/d3.v3.min.js"></script>
<script>

var data = [{
    percentage: 19,
    label: 'Consulting'
  },{
    percentage: 3,
    label: 'Consumer Goods'
  },{
    percentage: 5,
    label: 'Energy/Chemical/Gas'
  },{
    percentage: 3,
    label: 'Entrepreneurship'
  },{
    percentage: 1,
    label: 'Environment & Sustainability'
  },{
    percentage: 19,
    label: 'Financial Services'
  },{
    percentage: 3,
    label: 'General Management'
  },{
    percentage: 6,
    label: 'Government'
  },{
    percentage: 7,
    label: 'Hospital/Health Care/Health Services'
  },{
    percentage: 2,
    label: 'Human Resources'
  },{
    percentage: 4,
    label: 'IT'
  },{
    percentage: 2,
    label: 'International Development'
  },{
    percentage: 3,
    label: 'Manufacturing/Operations'
  },{
    percentage: 4,
    label: 'Marketing/PR/Advertising'
  },{
    percentage: 1,
    label: 'Media/Sports/Entertainment'
  },{
    percentage: 7,
    label: 'Nonprofit/Education/Special Org.'
  },{
    percentage: 6,
    label: 'Other'
  },{
    percentage: 2,
    label: 'Research & Development'
  },{
    percentage: 4,
    label: 'Sales/Business Development'
  },];


var width = 300,
    height = 300,
    radius = Math.min(width, height) / 2;

var color = d3.scale.ordinal()
  .range(["#243668", "#2b7eb4", "#186b97", "#6391a1", "#d2c5b7", "#9c9286", "#5b5b59"]);


  var pie = d3.layout.pie()
      .sort(null)
      .value(function(d) { return d.percentage; });


var arc = d3.svg.arc()
    .innerRadius(radius - 100)
    .outerRadius(radius - 50);

var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height)
    .append("g")
    .attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");

var path = svg.selectAll("path")
.data(pie(data))
    .enter().append("path")
    .attr("fill", function(d, i) { return color(i); })
    .attr("d", arc);

svg.selectAll("text").data(pie(data))
    .enter()
    .append("text")
    .attr("text-anchor", "middle")
    .attr("x", function(d) {
        var a = d.startAngle + (d.endAngle - d.startAngle)/2 - Math.PI/2;
        d.cx = Math.cos(a) * (radius - 75);
        return d.x = Math.cos(a) * (radius - 20);
    })
    .attr("y", function(d) {
        var a = d.startAngle + (d.endAngle - d.startAngle)/2 - Math.PI/2;
        d.cy = Math.sin(a) * (radius - 75);
        return d.y = Math.sin(a) * (radius - 20);
    })
    .text(function(d) { return d.value; })
    .each(function(d) {
        var bbox = this.getBBox();
        d.sx = d.x - bbox.width/2 - 2;
        d.ox = d.x + bbox.width/2 + 2;
        d.sy = d.oy = d.y + 5;
    });

svg.append("defs").append("marker")
    .attr("id", "circ")
    .attr("markerWidth", 6)
    .attr("markerHeight", 6)
    .attr("refX", 3)
    .attr("refY", 3)
    .append("circle")
    .attr("cx", 3)
    .attr("cy", 3)
    .attr("r", 3);

svg.selectAll("path.pointer").data(pie(data)).enter()
    .append("path")
    .attr("class", "pointer")
    .style("fill", "none")
    .style("stroke", "black")
    .attr("marker-end", "url(#circ)")
    .attr("d", function(d) {
        if(d.cx > d.ox) {
            return "M" + d.sx + "," + d.sy + "L" + d.ox + "," + d.oy + " " + d.cx + "," + d.cy;
        } else {
            return "M" + d.ox + "," + d.oy + "L" + d.sx + "," + d.sy + " " + d.cx + "," + d.cy;
        }
    });


</script>
  </body>
</html>
ミハイル・シャブリコフ

データを変数に保存します。

var pieData = pie(data);

そして、ここでこの変数を使用します。

svg.selectAll("text").data(pieData)
    .enter()
    .append("text")
    .attr("text-anchor", "middle")
    .attr("x", function(d) {
        var a = d.startAngle + (d.endAngle - d.startAngle)/2 - Math.PI/2;
        d.cx = Math.cos(a) * (radius - 75);
        return d.x = Math.cos(a) * (radius - 20);
    })
    .attr("y", function(d) {
        var a = d.startAngle + (d.endAngle - d.startAngle)/2 - Math.PI/2;
        d.cy = Math.sin(a) * (radius - 75);
        return d.y = Math.sin(a) * (radius - 20);
    })
    .text(function(d) { return d.value; })
    .each(function(d) { // !!! you extent the dataset here 
        var bbox = this.getBBox();
        d.sx = d.x - bbox.width/2 - 2;
        d.ox = d.x + bbox.width/2 + 2;
        d.sy = d.oy = d.y + 5;
    });

そしてここ:

svg.selectAll("path.pointer").data(pieData).enter()
    .append("path")
    .attr("class", "pointer")
...

データを拡張するため、これは重要です(eachメソッドを参照)。コネクタの位置の計算には拡張プロパティを使用し、両方の場合に同じデータセットを使用する必要があります。

動作デモを確認しください

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

リンク付きのD3ツリーグラフ

分類Dev

レスポンシブD3ドーナツグラフ

分類Dev

d3のドーナツグラフ

分類Dev

レスポンシブドーナツグラフd3

分類Dev

D3v4-円の外側にドットが付いたコネクタ付きの円グラフ。

分類Dev

d3円/ドーナツグラフのラベルの遷移

分類Dev

D3ドーナツグラフのテキストの中央揃え

分類Dev

D3ドーナツグラフを実装する方法は?

分類Dev

D3ドーナツグラフの角度を180に変更

分類Dev

カスタムD3.jsドーナツグラフ

分類Dev

Swiftでタイトル付きのドーナツグラフを描く

分類Dev

Reactフック付きのD3面グラフ

分類Dev

C3 / D3でドーナツグラフのスライスを変更する

分類Dev

d3ドーナツグラフがレンダリングされない

分類Dev

ナビゲーションコンポーネント:各フラグメントにツールバー付きのドロワーを設定する方法

分類Dev

d3ツールチップ付きの棒グラフが機能しない

分類Dev

D3ドーナツグラフの中央にテキストを追加する

分類Dev

D3ドーナツグラフで合計に薄い円弧を追加します

分類Dev

負(反時計回り)と正(時計回り)のD3ドーナツグラフ(角度は動的)

分類Dev

d3ドーナツグラフの中央に表示する平均を計算します

分類Dev

日付スライダー付きのD3折れ線グラフ

分類Dev

D3ネットワークグラフ

分類Dev

頂点チャート付きのハーフドーナツグラフ

分類Dev

動的d3スタック棒グラフでツールチップを表示する際の問題

分類Dev

d3 json ファイルを使用したツールチップ付きのレスポンシブなグループ化された棒グラフ

分類Dev

ボックス付きD3ツリー

分類Dev

D3ドーナツのオブジェクト

分類Dev

ReactJSフック-複数のuseStateフックとスタイル付きコンポーネントを使用したドラッグアンドドロップ

分類Dev

ラベル付きの円グラフの更新(d3)

Related 関連記事

  1. 1

    リンク付きのD3ツリーグラフ

  2. 2

    レスポンシブD3ドーナツグラフ

  3. 3

    d3のドーナツグラフ

  4. 4

    レスポンシブドーナツグラフd3

  5. 5

    D3v4-円の外側にドットが付いたコネクタ付きの円グラフ。

  6. 6

    d3円/ドーナツグラフのラベルの遷移

  7. 7

    D3ドーナツグラフのテキストの中央揃え

  8. 8

    D3ドーナツグラフを実装する方法は?

  9. 9

    D3ドーナツグラフの角度を180に変更

  10. 10

    カスタムD3.jsドーナツグラフ

  11. 11

    Swiftでタイトル付きのドーナツグラフを描く

  12. 12

    Reactフック付きのD3面グラフ

  13. 13

    C3 / D3でドーナツグラフのスライスを変更する

  14. 14

    d3ドーナツグラフがレンダリングされない

  15. 15

    ナビゲーションコンポーネント:各フラグメントにツールバー付きのドロワーを設定する方法

  16. 16

    d3ツールチップ付きの棒グラフが機能しない

  17. 17

    D3ドーナツグラフの中央にテキストを追加する

  18. 18

    D3ドーナツグラフで合計に薄い円弧を追加します

  19. 19

    負(反時計回り)と正(時計回り)のD3ドーナツグラフ(角度は動的)

  20. 20

    d3ドーナツグラフの中央に表示する平均を計算します

  21. 21

    日付スライダー付きのD3折れ線グラフ

  22. 22

    D3ネットワークグラフ

  23. 23

    頂点チャート付きのハーフドーナツグラフ

  24. 24

    動的d3スタック棒グラフでツールチップを表示する際の問題

  25. 25

    d3 json ファイルを使用したツールチップ付きのレスポンシブなグループ化された棒グラフ

  26. 26

    ボックス付きD3ツリー

  27. 27

    D3ドーナツのオブジェクト

  28. 28

    ReactJSフック-複数のuseStateフックとスタイル付きコンポーネントを使用したドラッグアンドドロップ

  29. 29

    ラベル付きの円グラフの更新(d3)

ホットタグ

アーカイブ