Дерево неисправностей с использованием TikZ: рисование поддерева на нескольких уровнях

Дерево неисправностей с использованием TikZ: рисование поддерева на нескольких уровнях

На линиях дерева отказов в примере TiKZ (http://www.texample.net/tikz/examples/fault-tree/), я сделал следующее дерево неисправностей

 \node (g1) [event] {Project fails \\ E0}
            child {node (e1) {No legal permit \\(E1)}
                child {node (e11) {No legal permit A \\ (E11)}}
                child {node (e12) {No legal permit B \\ (E12)}}
                child {node (e13) {No legal permit C \\ (E13)}}
            }
        child {node (e2) {No financing \\(E2)}
            child {node (e21) {No financing A \\ (E21)}}
            child {node (e22) {No financing B \\ (E22)}}
            child {node (e23) {No financing C \\ (E23)}}
        }
        child {node (e3) {No collaboration}
            child {node (e31) {Low incentive}}
            child {node (e32) {Low trust}}
        };

Однако узлы дерева перекрывают друг друга. Я пробовал уменьшить расстояние между узлами, но в данном случае это выглядит не так элегантно. Есть ли способ, чтобы поддерево E2 могло быть на уровне ниже поддерева E1? введите описание изображения здесь

решение1

Это то, что вам нужно? Кажется, ваш код не отражает изображение, которое вы опубликовали. Это решение попыталось сгенерировать нужное вам изображение и переместить поддерево E2 ниже поддерева E1. Это достигается с помощью опции [level distance=xx]в e2узле.

child[level distance=70mm]  {node (e2) {No financing \\(E2)}

Та же идея применима, если требуется сместить поддерево E3 немного влево. Но [sibling distance=xx]здесь используется

child[sibling distance=30mm] {node (e3) {No collaboration}

Если ворота не требуются, то удалите код в последней части.

Код

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{trees,calc,shadings,shapes.gates.logic.US,positioning,arrows}


\begin{document}

\begin{tikzpicture}
 [
% Gates and symbols style
    and/.style={and gate US,thick,draw,fill=red!60,rotate=90,
        anchor=east,xshift=-1mm},
    or/.style={or gate US,thick,draw,fill=blue!60,rotate=90,
        anchor=east,xshift=-1mm},
    be/.style={circle,thick,draw,fill=green!60,anchor=north,
        minimum width=0.7cm},
% Label style
    label distance=3mm,  every label/.style={blue},
% Event style
    event/.style={rectangle,thick,draw,fill=yellow!20,text width=2cm, text centered,font=\sffamily,anchor=north},
% Children and edges style
    edge from parent/.style={very thick,draw=black!70},
    edge from parent path={(\tikzparentnode.south) -- ++(0,-1.05cm)-| (\tikzchildnode.north)},
    level 1/.style={sibling distance=5cm,level distance=1.5cm, growth parent anchor=south,nodes=event},
    level 2/.style={sibling distance=3cm, level distance=2cm},
    level 3/.style={sibling distance=3cm},
    level 4/.style={sibling distance=3cm}
    ]
%% Draw events and edges
 \node (g1) [event] {Project fails \\ E0}
            child{node (e1) {No legal permit \\(E1)} 
                child {node (e11) {No legal permit A \\ (E11)}}
                child {node (e12) {No legal permit B \\ (E12)}}
                child {node (e13) {No legal permit C \\ (E13)}}
            }
        child[level distance=70mm]  {node (e2) {No financing \\(E2)}
            child {node (e21) {No financing A \\ (E21)}}
            child {node (e22) {No financing B \\ (E22)}}
            child {node (e23) {No financing C \\ (E23)}}
        }
        child {node (e3) {No collaboration\\ (E3)}
            child {node (e31) {Low incentive\\ (E31)}}
            child {node (e32) {Low trust\\ (E32)}}
        };
%  Remove what follows if no gates are required
   \node [or]   at (g1.south)   []  {};
   \node [or]   at (e1.south)   []  {};
   \node [or]   at (e2.south)   []  {};
   \node [and]  at ([yshift=1mm]e21.south)  []  {};
   \node [and]  at ([yshift=1mm]e22.south)  []  {};
   \node [and]  at ([yshift=1mm]e23.south)  []  {};
   \node [and]  at (e3.south)   []  {};
   \node [be]   at (e11.south)  []  {};
   \node [be]   at (e12.south)  []  {};
   \node [be]   at (e13.south)  []  {};
   \node [be]   at (e31.south)  []  {};
   \node [be]   at (e32.south)  []  {};
\end{tikzpicture}

\end{document}

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

Связанный контент