d3 graph example
by Richard Hunter
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.5/d3.min.js"></script>
<h2>My Graph</h2>
<svg id="canvas"></svg>
CSS
#canvas {
border : solid 1px black;
}
rect {
fill : green;
}
.axis text {
font: 10px sans-serif;
}
.axis path, .axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
JavaScript
var canvasWidth = 500,
canvasHeight = 400;
// create canvas
var canvas = d3.select('#canvas');
canvas.attr('width', canvasWidth);
canvas.attr('height', canvasHeight);
var margins = {
left: 30,
top: 20,
right: 20,
bottom: 30
};
var width = canvasWidth - (margins.left + margins.right);
var height = canvasHeight - (margins.top + margins.bottom);
var data = [{
name: 'Dundee',
points: 50
}, {
name: 'Aberdeen',
points: 60
}, {
name: 'Celtic',
points: 95
}];
// configure y scale
var y = d3.scale.linear()
.range([height, 0])
.domain([0, d3.max(data, function (d) {
return d.points;
})]);
// configure x scale
var x = d3.scale.ordinal()
.rangeRoundBands([0, width])
.domain(data.map(function (d) {
return d.name;
}));
// place chart within group element
var chart = canvas.append('g')
.attr('transform', 'translate(' + margins.left + ',' + margins.top + ')');
var barWidth = x.rangeBand();
// create bar and bind data
var bar = chart.selectAll('g')
.data(data)
.enter()
.append('g')
.attr("transform", function (d) {
return "translate(" + x(d.name) + ",0)";
});
// append rectangle
bar.append("rect")
.attr("y", function (d) {
return y(d.points);
})
.attr("height", function (d) {
return height - y(d.points);
})
.attr("width", barWidth - 1);
// create x axis
var xAxis = d3.svg.axis()
.scale(x)
.orient("bottom");
// attach x axis
chart
.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
// create y axis
var yAxis = d3.svg.axis()
.scale(y)
.orient("left");
// attach y axis and label
chart
.append("g")
.attr("class", "y axis")
.call(yAxis)
.append("text")
.attr("transform", "rotate(-90)")
.attr("y", 6)
.attr("dy", ".71em")
.style("text-anchor", "end")
.text("Points");