// Cargamos loa datos. Al eliminar los registros NA vemos que el año más reciente del que tenemos datos de la esperanza de vida y ratio de fertilidad es el 2014 d3.csv('datosWB2014.csv', function (error, csvData) { var data = csvData.map(function (d) { return { pais: d.country_name, ExpVida: +d.life_expectancy, RatioFert: +d.fertility_rate, Poblacion: +d.population, Region: d.region_value } }); // Establecer tamaño de las burbujas var minBubbleSize = 8, maxBubbleSize = 30; //Establecer layaout var margin = { left: maxBubbleSize, top: maxBubbleSize, bottom: maxBubbleSize, right: maxBubbleSize }; var axisPadding = 10; var graphWidth = 800, graphHeight = 500; var totalWidth = graphWidth + margin.left + margin.right; var totalHeight = graphHeight + margin.top + margin.bottom; // Mapear variables var EsperanzaVida = data.map(function (d) { return d.ExpVida; }); var RatioFertilidad = data.map(function (d) { return d.RatioFert; }); var Poblacion = data.map(function (d) { return d.Poblacion; }); var Regiones = data.map(function (d) { return d.Region; }); // Establecer escalas var xScale = d3.scale.linear() .domain([d3.min(EsperanzaVida), d3.max(EsperanzaVida)]) .range([0, graphWidth]); var yScale = d3.scale.linear() .domain([d3.max(RatioFertilidad), 0]) .range([0, graphHeight]); var popDomain = [d3.min(Poblacion), d3.max(Poblacion)]; var popScale = d3.scale.linear() .domain(popDomain) .range([minBubbleSize, maxBubbleSize]); var uRegiones = d3.set(Regiones).values(); var regionColor = d3.scale.ordinal() .domain(uRegiones) .range(d3.scale.category10().range()); var svg = d3.select("body").append('svg') .attr('width', totalWidth) .attr('height', totalHeight); var yAxis = d3.svg.axis().scale(yScale).orient('left'); var yAxisNodes = svg.append('g') .attr('transform', 'translate(' + (margin.left - axisPadding) + ',' + margin.top + ')') .call(yAxis); styleAxis(yAxisNodes); var xAxis = d3.svg.axis().scale(xScale).orient('bottom'); var xAxisNodes = svg.append('g') .attr('transform', 'translate(' + margin.left + ',' + (totalHeight - margin.bottom + axisPadding) + ')') .call(xAxis); styleAxis(xAxisNodes); // Incluir leyenda var tip = d3.tip() .attr('class', 'd3-tip') .offset([-10, 0]) .html(function(d) { return " EspVida " + d.pais +":
" + d.ExpVida + ""; }) //Crear objeto svg svg.call(tip); svg.append('g') .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')') .selectAll('circle') .data(data) .enter() .append('circle') .on('mouseover', tip.show) .on('mouseout', tip.hide) .each(function (d) { d3.select(this).attr({ cx: xScale(d.ExpVida), cy: yScale(d.RatioFert), r: popScale(d.Poblacion), fill: regionColor(d.Region), stroke: regionColor(d.Region), 'fill-opacity': 0.5, }); }); // Definir leyenda var legend = d3.select('svg') .append("g") .selectAll("g") .data(regionColor.domain()) .enter() .append('g') .attr('class', 'legend') .attr('transform', function(d, i) { var height = 20; var x = 640; var y = i * height; return 'translate(' + x + ',' + y + ')'; }); legend.append('rect') .attr('width', 20) .attr('height', 10) .style('fill', regionColor) .style('stroke', regionColor); legend.append('text') .attr('x', 30) .attr('y', 10) .text(function(d) { return d; }); }); // Insertar ejes function styleAxis(axisNodes) { axisNodes.selectAll('.domain') .attr({ fill: 'none', 'stroke-width': 0.5, stroke: 'black' }) axisNodes.selectAll('.tick line') .attr({ fill: 'none', 'stroke-width': 0.5, stroke: 'black' }); }