【3d.js / v5】 円グラフを書く方法

PieChart

3d.js(v5)を使った円グラフを書く方法をご紹介します。

HTML/JavaScriptサンプル

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>D3 Pie Chart</title>
<script src="d3.min.js"></script>
<style>

h1{
  font-size: small;
  font-family: "Hiragino Kaku Gothic ProN","メイリオ", sans-serif;
}

svg{
  font: 12px sans-serif;
  background-color: #eee;
  text-align: right;
  padding: 3px;
  margin: 1px;
  color: #333;
}
</style>
</head>

<body>
<h1>2022年国内IoT市場規模予測:約11.7兆円</h1>
<script>
  // 1. データの準備
  var dataset = [
    { "name": "サービス", "value": 33.7},
    { "name": "ソフトウェア", "value": 22.7 },
    { "name": "コネクティビティ", "value": 9.7 },
    { "name": "ハードウェア", "value": 29.2 }
  ]

  var width = 600; // グラフの幅
  var height = 400; // グラフの高さ
  var radius = Math.min(width, height) / 2 - 10; // 円の半径

  // SVG設定
  var svg = d3.select("body").append("svg").attr("width", width).attr("height", height);

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

  // カラー設定
  var color = d3.scaleOrdinal()
    .range(["#A4243B", "#D8C99B", "#D8973C", "#BD632F", "#273E47"]);

  // 円グラフ関数
  var pie = d3.pie()
    .value(function(d) { return d.value; })
    .sort(null);

  // 円グラフへのデータ設定
  var pieChart = g.selectAll(".pie")
    .data(pie(dataset))
    .enter()
    .append("g")
    .attr("class", "pie");

  arc = d3.arc()
    .outerRadius(radius)
    .innerRadius(0);

  pieChart.append("path")
    .attr("d", arc)
    .attr("fill", function(d) { return color(d.index) })
    .attr("opacity", 0.8)

  // 円グラフにテキスト追加
  var text = d3.arc()
    .outerRadius(radius - 60)
    .innerRadius(radius - 60);

  pieChart.append("text")
    .attr("fill", "black")
    .attr("transform", function(d) { return "translate(" + text.centroid(d) + ")"; })
    .attr("dy", "5px")
    .attr("text-anchor", "middle")
    .text(function(d) { return d.data.name; });
  </script>
</body>

</html>

D3.jsで円グラフを描くには

  • データを表すパイ(扇形)を設定する。
  • 各パイに円弧(円周の一部分)を指定してつなげ円グラフにする。

円の半径を設定する

SVG領域に合わせて、円の半径の大きさを計算します。

  var radius = Math.min(width, height) / 2 - 10; // 円の半径
Math.min(x,y)引数に指定した2つの値のうち、どちらか小さい方の値を取得

円グラフのデータ設定

// 円グラフへのデータ設定
  var pieChart = g.selectAll(".pie")
    .data(pie(dataset))
    .enter()
    .append("g")
    .attr("class", "pie");

  arc = d3.arc()
    .outerRadius(radius)
    .innerRadius(0);

  pieChart.append("path")
    .attr("d", arc)
    .attr("fill", function(d) { return color(d.index) })
    .attr("opacity", 0.8)

  // 円グラフにテキスト追加
  var text = d3.arc()
    .outerRadius(radius - 60)
    .innerRadius(radius - 60);
innerRadius()内側の半径
outerRadius()外側の半径
startAngle()アークが始まる角度
endAngle()アークが終わる角度

まとめ

d3.jsで円グラフを書く方法でした。

関連情報

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA