具有常见子项的 Latex 树形图

具有常见子项的 Latex 树形图

我有以下树状图(标题中指定的包)。

\usepackage{tikz}
\usetikzlibrary{trees}
\usepackage{tikz-cd}

% Set the overall layout of the tree
\tikzstyle{level 1}=[level distance=3.5cm, sibling distance=3.5cm]
\tikzstyle{level 2}=[level distance=3.5cm, sibling distance=2cm]

% Define styles for bags and leafs
\tikzstyle{bag} = [text width=4em, text centered]
\tikzstyle{end} = [circle, minimum width=3pt,fill, inner sep=0pt]

\begin{tikzpicture}[grow=right]
\node[bag] {Start}
    child {
        node[bag] {\euro -$1$}        
            child {
                node[end, label=right:
                    {\euro -$2$}] {}
                edge from parent
                node[above] {$1$}
                node[below]  {}
            }
            child {
                node[end, label=right:
                    {\euro $0$}] {}
                edge from parent
                node[above] {$1$}
                node[below]  {}
            }
            edge from parent 
            node[above] {$\frac{1}{2}$}
            node[below]  {}
    }
    child {
        node[bag] {\euro $1$}        
        child {
                node[end, label=right:
                    {\euro $0$}] {}
                edge from parent
                node[above] {$1$}
                node[below]  {}
            }
            child {
                node[end, label=right:
                    {\euro $2$}] {}
                edge from parent
                node[above] {$1$}
                node[below]  {}
            }
        edge from parent         
            node[above] {$\frac{1}{2}$}
            node[below]  {}
    };
\end{tikzpicture}

我获得以下布局:

在此处输入图片描述

但是,我希望两个 €0 连接在一起。也就是说,只有一个 €0,然后中间的箭头指向中间唯一的 €0。换句话说,我希望有一棵树,中间点有共同的子节点。我真的到处搜索,但没有成功,另一方面,这似乎应该可以通过稍微调整代码轻松实现。

谢谢任何提示或建议!

答案1

对于像这样的简单图表,这里有一种使用基本方法来实现的方法Tikz

基本思想

  • 使用,它的作用类似于定位节点的\matrix表格Tikz
  • 这个有 3 列 ( & & \\) 和 5 行
  • 某些字段故意留空
  • 将包含类似内容的节点放在需要的地方
  • 分配(S)(A1)以便稍后再次引用它们的坐标
  • 为了简单起见,我使用“e”来保持矩阵/表格结构可见
  • 使用column seprow sep进行视觉微调

母校毕业后x,放置完所有带有文本的节点后,进行一些绘图,例如

  • \draw (S) -- (A1);% 在节点 S 和 A1 之间画一条线
  • \draw (S) -- node[above] {$\frac{1}{2}$} (A1);% 相同,但在该行附近添加一些文本

你可能想要查找手册

  • 第三个教程,“5.3 使用矩阵对齐节点”
  • 边缘作为放置标签的替代方案

结果

\documentclass[10pt,border=3mm,tikz]{standalone}

\begin{document}
 \begin{tikzpicture}
    \matrix[column sep=12mm,
            row sep=4mm]{
                &                       & \node(B1) {$e_2$};\\
                & \node(A1) {$e_1$};    &\\
\node(S) {Start};   &                   & \node(B2) {$e_0$};\\
                & \node(A2) {$e_{-1}$}; &\\
                &                       & \node(B3) {$e_{-2}$};\\
    };
    
    \draw (S)  -- node[above] {$\frac{1}{2}$} (A1);
    \draw (S)  -- node[above] {$\frac{1}{2}$} (A2);
    
    \draw (A1) -- node[above] {$\frac{1}{3}$} (B1);
    \draw (A1) -- node[above] {$\frac{2}{3}$} (B2);
    \draw (A2) -- node[below] {$\frac{1}{4}$} (B2);
    \draw (A2) -- node[below] {$\frac{3}{4}$} (B3);
 \end{tikzpicture}
\end{document}

相关内容