使用 TikZ 简洁地绘制一棵树,边缘带有文字

使用 TikZ 简洁地绘制一棵树,边缘带有文字

我是 TikZ 新手,正在尝试绘制一棵树,边缘 (动作/线) 上只带有文本。我已经设法做到了如下所示,但我希望有一种更简洁/易读的方法。

生成的图像

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{trees}

\begin{document}

\begin{figure}
\begin{center}

\tikzstyle{level 1}=[level distance=1cm, sibling distance=2.5cm]
\tikzstyle{level 2}=[level distance=1cm, sibling distance=2.5cm]
\tikzstyle{level 3}=[level distance=1cm, sibling distance=1cm]
\tikzstyle{level 4}=[level distance=1cm, sibling distance=2cm]

\tikzstyle{circleNode}=[circle,draw]
\tikzstyle{dotNode} = [circle, minimum width=3pt,fill, inner sep=0pt]

\begin{tikzpicture}
\node [dotNode] {}
child{
        node [dotNode] {}
    child{
        node [dotNode] {}
        child{
            node [dotNode] {}
                            child{
                                node [dotNode] {}
                                child{
                                    node [dotNode] {}
                                    child{
                                        node [dotNode] {}
                                        child{
                                            node [dotNode] {}
                                            child{
                                                node [dotNode] {}
                                                child{
                                                    node [dotNode] {}
                                                    edge from parent
                                                    node[left]{j}
                                                }
                                                edge from parent
                                                node[left]{$\tau$*}
                                            }
                                            edge from parent
                                            node[left]{b}
                                        }
                                        edge from parent
                                        node[left]{$\tau$*}
                                    }
                                    edge from parent
                                    node[left]{b}
                                }
                                child{
                                    node [dotNode] {}
                                    child{
                                        node [dotNode] {}
                                        child{
                                            node [dotNode] {}
                                            child{
                                                node [dotNode] {}
                                                child{
                                                    node [dotNode] {}
                                                    edge from parent
                                                    node[right]{k}
                                                }
                                                edge from parent
                                                node[right]{$\tau$*}
                                            }
                                            edge from parent
                                            node[right]{b}
                                        }
                                        edge from parent
                                        node[right]{$\tau$*}
                                    }
                                    edge from parent
                                    node[right]{b}
                                }
                                edge from parent
                                node[left]{$\tau$*}
                            }
            edge from parent
            node[left]{a}
        }
                    edge from parent
                    node[left]{$\tau$*}
    }
            edge from parent
            node[left]{a}
};

\end{tikzpicture}
\end{center}

\end{document}

答案1

你可以看看我基于 tikz 的树绘制包forest。文档中的图库包含一种易于绘制决策树的样式(灵感来自问题如何仅更改 tikz-qtree 中一个级别的级别距离?在此网站上)。

我只是稍微概括了一下风格并将其发布到forest 样式存储库。使用 style-package forest-decisiontree,你可以像这样绘制树:

\documentclass{minimal}
\usepackage{forest-decisiontree}    
\begin{document}
\begin{forest} decision tree={3em}{8ex}{2pt}
  [[;a[;\tau^*[;a[;\tau^*
   [;b[;\tau^*[;b[;\tau^*[;j]]]]]
   [;b[;\tau^*,for tree={decision on right}
     [;b[;\tau^*[;k]]]]]
  ]]]]]
\end{forest}
\end{document}

相关内容