![TikZ を使用したフォールト ツリー: 複数のレベルでサブツリーを描画する](https://rvso.com/image/286350/TikZ%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%83%95%E3%82%A9%E3%83%BC%E3%83%AB%E3%83%88%20%E3%83%84%E3%83%AA%E3%83%BC%3A%20%E8%A4%87%E6%95%B0%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB%E3%81%A7%E3%82%B5%E3%83%96%E3%83%84%E3%83%AA%E3%83%BC%E3%82%92%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B.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}