tikz 中的特殊树

tikz 中的特殊树

我正在尝试画一棵这样的树:

根有三个子节点,这两个节点中的每一个...前两层中的节点具有附加信息..

我搜索了类似的例子,但只能找到那些子代总是有相同数量子的树(例如这里:http://www.texample.net/tikz/examples/feature/trees/)。

我感谢你的帮助!

在此处输入图片描述

答案1

您可以使用positioning库将节点彼此相对放置。例如\node[left=<dimen/factor> of <another node>] {}。只需为树中的节点命名。要获取任意数量的子节点,只需添加或删除child{ ... }。有关更多信息,请查看tikz 手册(尤其是“18 让树木生长”和“16.5.3 高级安置选项”)

更新谢谢奎伯比尔贝尔注意到基线对齐不正确。因此我按照建议使用了base left和。base right

现在需要使用像(wAB.east |- AB)获取水平线的坐标(使用X的坐标wAB.east的坐标AB)。

举个例子,你可以看看这棵树(我试图重新创建你的树)

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{trees}
\usetikzlibrary{positioning}

\usepackage[normalem]{ulem}

\begin{document}
\begin{tikzpicture}[level distance=1.5cm,
level 1/.style={sibling distance=4cm},
level 2/.style={sibling distance=2cm}]
\node (abc) {$ABC$} child { %node abc
    node (AB) {AB} %node AB
    child { node {$A\rightarrow BC$} }
    child { node {$B\rightarrow AC$} }
} child {
    node (AC) {AC} %node AC
    child { node {$A\rightarrow BC$} }
    child { node {$C\rightarrow AB$} }
} child  {
    node (A) {A} %node A
    child { node {$B\rightarrow AC$} }
    child { node {$C\rightarrow AB$} }
};

%relative to node AB
\node[base left=.5 of AB] (wAB) {\uwave{$A,b$}};
\draw (wAB.east |- AB) edge[<-] (AB);
\draw node[base right=.5 of AB] {$C$} edge[<-] (AB);
%relative to node AC
\node[base left=.5 of AC] (wAC) {\uwave{$A,C$}} ;
\draw (wAC.east |- AC) edge[<-] (AC);
\draw node[right=.5 of AC] {$B$} edge[<-] (AC);
%relative to node A
\draw node[base left=.5 of A] {$BC$} edge[<-] (A);
\node[base right=.5 of A] (wBC) {\uwave{$B,C$}};
\draw (wBC.west |- A) edge[<-] (A);
%relative to node abc
\node[base left=of abc] {$\uwave{\hspace{3ex}}=(k-1)-\mathrm{Itemsets}$} ;
\node[base right=.5 of abc] (wABACBC) {\uwave{$AB,AC,BC$}};
\draw (wABACBC.west |- abc) edge[<-] (abc);
\end{tikzpicture}
\end{document}

结果

答案2

这也可以使用 来完成tikz-qtree,这是一个采用编写树的包的语法qtree并将其与 TikZ 相结合的包。使用此包及其语法,您可以为每个根设置任意数量的子项。

与 @someonr 的解决方案类似,此解决方案也使用positioning库将附加信息放置在顶层,但第二层中的附加信息只是作为第二层根的一部分添加的。positioning如果您愿意,也可以使用库和语法来执行此操作。您只需将树的第二层中的每个根声明为\node,然后就可以将附加信息放置在该节点的相对位置。

\documentclass{article}

\usepackage{amsmath} % needed for \text command in math mode

\usepackage{tikz-qtree} % needed for the tree syntax
\usetikzlibrary{positioning} % needed for placing nodes relative to one another

\usepackage[normalem]{ulem} % needed for wavy underline; the `normalem` option preserves the usual treatment of \emph as italic; without it, `ulem` causes \emph to be rendered as underlined material

\begin{document}

\begin{tikzpicture}
\Tree
[.\node(ABC){ABC};
    [.\uwave{A,B}$\leftarrow$AB$\rightarrow$C
        [.A$\rightarrow$BC ]
        [.B$\rightarrow$AC ]
    ]
    [.\uwave{A,C}$\leftarrow$AC$\rightarrow$B
        [.A$\rightarrow$BC ]
        [.C$\rightarrow$AB ]
    ]
    [.\uwave{B,C}$\leftarrow$BC$\rightarrow$A
        [.B$\rightarrow$AC ]
        [.C$\rightarrow$AB ]    
    ]
]
\node [base right = of ABC] {\uwave{AB, AC, BC}};
\node [base left = of ABC] {$=(k-1) - \text{Itemsets}$};
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容