side examples event donut chart c3js bar javascript d3.js pie-chart c3

javascript - examples - Cómo aumentar el tamaño del segmento circular en el control deslizante en d3



d3 chart (2)

Creé un gráfico circular usando d3. ¿Cómo aumentar el tamaño del segmento circular sobre el vuelo estacionario? Como puede ver, el segmento verde es muy pequeño, así que quiero cambiarlo como un segmento rojo. ¿Cómo puedo hacer esto?

Mi código:

var w = 400; var h = 400; var r = h/2; var color = d3.scale.category20c(); var data = [{"label":"Category A", "value":20}, {"label":"Category B", "value":50}, {"label":"Category C", "value":30}, {"label":"Category A", "value":20}, {"label":"Category B", "value":50}, {"label":"Category C", "value":30}, {"label":"Category A", "value":20}, {"label":"Category B", "value":50}, {"label":"Category C", "value":5}]; var vis = d3.select(''#chart'').append("svg:svg").data([data]).attr("width", w).attr("height", h).append("svg:g").attr("transform", "translate(" + r + "," + r + ")"); var pie = d3.layout.pie().value(function(d){return d.value;}); // declare an arc generator function var arc = d3.svg.arc().outerRadius(r); var arcOver = d3.svg.arc() .outerRadius(r + 9); // select paths, use arc generator to draw var arcs = vis.selectAll("g.slice").data(pie).enter().append("svg:g").attr("class", "slice"); arcs.append("svg:path") .attr("fill", function(d, i){ return color(i); }) .attr("d", function (d) { // log the result of the arc generator to show how cool it is :) console.log(arc(d)); return arc(d); }) .on("mouseenter", function(d) { d3.select(this) .attr("stroke","white") .transition() .duration(1000) .attr("d", arcOver) .attr("stroke-width",6); }) .on("mouseleave", function(d) { d3.select(this).transition() .attr("d", arc) .attr("stroke","none"); });;

Hay un ejemplo en js fiddle: jsfiddle Gracias.


Ahora este es el código correcto. Pruébalo ..ok

<!DOCTYPE html> <html> <head> <title>Dsnap - Charts</title> </head> <body> <div id="wrapper"> </div> <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script> <script> var canvas = d3.select(''#wrapper'') .append(''svg'') .attr({ ''width'': 650, ''height'': 500 }); var data = [{ "label": "one", "value": 40 }, { "label": "two", "value": 30 }, { "label": "three", "value": 30 }]; var colors = [''red'', ''blue'']; var colorscale = d3.scale.linear().domain([0, data.length]).range(colors); var arc = d3.svg.arc() .innerRadius(0) .outerRadius(100); var arcOver = d3.svg.arc() .innerRadius(0) .outerRadius(150 + 10); var pie = d3.layout.pie() .value(function(d) { return d.value; }); var renderarcs = canvas.append(''g'') .attr(''transform'', ''translate(440,200)'') .selectAll(''.arc'') .data(pie(data)) .enter() .append(''g'') .attr(''class'', "arc"); renderarcs.append(''path'') .attr(''d'', arc) .attr(''fill'', function(d, i) { return colorscale(i); }) .on("mouseover", function(d) { d3.select(this).transition() .duration(1000) .attr("d", arcOver); }) .on("mouseout", function(d) { d3.select(this).transition() .duration(1000) .attr("d", arc); }); renderarcs.append(''text'') .attr(''transform'', function(d) { var c = arc.centroid(d); console.log(c); return "translate(" + c[0] + "," + c[1] + ")"; }) .text(function(d) { return d.value + "%"; }); </script> </body> </html>


Acabo de encontrar una solución para mi problema.

Cambié startAngle y endAngle en d3:

.on("mouseenter", function(d) { var endAngle = d.endAngle + 0.2; var startAngle = d.startAngle - 0.2; var arcOver = d3.svg.arc() .outerRadius(r + 9).endAngle(endAngle).startAngle(startAngle); d3.select(this) .attr("stroke","white") .transition() .duration(1000) .attr("d", arcOver) .attr("stroke-width",6); })

Ejemplo de trabajo: jsfiddle