[Tex/LaTex] Tikz tree diagram with 4 levels

tikz-pgftikz-treestrees

This is the first time I use TikZ so please bear with me.

With the following code:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,positioning,shadows,trees}

\tikzset{
  basic/.style  = {draw, text width=2cm, drop shadow, font=\sffamily, rectangle},
  root/.style   = {basic, rounded corners=2pt, thin, align=center,
                   fill=green!30},
  level 2/.style = {basic, rounded corners=6pt, thin,align=center, fill=green!60,
                   text width=8em},
  level 3/.style = {basic, thin, align=left, fill=pink!60, text width=6.5em}
}

\begin{document}
\begin{tikzpicture}[
  level 1/.style={sibling distance=40mm},
  edge from parent/.style={->,draw},
  >=latex]

% root of the the initial tree, level 1
\node[root] {Fuselage}
% The first level, as children of the initial tree
  child {node[level 2] (c1) {Functions}}
  child {node[level 2] (c2) {Requirements}};

% The second level, relatively positioned nodes
\begin{scope}[every node/.style={level 3}]
\node [below of = c1, xshift=15pt] (c11) {Shell containing payload};
\node [below of = c11] (c12) {Protection against climate};
\node [below of = c12] (c13) {Central structural member};
\node [below of = c13] (c14) {Houses aircraft systems};
\node [below of = c2, xshift=15pt] (c21) {Low drag};
\node [below of = c21] (c22) {Structural};
\node [below of = c22] (c23) {Costs};

\end{scope}

% lines from each level 1 node to every one of its "children"
\foreach \value in {1,...,4}
  \draw[->] (c1.195) |- (c1\value.west);

\foreach \value in {1,...,3}
  \draw[->] (c2.195) |- (c2\value.west);

\end{tikzpicture}
\end{document}

I get this:

enter image description here

How would I go about adding another set of children nodes to get something like this structure:

enter image description here

Best Answer

\documentclass[border=5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,shapes,positioning,shadows,trees}

\tikzset{
  basic/.style  = {draw, text width=2cm, drop shadow, font=\sffamily, rectangle},
  root/.style   = {basic, rounded corners=2pt, thin, align=center,
                   fill=green!30},
  level 2/.style = {basic, rounded corners=6pt, thin,align=center, fill=green!60,
                   text width=8em},
  level 3/.style = {basic, thin, align=left, fill=pink!60, text width=6.5em}
}

\begin{document}
\begin{tikzpicture}[
  level 1/.style={sibling distance=130mm},
  level 2/.append style={sibling distance=40mm},
  edge from parent/.style={->,draw},
  >=latex]

% root of the the initial tree, level 1
\node[root] {Fuselage}
% The first level, as children of the initial tree
  child {node[level 2] (ch1) {Requirements}
    child {node[level 2] (c1) {Costs}}
    child {node[level 2] (c2) {Structural}}
    child {node[level 2] (c3) {Low Drag}}
  }
  child {node[level 2] (ch2) {Houses}
    child {node[level 2] (c4) {Central}}
    child {node[level 2] (c5) {Protection}}
    child {node[level 2] (c5) {Shell}}
  };

% The second level, relatively positioned nodes
\begin{scope}[every node/.style={level 3}]
\node [below = of  c1, xshift=15pt] (c11) {Shell containing payload};
\node [below = of  c11] (c12) {Protection against climate};
\node [below = of  c12] (c13) {Central structural member};
\node [below = of  c13] (c14) {Houses aircraft systems};

\node [below = of  c2, xshift=15pt] (c21) {Test text a};
\node [below = of  c21] (c22) {Test text b};
\node [below = of  c22] (c23) {Test text c};

\node [below = of  c3, xshift=15pt] (c31) {Test text a};
\node [below = of  c31] (c32) {Test text b};
\node [below = of  c32] (c33) {Test text c};
\node [below = of  c33] (c34) {Test text d};

\node [below = of  c4, xshift=15pt] (c41) {Test text a};
\node [below = of  c41] (c42) {Test text b};
\node [below = of  c42] (c43) {Test text c};
\node [below = of  c43] (c44) {Test text d};
\node [below = of  c44] (c45) {Test text e};

\end{scope}

% lines from each level 1 node to every one of its "children"
\foreach \value in {1,...,4}
  \draw[->] (c1.195) |- (c1\value.west);

\foreach \value in {1,...,3}
  \draw[->] (c2.195) |- (c2\value.west);

\foreach \value in {1,...,4}
  \draw[->] (c3.195) |- (c3\value.west);
\foreach \value in {1,...,5}
  \draw[->] (c4.195) |- (c4\value.west);
\end{tikzpicture}
\end{document}

enter image description here

As a side note, change from the not so good of= syntax to the =of syntax (from the positioning library), as I did in my example code.