// Definimos las dimensiones var margin = { top: 10, right:20, bottom: 20, left: 20 }, width = 900 - margin.left - margin.right, height = 900 - margin.top - margin.bottom; // Se inserta el svg var svg = d3.select("svg") //se le asignar los atributos de tama�o .attr("width", width + margin.left + margin.right) .attr("height", height + margin.top + margin.bottom) //se le asigna una posicion en el marco .attr("transform", "translate(" + margin.left + "," + margin.top + ")") .attr("font-family", "Amatic SC") .attr("font-size", "15") .attr("text-anchor", "middle"); var color = d3.scaleOrdinal(d3.schemeCategory20); var pack = d3.pack() .size([width, height]) .padding(1.5); //Tratamiento del fichero para mostrar el grafico d3.csv("MARNOBA_Muestreos.csv", function(error, classes) { if (error) throw error; //Se crea la estructura jerarquica con los objetos necesarios //para las burbujas, etiquetas, .... var root = d3.hierarchy({children: classes}) .sum(function(d) { return d.N_item; }) .each(function(d) { if (id = d.data.ItemMarnoba) { var id, i = id.lastIndexOf(); d.id = id; d.N_item = d.data.N_item d.package = d.data.CategoriaMarnoba; d.class = d.data.ItemMarnoba; } }); //Se crean los nodos que recogen la información y que llevarán //forma de burbuja. Un nodo por ItemMarnoba var node = svg.selectAll(".node") .data(pack(root).leaves()) .enter().append("g") .attr("class", "node") .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; }); //Tooltip nos mostrara la información en detalle cuando //pasemos el ratón sobre la burbuja var div = d3.select("#tooltip"); node.append("circle") //características base de la burbuja. //El color se correspondera con la categoria Marnoba .attr("id", function(d) { return d.id; }) .attr("r", function(d) { return d.r; }) .style("fill", function(d) { return color(d.package); }) //Acciones a realizar cuando el ratón se situa //sobre la burbuja .on("mouseover", function(d) { // Black stroke when mouse over circle d3.select(this) .transition().duration(200) .attr("r", function(d) { return d.r + 1; }) .style("stroke", "black") .style("stroke-width", 2); div.transition().duration(100) .style("opacity", 1); div.html("" + d.package + " Subcategoria: " + d.class + " Objetos: " + d.N_item + "") .style("left", w/2 + "px") .style("top", 0 + "px"); }) //Acciones a realizar cuando el ratón se mueve //sobre la burbuja .on("mousemove", function(d) { div.transition() .duration(100) .style("opacity", 1); div.html("" + d.package + " subcategoria " + d.class + " Objetos " + d.N_item+ "") .style("left", w/2 + "px") .style("top", 0 + "px"); }) //Acciones a realizar cuando el ratón sale de la burbuja //Esta recupera sus propiedades iniciales. .on("mouseout", function(d) { d3.select(this) .transition().duration(200) .attr("r", function(d){ return d.r; }) .style("stroke", function(d) { return color(d.package); }) .style("stroke-width", 1); div.transition() .duration(500) .style("opacity", 0); }); //Etiqueta de cada burbuja con el nombre del item //al que corresponde node.append("text") .attr("clip-path", function(d) { return "url(#clip-" + d.id + ")"; }) .selectAll("tspan") .data(function(d) { return d.class.split(/(?=[A-Z][^A-Z])/g); }) .enter().append("tspan") .attr("x", 0) .attr("y", function(d, i, nodes) { return 13 + (i - nodes.length / 2 - 0.5) * 10; }) .text(function(d) { return d; }); });