index.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>Ejemplo de uso de crossfilter y dc - Visualización de información 2016</title>
<meta name="author" content="kevinkraus92">
<meta charset="UTF-8">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/dc/2.0.0-beta.27/dc.min.css"/>
</head>
<body>
<div id="chart-ring-year"></div>
<div id="chart-hist-spend"></div>
<div id="chart-row-spenders"></div>
<div id="chart-box-plot"></div>
<script src="https://d3js.org/d3.v3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/crossfilter/1.3.12/crossfilter.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dc/2.0.0-beta.27/dc.min.js"></script>
<script>
var yearRingChart = dc.pieChart("#chart-ring-year"),
spendHistChart = dc.barChart("#chart-hist-spend"),
spenderRowChart = dc.rowChart("#chart-row-spenders"),
mostExpensiveYear = dc.boxPlot("#chart-box-plot");
var spendData = [
{Name: 'Jose', Spent: '$40', Year: 2011},
{Name: 'Jose', Spent: '$40', Year: 2011},
{Name: 'Jose', Spent: '$40', Year: 2011},
{Name: 'Jose', Spent: '$70', Year: 2012},
{Name: 'Jose', Spent: '$30', Year: 2011},
{Name: 'Jose', Spent: '$30', Year: 2011},
{Name: 'Jose', Spent: '$30', Year: 2014},
{Name: 'Jose', Spent: '$70', Year: 2012},
{Name: 'Pedro', Spent: '$10', Year: 2011},
{Name: 'Pedro', Spent: '$20', Year: 2012},
{Name: 'Pedro', Spent: '$50', Year: 2013},
{Name: 'Pepe', Spent: '$40', Year: 2011},
{Name: 'Pepe', Spent: '$30', Year: 2013}
];
spendData.forEach(function(d) {
d.Spent = d.Spent.match(/\d+/);
});
var ndx = crossfilter(spendData),
yearDim = ndx.dimension(function(d) {return +d.Year;}),
spendDim = ndx.dimension(function(d) {return Math.floor(d.Spent/10);}),
nameDim = ndx.dimension(function(d) {return d.Name;}),
spendPerYear = yearDim.group().reduceCount(function(d) {return +d.Spent;}),
spendPerName = nameDim.group().reduceSum(function(d) {return +d.Spent;}),
spendHist = spendDim.group().reduceCount(),
spentArrayGroup = nameDim.group().reduce(
function(p,v) {
p.push(v.Spent);
return p;
},
function(p,v) {
p.splice(p.indexOf(v.Spent), 1);
return p;
},
function() {
return [];
}
);
mostExpensiveYear
.width(768)
.height(480)
.margins({top: 50, right: 50, bottom: 30, left: 50})
.dimension(spendDim)
.group(spentArrayGroup)
.elasticX(true)
.y(d3.scale.linear().domain([0, 100]));
yearRingChart
.width(200).height(200)
.dimension(yearDim)
.group(spendPerYear)
.innerRadius(40);
spendHistChart
.width(300).height(200)
.dimension(spendDim)
.group(spendHist)
.x(d3.scale.ordinal())
.xUnits(dc.units.ordinal)
.elasticX(true)
.elasticY(true);
spendHistChart.xAxis().tickFormat(function(d) {return d*10});
spendHistChart.yAxis().ticks(2);
spenderRowChart
.width(350).height(200)
.dimension(nameDim)
.group(spendPerName)
.elasticX(true);
dc.renderAll();
</script>
</body>
</html>