D3.js
データビジュアライゼーションのためのD3.js徹底入門 Webで魅せるグラフ&チャートの作り方
- 作者: 古籏一浩
- 出版社/メーカー: SBクリエイティブ株式会社
- 発売日: 2014/07/01
- メディア: Kindle版
- この商品を含むブログを見る
第8章 円グラフまで。 自動的に数が大きい方から先詰めになるので、データの作りかたをミスると表示順序がめちゃくちゃになるので注意。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>SVG</title> <link href="../node_modules/bootstrap/dist/css/bootstrap-theme.min.css" rel="stylesheet"> <link href="../node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet"> <link href="../node_modules/octicons/octicons/octicons.css" rel="stylesheet"> <!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="https://cdn.jsdelivr.net/respond/1.4.2/respond.min.js"></script> <![endif]--> <style media="screen"> .pie { fill: orange; stroke: gray; } .total { font-size: 9pt; text-anchor: middle; } .pieNum { font-size: 10pt; text-anchor: middle: } svg { width: 320px; height: 240px; border: 1px solid; } </style> </head> <body> <script src="../node_modules/jquery/dist/jquery.min.js" charset="utf-8"></script> <script src="../node_modules/bootstrap/dist/js/bootstrap.min.js" charset="utf-8"></script> <script src="../node_modules/d3/d3.min.js" charset="utf-8"></script> <div class="container"> <h1>携帯電話のシェアを表示</h1> <div class="row"> <div class="col-sm-4"> <svg id="myGraph1"></svg> <form> <select id="year" name="year"> <option value="2008">2008年</option> <option value="2009">2009年</option> <option value="2010">2010年</option> <option value="2011">2011年</option> <option value="2012">2012年</option> <option value="2013">2013年</option> <option value="2014">2014年</option> <option value="2015">2015年</option> </select> </form> </div> <div class="col-sm-4"> </div> <div class="col-sm-4"> </div> </div> <script src="sample8.js" charset="utf-8"></script> </div> </body> </html>
drawPie("sample8/mydata2008.csv"); d3.select("#year").on("change", function() { d3.select("#myGraph1").selectAll("*").remove(); drawPie("sample8/mydata" + this.value + ".csv", this.value); }); function drawPie(filename, year) { d3.csv(filename, function(error, data) { var dataset = []; for (var i in data[0]) { dataset.push(data[0][i]); } var svgEle = document.getElementById("myGraph1"); var svgWidth = parseFloat(window.getComputedStyle(svgEle, null).getPropertyValue("width")); var svgHeight = parseFloat(window.getComputedStyle(svgEle, null).getPropertyValue("height")); // var dataset = [5, 10, 8, 12, 16, 20, 12, 18, 6, 9, 10, 6, 15, 20]; // var colors = d3.scale.category20b(); var colors = d3.scale.category10(); var pie = d3.layout.pie(); var arc = d3.svg.arc().innerRadius(30).outerRadius(100); var pieElements = d3.select("#myGraph1") .selectAll("g") .data(pie(dataset)) .enter() .append("g") .attr("transform", "translate(" + svgWidth / 2 + ", " + svgHeight / 2 + ")"); pieElements .append("path") .attr("class", "pie") .style("fill", function(d, i) { return colors(i); }) .transition() .duration(200) .delay(function(d, i) { return i * 200; }) .ease("linear") .attrTween("d", function(d, i) { var interpolate = d3.interpolate( { startAngle: d.startAngle, endAngle: d.startAngle }, { startAngle: d.startAngle, endAngle: d.endAngle } ); return function(t) { return arc(interpolate(t)); }; }); var textElements = d3.select("#myGraph1") .append("text") .attr("class", "total") .attr("transform", "translate(" + svgWidth / 2 + ", " + (svgHeight / 2 + 5) + ")") .text("合計:" + d3.sum(dataset)); pieElements .append("text") .attr("class", "pieNum") .attr("transform", function(d, i) { return "translate(" + arc.centroid(d) + ")"; }) .text(function(d, i) { return d.value; }); }); }