Мне нужно оценить / раскрасить родителя в зависимости от значения его потомков.Проблема в том, что я использую root.descendants (), который является плоским массивом (то есть один массив содержит всех родителей и детей).Мне нужно знать: 1) определить, к какому родителю принадлежат дети 2) как читать значение детей (довольно легко, я могу решить это) 3) как изменить цвет родителя в зависимости от значения / цвета детей
Поскольку я использую root.descendants (), я попытался принудительно получить доступ к родителю и потомку, как показано в моей веб-ссылке.Этот подход не масштабируется.Я также пытался использовать root.links (), но это возвращает ошибки.Я считаю, что это все еще плоский массив.Я также пробовал гуглить «древовидные» и корневые функции, но не смог найти встроенные функции, которые решали мою проблему.
Пример кода:
var link = g.selectAll(".link")
.data(root.descendants().slice(1))
// .data(root.links())
.enter().append("path")//if data equals sum choose
.attr("class", function(d,i){
if(i==24||i==3)return "link1";else return "link";})
.attr("d", function(d) {
return "M" + project(d.x, d.y)
+ "C" + project(d.x, (d.y + d.parent.y) / 2)
+ " " + project(d.parent.x, (d.y + d.parent.y) / 2)
+ " " + project(d.parent.x, d.parent.y);
});
Мой код находится по адресу:https://blockbuilder.org/MyAkosombo/fd2573ba5e6ed68e3930015f5e0601f2
Я вручную раскрасил ссылку / путь красным, чтобы продемонстрировать что-то похожее на то, что я хочу сделать.Красная ссылка - это то, что я называю ссылкой «root-parent-child».
Значения - Атрибуция цвета 0-3 - Зеленый 4-6 - Желтый 7-10 - Красный
Случай 1: Ребенок1 = 3/10, Ребенок2 = 2/10, Ребенок3 = 1/10, затем => Родитель123 = 2/10 (средний), Зеленый
Случай 2: Ребенок4 = 5,5 / 10, Ребенок5 =9/10 затем => Parent45 = 7,25 / 10 (в среднем), красный