// Cógido // Definición de las dimensiones var margin = { top: 10, right:10, bottom: 40, left: 40 }, width = 850 - margin.left - margin.right, height = 450 - margin.top - margin.bottom; // svg var svg = d3.select('#realchart') .append('svg') .attr('width', width + margin.left + margin.right) // width + margin .attr('height', height + margin.top + margin.bottom) // height + margin .append('g') // se añade un grupo .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')'); d3.csv('MediasDecada.csv', function(error, csvData) { if (error) throw error; // Escalas var xScale = d3.scaleLinear() .domain([1, 6]) .range([margin.left, width-margin.right]); var yScale = d3.scaleSqrt() .domain([0, 80000]) .range([height-margin.bottom, margin.top]); var rScale = d3.scaleSqrt() .domain(d3.extent(csvData, function(d) { return +d.population; })) .range([4, 30]); var colorScale = d3.scaleOrdinal() .domain(['South Asia', 'Europe & Central Asia', 'Middle East & North Africa', 'East Asia & Pacific', 'Sub-Saharan Africa', 'Latin America & Caribbean', 'North America']) .range(['#ed2421', '#039969', '#e5e109', '#fbb754', '#d86498', '#6a0375', '#3882a6']); // Ejes var xAxis = d3.axisBottom(xScale); var yAxis = d3.axisLeft(yScale); svg.append('g') .attr('class', 'x axis') .attr('transform', 'translate(' + 0 + ',' + yScale.range()[0] + ')') .call(xAxis); svg.append('g') .append("text") .attr("class", "label") .attr("x", width) .attr("dy", "33em") .style("text-anchor", "end") .style("font-size","12px") .text("Nacimientos por mujer (Tasa de Fertilidad)"); svg.append('g') .attr('class', 'y axis') .attr('transform', 'translate(' + xScale.range()[0] + ',' + 0 + ')') .call(yAxis); svg.append('g') .append("text") .attr("class", "label") .attr("transform", "rotate(-90)") .attr("dy", "-2em") .style("text-anchor", "end") .style("font-size","12px") .text("GDP per capita (US$ Actuales)"); // Tooltip var tooltip = d3.select('body').append('div') .style('position','absolute') .style('padding','0 10px') .style('opacity',0) .attr('class','tooltip') // Circulos svg.selectAll('circle') .data(csvData) .enter() .append('circle') .attr('cx', function(d) {return xScale(d.births_per_woman)}) .attr('cy', function(d) {return yScale(d.gdp_capita)}) .attr('r', function(d) {return rScale(d.population)}) .style('fill', function(d) {return colorScale(d.region)}) .style('stroke', 'white') .style('stroke-opacity', 0.7) .style('opacity', 0.7) // Mouseover - Mouseout - transition .on('mouseover', function(d) { tooltip.transition() .style('opacity', 0.9) tooltip.html(''+d.region+' ('+d.year+')'+'
GDP per capita: '+d3.format(".2f")(d.gdp_capita/1000)+'k US$ '+'
Tasa Fertilidad: '+d3.format(".2f")(d.births_per_woman)+'
Población: '+d3.format(".2f")(d.population/1000000)+' mill. habitantes') .style('left',(600) + 'px') .style('top', (300) + 'px') }) .on('mouseout', function(d) { tooltip.transition() .style('opacity', 0) }) }); // Linea ab (Tasa de Reemplazo) line = svg.append("line") .style("stroke", "red") .style("stroke-dasharray", "1") .attr("x1", 170 + margin.left) .attr("y1", 0) .attr("x2", 170 + margin.left) .attr("y2", 380);