使用 Tikz 进行决策树

使用 Tikz 进行决策树

我正在尝试绘制决策树。我已经非常接近最终结果了:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees,shapes,snakes}
\begin{document}
\tikzstyle{level 1}=[level distance=1.5cm, sibling distance=2.5cm]
\tikzstyle{level 2}=[level distance=1cm, sibling distance=2cm]
\tikzstyle{level 3}=[level distance=1cm, sibling distance=1.5cm]
\tikzstyle{bag} = [rectangle, text width=4em, text centered, draw]
\tikzstyle{decision} = [rectangle, minimum height=8pt, minimum width=8pt, fill, inner sep=0pt]
\tikzstyle{choice} = [circle, minimum width=8pt, fill, inner sep=0pt]
\tikzstyle{end} = [regular polygon, regular polygon sides=3, minimum width=8pt, fill, inner sep=0pt]

\begin{tikzpicture}[grow=right,child anchor=west]
\tiny
\node[bag]{Decision}
child {
    node[decision]{}
    child {
        node[bag]{Option 1}
            child{
                node[choice]{}
                child {
                    node[bag]{Outcome 1}
                    child {
                        node[end]{}
                    }
                }
                child {
                    node[bag]{Outcome 2}
                    child {
                        node[end]{}
                    }
                }
            }
    }
    child {
        node[bag]{Option 2}
            child{
                node[choice]{}
                child {
                    node[bag]{Outcome 3}
                    child {
                        node[end]{}
                    }
                }
                child {
                    node[bag]{Outcome 4}
                    child {
                        node[end]{}
                    }
                }
            }
        }
    };
\end{tikzpicture}
\end{document}

我遇到的唯一问题是,我无法找到旋转最后一个节点(末端)的方法,该节点呈三角形,因为它应该指向其父节点,而不是向上。有什么想法吗?

答案1

您可以end使用选项旋转节点shape border rotate=90(与不同rotate=90,这不会移动树使用的锚点,因此形状将正确对齐)。

这会在三角形的尖端和树的边缘之间留下一个小间隙。为了避免这种情况,您可以设置outer sep=-\pgflinewidth,这会将锚点稍微移动到形状内部,这样树的边缘和三角形就会重叠。

相关内容