![Дерево неисправностей с использованием TikZ: рисование поддерева на нескольких уровнях](https://rvso.com/image/286350/%D0%94%D0%B5%D1%80%D0%B5%D0%B2%D0%BE%20%D0%BD%D0%B5%D0%B8%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B5%D0%B9%20%D1%81%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC%20TikZ%3A%20%D1%80%D0%B8%D1%81%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%B0%20%D0%BD%D0%B0%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F%D1%85.png)
На линиях дерева отказов в примере 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}