Tikz 树:如何向虚线信息集添加标签

Tikz 树:如何向虚线信息集添加标签

我在网上和 stack overflow 上搜索了如何向直虚线信息集添加标签,但没有成功。我看到了向曲线虚线信息集添加标签的建议,但当我将它们添加到我的直线信息集代码中时,它们不起作用。

有人有什么建议吗?我附上了一张我正在尝试做的事情的图片。提前谢谢大家。

我尝试了这个但是没有用: \draw[dashed, label=above right:{my label}](0-1)to(0-2);

这也不起作用: \node at($(0-1)!.5!(0-2)$){my label};

这是我的代码。

\begin{tikzpicture} [scale=1.5] %[scale=1.5,font=\footnotesize]
    \tikzstyle{solid node} =[circle,draw,inner sep=1.5,fill=black]
    \tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
    \tikzstyle{level 1}=[level distance=15mm,sibling distance=3.5cm]
    \tikzstyle{level 2}=[level distance=15mm,sibling distance=2.5cm]
    \tikzstyle{level 3}=[level distance=15mm,sibling distance=1cm]
    
    \node(0)[hollow node,label=above:{  }]{} 
    child{node[solid node]{}
        child{node[hollow node,label=below:{$(1,2)$}]{} edge from parent node[left]{a}}
        child{node[hollow node,label=below:{$(1,-1)$}]{} edge from parent node[left]{b}}
        %child{node[hollow node,label=below:{$(0,2)$}]{} edge from parent node[right]{$E$}}
        edge from parent node[left,xshift=-5]{action1}
    }
    child{node[solid node]{}
        child{node[hollow node,label=below:{$(2,2)$}]{} edge from parent node[left]{a}}
        child{node[hollow node,label=below:{$(1,3)$}]{} edge from parent node[right]{b}}
        edge from parent node[right,xshift=5]{action2}
    };
    \draw[dashed, label=above right:{my label}](0-1)to(0-2);
    \end{tikzpicture}

在此处输入图片描述 在此处输入图片描述

答案1

这是一个解决方案forest

在此处输入图片描述

\documentclass{article}

\usepackage{forest}
\tikzset{open/.style={draw, circle, minimum width=1.5mm, inner sep=0},
    closed/.style={open, fill}}

\begin{document}

\begin{forest}
for tree={if level=1{closed}{open},
    s sep=2cm, l sep=1.5cm
}
[
  [, edge label={node[midway, left=4pt]{action1}}, name=A1
    [, label={south:$(1,2)$}, edge label={node[midway, left]{a}}]
    [, label={south:$(1,-1)$}, edge label={node[midway, left]{b}}]
  ]
  [, edge label={node[midway, right=4pt]{action2}}, name=A2
    [, label={south:$(2,2)$}, edge label={node[midway, left]{a}}]
    [, label={south:$(1,3)$}, edge label={node[midway, right]{b}}]
  ]
]
\draw[dashed](A1)--node[above]{label}(A2);
\end{forest}

\end{document}

答案2

虽然不是最好的答案,但它解决了您的问题。

在虚线上创建一个节点,并将文本放在该节点上。yshiftxshift控制文本位置。

\begin{tikzpicture} [scale=1.5] %[scale=1.5,font=\footnotesize]
   \tikzstyle{solid node} =[circle,draw,inner sep=1.5,fill=black]
   \tikzstyle{hollow node}=[circle,draw,inner sep=1.5]
   \tikzstyle{level 1}=[level distance=15mm,sibling distance=3.5cm]
   \tikzstyle{level 2}=[level distance=15mm,sibling distance=2.5cm]
   \tikzstyle{level 3}=[level distance=15mm,sibling distance=1cm]

   \node(0)[hollow node,label=above:{  }]{} 
child{node[solid node]{}
    child{node[hollow node,label=below:{$(1,2)$}]{} edge from parent node[left]{a}}
    child{node[hollow node,label=below:{$(1,-1)$}]{} edge from parent node[left]{b}}
    %child{node[hollow node,label=below:{$(0,2)$}]{} edge from parent node[right]{$E$}}
    edge from parent node[left,xshift=0.35cm,yshift = 0.55cm,rotate  = 38]{action1}
}
   child{node[solid node]{}
    child{node[hollow node,label=below:{$(2,2)$}]{} edge from parent node[left]{a}}
    child{node[hollow node,label=below:{$(1,3)$}]{} edge from parent node[right]{b}}
    edge from parent node[right,xshift=5]{action2}
};
   \draw[dashed] (0-1) node[midway, yshift = -1.3cm] {$label$} to(0-2)  ;
\end{tikzpicture}

输出如下:

在此处输入图片描述

如果您想要旋转行中的文本,请使用命令rotate,如“action1”中的示例。

答案3

  • 直线标签很容易添加,为此您可以选择两个选项:
    • 通过使用节点:\draw (<coordonate 1>) -- node[above] {text} (<coordinate 2>);
    • 通过使用quotes图书馆:\draw (<coordonate 1>) to["text"](<coordinate 2>);
  • 在下面的MWE(最小工作示例)中被认为是第二种可能性。
  • 同样使用“森林”,但具有更复杂的森林图前言和更简单的图主体代码:
\documentclass[border=3.141592]{standalone}
\usepackage{forest}
\usetikzlibrary{quotes}

\begin{document}
    \begin{forest}
for tree={
% nodes
    circle, draw,
    minimum size=2pt, inner sep=0pt,
    font=\small,
% tree
    l sep = 12mm,
    s sep = 11mm,
 if level = 1{fill}{},
        },
%% edge labels
/tikz/ELS/.style = {% Edge Label Style
                    pos=0.5,
                    node font=\scriptsize, anchor=#1},
       EL/.style = {%Edge Label
                    if n=1{edge label={node[ELS=east]{#1}}}
                          {edge label={node[ELS=west]{#1}}}
                    },
      lbl/.style = {label={south:$#1$}}
%%%% diagram body
[
    [, EL=action 1, name=a
        [, lbl={(1, 2)}, EL=a]
        [, lbl={(1,-1)}, EL=b]
    ]
    [, EL=action 2, name=b
        [, lbl={(2,2)}, EL=a]
        [, lbl={(1,3)}, EL=b]
    ]
]
\draw[densely dashed, very thin,font=\scriptsize]
    (a) to["label"] (b);  % <---
    \end{forest}
\end{document}

在此处输入图片描述

相关内容