below you can see my code of a tree besides a table.
Now I would like to insert some rectangles and ellipses around the nodes. Can someone show me how I can do this. I tried it but it did not work. Thank you!
\documentclass[doc,apacite]{apa}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
%%%%Tikz%%%%%%
\usepackage{tikz}
\usetikzlibrary{trees,matrix,fit}
%%%%%%%%%%%%%%
%%%%Table%%%%%
\usepackage{ctable} % needed for \cmidrule{}
\usepackage{multirow} % needed for \multirow{}
%%%%%%%%%%%%%%
\usepackage{pgfkeys}
\begin{document}
\begin{tikzpicture}[
grow=right,
sloped,
bag/.style={text width=4em, text centered},
end/.style={circle, minimum width=3pt,fill, inner sep=0pt,font=\tiny},
sibling distance=\sibdist,
level 1/.style={level distance=2.0cm},
level 2/.style={level distance=2.5cm},
every node/.style={font=\strut},
]
\node(n){x}
child {
node{U2}
child {
node[label=right:
]{D2} {}
child {node[end, label=right:
{R1}] {}
edge from parent
node[above] {$1-R$}
node[below] {}}
child {node[end, label=right:
{R2}] {}
edge from parent
node[above] {$R$}
node[below] {}}
child[missing]
edge from parent
node[above] {$1-D$}
node[below] {}
}
child {%empty child on level 2
child{
node[end, label=right:
{D1}] {}
edge from parent
node[above] {$D$}
node[below] {}
}
}
child[missing]
edge from parent
node[above] {}
node[below] {$1-u$}
}
child {
node{U1}
child{% empty child on level 2
child{
node[end, label=right:
{$T$}](e) {}
edge from parent
node[above] {}
node[below] {}
}
}
edge from parent
node[above] {$u$}
node[below] {}
};
\matrix[
matrix of nodes,
anchor=m-4-1.west,
xshift=1cm,
nodes={inner xsep=\tabcolsep,minimum height=\sibdist}
](m)at(n-1-1-1){%
c&b&a&c&bd&a\\
a&c&b&a&a&c\\
x&g&f&c&d&b\\%[1cm]
ta&g&a&x&p&d\\
};
\foreach \i in {1,...,6}\node[draw,fit=(m-1-\i) (m-2-\i) (m-3-\i) (m-4-\i),inner sep=-.5\pgflinewidth](c\i){};
\foreach \i in {1,...,3}\draw([yshift=-.5*\sibdist]m-\i-1.center-|c1.west)--([yshift=-.5*\sibdist]m-\i-1.center-|c6.east);
\end{tikzpicture}
\end{document}
Best Answer
You can use the
fit
library to construct a shape fitting the desired group of nodes; in the case of ellipses you'll need theshapes
library. Since the root node of the three was calledn
, you can access the children usingn-<string>
; for exmaple,n-1-1
corresponds toD2
, andn-2
isU1
.The code for the exmaple:
Update:
After a comment, the request was to have some of the bodes of the trees as rectangles or ellipses; this can be achieved by defining some styles and then passing these styles as options for the desired nodes; in the below example I used
but those settings can be changed to suit needs.
Just as a suggestion, the powerful
forest
package could be of interest for you to draw trees in a more easy way.