Skip to content

Instantly share code, notes, and snippets.

@cflavs
Last active February 4, 2016 19:23
Show Gist options
  • Save cflavs/6335f92b86665f6fb7b7 to your computer and use it in GitHub Desktop.
Save cflavs/6335f92b86665f6fb7b7 to your computer and use it in GitHub Desktop.
Group Bar Chart - Índice de Aprovados no Ensino Médio por UFs
Uf 2007 2008 2009 2010
RO 74.4 75.2 76.1 76.7
AC 75.9 77.8 79.2 78.9
AM 77.9 74.6 77.4 81.7
RR 79.5 79.5 81.6 82.2
PA 63.3 68.2 68.1 68.9
AP 70 69.5 70.6 73.6
TO 80.1 80.2 81.2 82.2
MA 75.9 76.3 78.5 76.8
PI 70.6 69.5 71.3 74.1
CE 76.7 78.5 79.9 82.2
RN 68.3 69.1 71.1 76.1
PB 72.8 72.3 74.1 74.3
PE 70.1 73.1 77.4 80.2
AL 71.7 74.2 71.1 71.8
SE 71.5 65.4 69 70.4
BA 68.7 68 69.7 71.9
MG 75.6 79.9 78.4 77.8
ES 77.2 77.6 74.8 79.3
RJ 67.3 65.8 66.6 68.3
SP 79.8 82 81.7 82.9
PR 79.7 78.2 80.6 81.6
SC 83.8 83.8 83.7 82.5
RS 68 68 68.3 69.1
MS 72.9 72.3 71.7 71.1
MT 73.3 71.2 72.6 71.6
GO 73.6 73.5 74.7 76.1
DF 71.1 82 76.6 74.8
<!DOCTYPE html>
<meta charset="utf-8">
<style>
body {
font: 10px sans-serif;
}
.axis path,
.axis line {
fill: none;
stroke: #000;
shape-rendering: crispEdges;
}
.bar {
fill: steelblue;
}
.x.axis path {
display: none;
}
</style>
<body>
<script src="//d3js.org/d3.v3.min.js"></script>
<script>
var margin = {top: 20, right: 20, bottom: 30, left: 40},
width = 960 - margin.left - margin.right,
height = 600 - margin.top - margin.bottom;
var x0 = d3.scale.ordinal()
.rangeRoundBands([0, width], .1);
var x1 = d3.scale.ordinal();
var y = d3.scale.linear()
.range([height, 0]);
var color = d3.scale.ordinal()
.range(["#98abc5", "#a05d56", "#d0743c", "#ff8c00"]);
var xAxis = d3.svg.axis()
.scale(x0)
.orient("bottom");
var yAxis = d3.svg.axis()
.scale(y)
.orient("left")
.tickFormat(d3.format(".2s"));
var svg = d3.select("body").append("svg")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.top + margin.bottom)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
d3.csv("data.csv", function(error, data) {
if (error) throw error;
var ageNames = d3.keys(data[0]).filter(function(key) { return key !== "Uf"; });
data.forEach(function(d) {
d.ages = ageNames.map(function(name) { return {name: name, value: +d[name]}; });
});
x0.domain(data.map(function(d) { return d.Uf; }));
x1.domain(ageNames).rangeRoundBands([0, x0.rangeBand()]);
y.domain([0, d3.max(data, function(d) { return d3.max(d.ages, function(d) { return d.value; }); })]);
svg.append("g")
.attr("class", "x axis")
.attr("transform", "translate(0," + height + ")")
.call(xAxis);
svg.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("Aprovação Ensino Médio");
var state = svg.selectAll(".uf")
.data(data)
.enter().append("g")
.attr("class", "uf")
.attr("transform", function(d) { return "translate(" + x0(d.Uf) + ",0)"; });
state.selectAll("rect")
.data(function(d) { return d.ages; })
.enter().append("rect")
.attr("width", x1.rangeBand())
.attr("x", function(d) { return x1(d.name); })
.attr("y", function(d) { return y(d.value); })
.attr("height", function(d) { return height - y(d.value); })
.style("fill", function(d) { return color(d.name); });
var legend = svg.selectAll(".legend")
.data(ageNames.slice().reverse())
.enter().append("g")
.attr("class", "legend")
.attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });
legend.append("rect")
.attr("x", width - 18)
.attr("width", 18)
.attr("height", 18)
.style("fill", color);
legend.append("text")
.attr("x", width - 24)
.attr("y", 9)
.attr("dy", ".35em")
.style("text-anchor", "end")
.text(function(d) { return d; });
});
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment