d3-dag
    Preparing search index...

    Interface Layering<NodeDatum, LinkDatum>

    An operator for layering a graph.

    Layering operators take a graph and a Separation function sep, and must assign every node in the graph a y-coordinate that respects sep along edges in the graph. In general the coordinates should try to respect the same order as returned by Graph#topological but it's not required. This should also return the total "height" of the layout, such that all nodes coordinates + sep(node, undefined) is less than height.

    The built-in layering operators should cover the majority of use cases, but you may need to implement your own for custom layouts.

    We illistrate implementing a custom layering operator where the nodes are already assigned their y-coordinate in their data. Note that this doesn't respect sep and an appropriate layering should, so this won't work as is.

    function exampleLayering<N extends { y: number }, L>(dag: Graph<N, L>, sep: Separation<N, L>): number {
    // determine span of ys
    let min = Infinity;
    let max = -Infinity;
    for (const node of dag) {
    const y = node.y = node.data.y;
    min = Math.min(min, y - sep(undefined, node));
    max = Math.max(max, y + sep(node, undefined));
    }
    // assign ys
    for (const node of dag) {
    node.y = -= min;
    }
    return max - min;
    }

    Type Parameters

    • in NodeDatum = never
    • in LinkDatum = never

    Hierarchy (View Summary)

    • layer a graph

      After calling this, every node should have a y coordinate that satisfies sep.

      Type Parameters

      • N
      • L

      Parameters

      • graph: Graph<N, L>

        the graph to layer

      • sep: Separation<N, L>

        the minimum separation between nodes

      Returns number

      height - the height after layering