2016-12-15 7 views
0

Попытка добавить текстовые данные выше пути в этом Масштабируемые Sunburst графике: Zoomable Sunburst У меня есть этот код:Добавить путь, но также текст над дорогой - D3js v3?

d3.json(jsonUrl, function(error, data) { 
    if (error) { 
     throw error; 
    } 

    svg.selectAll("g") 
     .data(partition.nodes(data)) 
     .enter() 
     .append("g") 
     .append("path") 
     .attr("d", arc) 
     .style("fill", function(d) { 
      return color((d.children ? d : d.parent).name); 
     }) 
     .on("click", self.click) 
     .append("text") 
     .text(function(d) { 
      //console.dir(d); 
      return d.name + "\n" + formatNumber(d.value); 
     }); 
    }); 

Но это не работает. Текст не отображается. Я знаю, что это нечто подобное, но я делаю что-то неправильно. Я использую D3js версии 3 на данный момент.

Некоторые идеи?

+3

попробовать присоединяя textPath как дочерний элемент «текст». поместите текст .text в элемент textPath. –

+2

Помимо ответа Роберта Лонгсона, замаскированного под комментарий, вы должны знать, какие элементы могут быть родителями и какие элементы могут быть детьми. Вы не можете ** добавить текст в путь. Проверьте здесь: http://stackoverflow.com/documentation/d3.js/2537/core-svg-concepts-used-in-d3-js-visualization/17339/correctly-appending-an-svg-element#t=201612151331295707414 –

+0

Пробный .append («текст»). Append («textPath»). Text (/ * получить текст для пути * /), и он помещает тег в subtag внутри тега , который, конечно, не работает. Я не вижу текст, хотя он отображается в Firebug в разделе html. – Vlad

ответ

0

Я только что нашел этот пример Donut Chart и изменил некоторые части в моем коде. Хотя он выглядит загроможденным, он выполняет свою работу. Может быть, с некоторыми полирующими я мог бы получить достойную внешность:

Zoomable sunburst with text

Вот мой код:

var svg = d3.select("body") 
     .append("svg") 
     .attr("width", width) 
     .attr("height", height) 
     .append("g") 
     .attr("transform", "translate(" + (width/2) + "," + (height/2) + ")"), 
g = null; 

d3.json(dataFile, function(error, data) { 
    if (error) { 
     throw error; 
    } 

    g = svg.selectAll(".arc") 
     .data(partition.nodes(data)) 
     .enter() 
     .append("g") 
     .attr("class", "arc"); 

    g.append("path") 
     .attr("d", arc) 
     .style("fill", function(d) { 
      return color((d.children ? d : d.parent).name); 
     }) 
     .on("click", self.click); 

    g.append("text") 
     .attr("transform", function (d) { 
      return "translate(" + arc.centroid(d) + ")"; 
     }) 
     .attr("dy", ".35em") 
     .text(function (d) { 
      return d.name + "\n" + formatNumber(d.value); 
     }); 
});