-
Notifications
You must be signed in to change notification settings - Fork 1
RU Пакетная компоновка
Вики ▸ Справка по API ▸ Компоновки ▸ Пакетная компоновка
English | Русский
Реализует алгоритм иерархического связывания рёбер Данни Холтена. Для каждой входной связи вычисляется путь по дереву вверх по иерархии до ближайшего общего родителя, а потом вниз до целевого узла. Затем полученная последовательность узлов может использоваться в сочетании с другими иерархическими компоновками, например, кластерной для генерирования пучка сплайнов между узлами:
В качестве примера можно посмотреть на визуализацию программных зависимостей.
# d3.layout.bundle()
Конструирует новую пакетную компоновку по умолчанию. На текущий момент пакетная компоновка не хранит состояния, поэтому имеет только конфигурацию по умолчанию. Возвращённый объект компоновки является одновременно объектом и функцией. Это значит, что вы можете вызвать компоновку как и любую другую функцию и в тоже время компоновка имеет дополнительные методы, изменяющие её поведение. Подобно другим классам в D3, компоновки следуют шаблону цепочечных методов, по которому методы-установщики возвращают саму компоновку, что позволяет выполнять несколько сеттеров в лаконичном выражении.
# bundle(links)
Вычисляет пакетную компоновку на указанном массиве связей links, возвращает вычисленный путь из источника в цель через наименьшего общего предка. Каждая входная связь должна иметь два атрибута:
- source — исходный узел.
- target — целевой узел.
Кроме того, каждый узел должен иметь один атрибут:
- parent — родительский узел.
Это подмножество полей, генерируемых иерархическими компоновками. Возвращаемое значение компоновки является массивом путей, где каждый путь представляется массивом узлов. Таким образом, пакетная компоновка непосредственно не вычисляет базисные сплайны; вместо этого она возвращает массив узлов, который неявно представляет контрольные точки сплайна. Вы можете использовать этот массив в сочетании с d3.svg.line или d3.svg.line.radial для самостоятельного генерирования сплайнов. Например, если вы используете кластерную компоновку:
var cluster = d3.layout.cluster()
.size([2 * Math.PI, 500]);
Подходящий генератор линий для иерерхических связывания рёбер может быть таким:
var line = d3.svg.line.radial()
.interpolate("bundle")
.tension(0.85)
.radius(function(d) { return d.y; })
.angle(function(d) { return d.x; });
Пакетная компоновка спроектирована для совместной работы с режимом интерполяции «bundle» генератора линий, хотя с технической точки зрения можно использовать любую функцию интерполяции или генератор фигур. Параметр силы холтеновского пакета влияет на натяжение линии.