D3.js donut chart
HTML
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/d3.v3.min.js">
</script>
<div id="timelines"></div>
CSS
body {
font-family: Arial, sans-serif;
font-size: 11px;
position: relative;
background: #1d1d19;
}
.axis path,
.axis line {
fill: none;
stroke: #ffffff;
shape-rendering: crispEdges;
}
.tick{
fill: #ffffff;
}
.link {
fill: none;
}
JavaScript
var data = [{
"date": "2012-03-20",
"total": 3
}, {
"date": "2012-03-21",
"total": 8
}, {
"date": "2012-03-22",
"total": 2
}, {
"date": "2012-03-23",
"total": 10
}, {
"date": "2012-03-24",
"total": 3
}, {
"date": "2012-03-25",
"total": 20
}, {
"date": "2012-03-26",
"total": 12
}, {
"date": "2012-03-27",
"total": 17
}];
var margin = {
top: 40,
right: 40,
bottom: 40,
left: 60
},
width = 600,
height = 500;
function colores_google(n) {
var colores_g = ["#df3261", "#4bc2ee", "#251e1c"];
return colores_g[n % colores_g.length];
}
var y = d3.time.scale().range([height - margin.top - margin.bottom, 0]);
y.domain([
d3.min(data, function (c) {
return new Date(c.date);
}),
d3.max(data, function (c) {
return new Date(c.date);
})
]);
//y.domain([new Date(data[0].date), d3.time.day.offset(new Date(data[data.length - 1].date), 1)])
var yAxis = d3.svg.axis()
.scale(y)
.orient('left')
.tickPadding(1);
var svg = d3.select('#timelines').append('svg')
.attr('class', 'chart')
.attr('width', width)
.attr('height', height)
.append('g')
.attr('transform', 'translate(' + margin.left + ', ' + margin.top + ')');
var axisArray = [];
//http://stackoverflow.com/questions/22722952/how-can-i-get-the-d3-js-axis-ticks-and-positions-as-an-array
svg.append('g')
.attr('class', 'y axis')
.call(yAxis)
.selectAll(".tick").each(function(data) {
var tick = d3.select(this);
// pull the transform data out of the tick
var transform = d3.transform(tick.attr("transform")).translate;
// passed in "data" is the value of the tick, transform[0] holds the X value
//console.log("each tick", data, transform);
var obj = {
"data": data,
"transform": transform
}
axisArray.push(obj);
});
//console.log("all the points", yAxis.scale().ticks(yAxis.ticks()[0]));
function getRadius(d) {
var count = 2;
var ratio...