Я строю что-то очень похожее на this. Мне бы хотелось сделать каждый узел либо его размером, как определено в json-файле, либо, если у него нет атрибута размера, а атрибут children в json - сумма всех его размеров. Как можно это сделать? Я пробовал различные методы, но не добавлял и не записывал их в JSON, что немного слабое, я не нашел ничего, что действительно сработало бы (любые предложения, hive mind?d3.js: размер родителей = сумма детей
ответ
Если ваши данные древовидную структуру, вы можете использовать Partition Layout для инициализации позиций и размеров узлов. d.value
, возвращаемый разделом для родительских узлов, по умолчанию представляет собой сумму значений для всех дочерних узлов, если вы правильно настроили value accessor function для возврата переменной данных которые вы хотите использовать для размера для листовых узлов.
Хотя стандартный дисплей в partition examples должен иметь прямоугольники или дуги пространства вместо узлов и ссылок, он по-прежнему имеет все основные функции других макетов иерархии. Поэтому, как только вы запустите макет вашего корня, чтобы создать свой массив узлов, вы можете запустить links function для расчета ссылок.
Если вам по-прежнему нужна компоновка с силовой установкой вместо статического дерева, вы можете просто передать свои узлы и ссылки на макет силы и запустить ее.
В сумме:
var root = /*root object read from JSON data*/;
var w,h; /*set appropriately */
var partition = d3.layout.partition()
.size([w,h])
.value(function(d){return d.size;})
.children(function(d){return d.children;})
//optional: this is the default, change as needed
.sort(null);
//optional: turns off sorting,
//the default is to sort children by descending size
var nodes = partition(root);
var links = partition.links(nodes);
initialize();
var force = d3.layout.force()
.nodes(nodes)
.links(links)
.size([w,h])
/*and any other customization*/
.start();
svg.on("tick", update);
Одно замечание. Значение x
, созданное разметкой разделов, предназначено для угла прямоугольника вместо центра круга. Поэтому, если вы разместите свои узлы на основе исходного значения x
, вы в конечном итоге родите родителей в крайнем левом углу их детей. Если после этого вы будете запускать все через силовой макет, он будет сортироваться в конце концов, но вы можете сосредоточить их с самого начала, установив d.x = d.x + d.dx/2
и d.y = d.y + d.dy/2
на все ваши узлы во время инициализации (например, используя вызов .each()
в вашем enter()
цепь). И, конечно, используйте d.value
для инициализации размера вашего узла (с соответствующим масштабом).
- 1. d3 js tree layout несколько родителей
- 2. d3.js - Карта, где значение родителя больше суммы его детей
- 3. Многоуровневые сопоставления в иерархии родителей/детей в D3 Возможно?
- 4. D3 Раскладная силовая компоновка Смешивание детей и родителей
- 5. Node размер пропорционален количество детей в D3
- 6. Предзаказ родителей и детей
- 7. Показать детей невидимых родителей
- 8. D3.js Размер макета холста изменить размер
- 9. XPath для выбора детей конкретных детей & родителей
- 10. CSS меню детей заставляющие родителей, чтобы изменить размер
- 11. SSAS: Иерархия родителей и детей
- 12. Детей Многих родителей JQuery селектор
- 13. упростить Jquery детей и родителей
- 14. Вектор родителей и детей C++
- 15. Круиз-контроль - проекты родителей/детей
- 16. разливочные ДИВ родителей и центр детей
- 17. d3.js svg не изменяет размер
- 18. d3.js размер graticule не реагирует
- 19. d3.js Максимальный размер стека вызовов превышен
- 20. Как изменить размер круга в d3.js
- 21. Как изменить размер прямоугольника в d3 js
- 22. D3.js регулирует размер текста: getBBox()?
- 23. d3.js алмаз символ размер функциональность
- 24. Выберите родителей объекта DOM и исключите детей выбранных родителей
- 25. Mongodb Поиск детей и возвращение детей и родителей
- 26. Сумма счета в D3
- 27. Как отобразить имя детей в D3 Treemap
- 28. d3.js - определение вложенной глубины (или дети детей)
- 29. Установите ширину ширины от детей до родителей, включая границу
- 30. SQL: выбор родителей и их детей