AngularJS with D3
by Rishabh Sharma
HTML
<script src="https://d3js.org/d3.v3.min.js"></script>
<button id="refresh">Refresh Data</button>
<div id="chart"></div>
CSS
body {
font: 10px sans-serif;
}
svg {
border: 1px solid black;
}
JavaScript
var getData = function(){
var size = 3;
var data = {};
var text = "";
for(var i=0; i<size; i++){
data["data-"+(i+1)] = Math.round(Math.random() * 100);
text += "data-"+ (i+1) +" = " + data["data-"+(i+1)] + "<br/>";
};
d3.select("#data").html(text);
return data;
};
var chart = donut()
.$el(d3.select("#chart"))
.data(getData())
.render();
d3.select("#refresh").on("click", function(){
chart.data(getData()).render();
});
// CHART CODE BELOW
function donut(){
// Default settings
var $el = d3.select("body")
var data = {};
// var showTitle = true;
var width = 960,
height = 400,
radius = Math.min(width, height) / 2;
var currentVal;
var color = d3.scale.category20();
var pie = d3.layout.pie()
.sort(null)
.value(function(d) { return d.value; });
var svg, g, arc;
var object = {};
// Method for render/refresh graph
object.render = function(){
if(!svg){
arc = d3.svg.arc()
.outerRadius(radius)
.innerRadius(radius - (radius/2.5));
svg = $el.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
g = svg.selectAll(".arc")
.data(pie(d3.entries(data)))
.enter().append("g")
.attr("class", "arc");
g.append("path")
// Attach current value to g so that we can use it for animation
.each(function(d) { this._current = d; })
.attr("d", arc)
.style("fill", function(d) { return color(d.data.key); });
g.append("text")
.attr("transform", function(d) { return "translate(" + arc.centroid(d) + ")"; })
.attr("dy", ".35em")
.style("text-anchor", "middle");
g.select("text").text(function(d) { return d.data.key; });
svg.append("text")
.datum(data)
.attr("x", 0 )
.attr("y", 0 + radius/10 )
...