Масштаб в двухуровневом разделе в D3

Я пытаюсь заставить двухуровневый раздел в D3 работать с масштабом log.

Однако, похоже, он не работает должным образом.

Я указал логарифмическую шкалу для углов:

    var angle1 = d3.scale.log()
        .base(2.0)
        .domain([0, 2 * Math.PI])
        .range([root.x, root.x + root.dx]);

Однако это применимо только, когда углы пересчитываются при увеличении.

Я попытался изменить исходный масштаб раздела, но безуспешно.

Любые подсказки приветствуются. См. пример кода по ссылке ниже.

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

введите здесь описание изображения


person akuz    schedule 08.10.2013    source источник
comment
У вас не может быть логарифмической шкалы с 0 в домене.   -  person Lars Kotthoff    schedule 08.10.2013
comment
Итак, что мне делать, если я хочу, чтобы мой угол масштабировался в соответствии с журналом? У меня есть размер целочисленного значения › 1 в каждом узле. Я хочу, чтобы угол был пропорционален log_2 (размер).   -  person akuz    schedule 08.10.2013
comment
Вы можете создать вокруг него оболочку, которая возвращает 0 для 0 и для всего остального log_2 (размер).   -  person Lars Kotthoff    schedule 08.10.2013
comment
Выложил результаты своего расследования ниже. Спасибо, Ларс.   -  person akuz    schedule 15.10.2013


Ответы (1)


Макет раздела в D3 суммирует значения конечных узлов, чтобы вычислить макет элементов с дочерними элементами. По определению макета это должно быть так. Поэтому при вызове layout.nodes() учитываются только значения конечных узлов. Следовательно, можно масштабировать только конечные узлы (например, как log(count + 1)). Однако нелистовые узлы будут представлены суммами базовых значений. Единственным вариантом логарифмического масштабирования всех узлов было бы написание нового макета, который учитывал бы значение в каждом узле, а не суммировал значения дочерних узлов.

person akuz    schedule 15.10.2013