Я могу использовать d3, чтобы нарисовать круговую диаграмму или график, я могу даже нарисовать круговую диаграмму в каждом узле графика, как показано на рисунке here.Как нарисовать внутренние узлы графа?
Возможно ли создать функцию многократного использования, которая генерирует круговую диаграмму и присоединяет ее результат к каждому узлу? Таким образом, код диаграммы может быть повторно использован, например, в галерее диаграмм.
var node = svg.selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", "node");
// draw pie chart
node.selectAll("path")
.data(function(d, i) {return pie(d.proportions); })
.enter()
.append("svg:path")
.attr("d", arc)
.attr("fill", function(d, i) { return color(d.data.group); });;
Из приведенного выше кода, я попытался следующий код, который не работает
var node = svg.selectAll(".node")
.data(graph.nodes)
.enter().append("g")
.attr("class", "node")
.call(drawPie(function(d) { return d.proportions; }));
function drawPie(d) {
this.selectAll("path")
.data(function(d, i) {return pie(d.proportions); })
.enter()
.append("svg:path")
.attr("d", arc)
.attr("fill", function(d, i) { return color(d.data.group); });;
}
Если вы прочтете документацию по выбору.call, вы увидите, что он «Вызывается указанная функция один раз, передавая текущий выбор вместе с любыми необязательными аргументами». Он передает выбор как первый аргумент, а не датум. Но в любом случае вы пытаетесь вызвать «null», потому что это то, что возвращается «drawPie», и именно по этой причине ваш код не работает. –