PGF/TikZ Manual

The TikZ and PGF Packages
Manual for version 3.1.10

Libraries

76 Tree Library

  • TikZ Library trees

  • \usetikzlibrary{trees} % and plain
    \usetikzlibrary[trees] % Cont

    This packages defines styles to be used when drawing trees.

76.1 Growth Functions

The package trees defines two new growth functions. They are installed using the following options:

  • /tikz/grow via three points=one child at (x ) and two children at (y) and (z)(no default)

  • This option installs a growth function that works as follows: If a parent node has just one child, this child is placed at x. If the parent node has two children, these are placed at y and z. If the parent node has more than two children, the children are placed at points that are linearly extrapolated from the three points x, y, and z. In detail, the position is \(x + \frac {n-1}{2}(y-x) + (c-1)(z-y)\), where \(n\) is the number of children and \(c\) is the number of the current child (starting with \(1\)).

    The net effect of all this is that if you have a certain “linear arrangement” in mind and use this option to specify the placement of a single child and of two children, then any number of children will be placed correctly.

    Here are some arrangements based on this growth function. We start with a simple “above” arrangement:

    (-tikz- diagram)

    \usetikzlibrary {trees}
    \begin{tikzpicture}[grow via three points={%
    one child at (0,1) and two children at (-.5,1) and (.5,1)}
    ]
    \node at (0,0) {one} child;
    \node at (0,-1.5) {two} child child;
    \node at (0,-3) {three} child child child;
    \node at (0,-4.5) {four} child child child child;
    \end{tikzpicture}

    The next arrangement places children above, but “grows only to the right”.

    (-tikz- diagram)

    \usetikzlibrary {trees}
    \begin{tikzpicture}[grow via three points={%
    one child at (0,1) and two children at (0,1) and (1,1)}
    ]
    \node at (0,0) {one} child;
    \node at (0,-1.5) {two} child child;
    \node at (0,-3) {three} child child child;
    \node at (0,-4.5) {four} child child child child;
    \end{tikzpicture}

    In the final arrangement, the children are placed along a line going down and right.

    (-tikz- diagram)

    \usetikzlibrary {trees}
    \begin{tikzpicture}[grow via three points={%
    one child at (-1,-.5) and two children at (-1,-.5) and (0,-.75)}
    ]
    \node at (0,0) {one} child;
    \node at (0,-1.5) {two} child child;
    \node at (0,-3) {three} child child child;
    \node at (0,-4.5) {four} child child child child;
    \end{tikzpicture}

    These examples should make it clear how you can create new styles to arrange your children along a line.

  • /tikz/clockwise from=angle(no default)

  • This option also causes children to be arranged on a circle. However, the rule for placing children is simpler than with the grow cyclic style: The first child is placed at angle at a distance of \tikzleveldistance. The second child is placed at the same distance from the parent, but at angle angle\({}-{}\)\tikzsiblingangle. The third child is displaced by another \tikzsiblingangle in a clockwise fashion, and so on.

    Note that this function will not rotate the coordinate system.

    (-tikz- diagram)

    \usetikzlibrary {trees}
    \begin{tikzpicture}
    \node {root}
    [clockwise from=30,sibling angle=30]
    child {node {$30$}}
    child {node {$0$}}
    child {node {$-30$}}
    child {node {$-60$}};
    \end{tikzpicture}
  • /tikz/counterclockwise from=angle(no default)

  • Works the same way as clockwise from, but sibling angles are added instead of subtracted.

76.2 Edges From Parent

The following styles can be used to modify how the edges from parents are drawn:

  • /tikz/edge from parent fork left(style, no value)

  • Behaves similarly to the previous styles.

  • /tikz/edge from parent fork up(style, no value)

  • Behaves similarly to the previous styles.