2013-03-03 9 views
5

Sto cercando di adattare questo schema Chord da Mike Bostock:rotanti percorsi di testo in diagramma accordo d3.js senza consueto svg: testo

voglio avere le etichette di testo che ruotano verso l'esterno come questo diagramma accordo:

http://bost.ocks.org/mike/uberdata/

enter image description here

C'è un esempio qui

http://bl.ocks.org/mbostock/910126

enter image description here

Tuttavia, la trasformazione viene fatto usando il formato SVG: Testo:

g.append("svg:text") 
     .each(function(d) { d.angle = (d.startAngle + d.endAngle)/2; }) 
     .attr("dy", ".35em") 
     .attr("text-anchor", function(d) { return d.angle > Math.PI ? "end" : null; }) 
     .attr("transform", function(d) { 
     return "rotate(" + (d.angle * 180/Math.PI - 90) + ")" 
      + "translate(" + (r0 + 26) + ")" 
      + (d.angle > Math.PI ? "rotate(180)" : ""); 
     }) 
     .text(function(d) { return nameByIndex[d.index]; }); 

Quello che sto cercando di adattarsi usi "testo" e "textPath" e non mi sembra essere in grado di aggiungere semplicemente un attributo transform/rotate. L'aggiunta di questa linea

.attr("transform",function(d,i){return "rotate(90)";}) 

per il codice qui sotto non fa nulla:

// Add a text label. 
     var groupText = group.append("text") 
      .attr("x", 6) 
      .attr("dy", 15); 

      groupText.append("textPath") 
      .attr("xlink:href", function(d, i) { return "#group" + i; }) 

      .text(function(d, i) { return cities[i].country; }); 

Tutte le idee come posso ruotare il testo verso l'esterno in modo da piccoli gruppi di accordi etichette di testo possono essere visualizzati senza essere ricompattato o (come è la soluzione originale) disattivata del tutto?

risposta

5

Penso che si sta cercando this example by Mike Bostock

Per quanto riguarda la modifica del codice di accordo iniziale, la seguente modifica dovrebbe fare quello che vuoi:

// Add a text label. 
// var groupText = group.append("text") 
//  .attr("x", 6) 
//  .attr("dy", 15); 

//groupText.append("textPath") 
// .attr("xlink:href", function(d, i) { return "#group" + i; }) 
// .text(function(d, i) { return cities[i].name; }); 

// Remove the labels that don't fit. :(
//groupText.filter(function(d, i) { return groupPath[0][i].getTotalLength()/2 - 16 < this.getComputedTextLength(); }) 
// .remove(); 

group.append("text") 
    .each(function(d) { d.angle = (d.startAngle + d.endAngle)/2; }) 
    .attr("dy", ".35em") 
    .attr("transform", function(d) { 
    return "rotate(" + (d.angle * 180/Math.PI - 90) + ")" 
     + "translate(" + (innerRadius + 26) + ")" 
     + (d.angle > Math.PI ? "rotate(180)" : ""); 
    }) 
    .style("text-anchor", function(d) { return d.angle > Math.PI ? "end" : null; }) 
    .text(function(d, i) { return cities[i].name; });