我在网上和 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
虽然不是最好的答案,但它解决了您的问题。
在虚线上创建一个节点,并将文本放在该节点上。yshift
并xshift
控制文本位置。
\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}