Actualmente estoy trabajando en la creación de un árbol de decisiones para la publicación de una revista y necesito ahorrar espacio.
A partir de ahora, mi árbol de decisiones parece
Aunque esto es bueno, me gustaría "comprimir" el árbol verticalmente (es decir, acercar los nodos entre sí pero verticalmente).
¿Alguien sabe cómo hacer esto usando TikZ? He modificado varias configuraciones en el código siguiente... pero parece que no logro que nada funcione.
\documentclass[letterpaper]{article}
\usepackage{aaai}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{shapes,arrows}
\frenchspacing
\setlength{\pdfpagewidth}{8.5in}
\setlength{\pdfpageheight}{11in}
\tikzstyle{block} = [rectangle, draw, fill=white!20,
text width=6em, text centered, rounded corners, minimum height=1em]
\tikzstyle{line} = [draw, -latex']
\tikzstyle{cloud} = [draw, text centered, ellipse,fill=gray!15, node distance=0cm, text width=3.3em,
minimum height=0.0em]
%begin tree
\begin{center}
\begin{tikzpicture}[node distance =0cm, auto]
% Place nodes
\small
\centering
\node [block] (init) {\scriptsize{history of petty theft?}};
\node [cloud, left of=init, below of=init, node distance=1.5cm] (end1) {\scriptsize{no violent crime}};
\node [block, right of=init, below of=init, node distance=1.5cm] (dec1) {\scriptsize{history of weapon use?}};
\node [cloud, right of=dec1, below of=dec1, node distance=1.5cm] (end2) {\scriptsize{no violent crime}};
\node [block, left of=dec1, below of=dec1, node distance=1.5cm] (dec2) {\scriptsize{history of employment?}};
\node [cloud, left of=dec1, below of=dec2, node distance=1.5cm] (end3) {\scriptsize{no violent crime}};
\node [cloud, right of=dec1, below of=dec2, node distance=1.5cm] (end4) {\scriptsize{violent crime}};
% Draw edges
\path [line] (init) -| node [near start, above] {\scriptsize{yes}} (end1);
\path [line] (init) -| node [near start] {\scriptsize{no}} (dec1);
\path [line] (dec1) -| node [near start, above] {\scriptsize{yes}} (dec2);
\path [line] (dec1) -| node [near start] {\scriptsize{no}} (end2);
\path [line] (dec2) -| node [near start, above] {\scriptsize{yes}} (end3);
\path [line] (dec2) -| node [near start] {\scriptsize{no}} (end4);
\end{tikzpicture}
\end{center}
Respuesta1
¿Por qué no utilizar un árbol? La distancia vertical se puede modificar utilizando la level distance
tecla. Tenga en cuenta que he cambiado el ancho del texto a cm
como la fuente ahora está configurada usando la font
clave (parece haber un problema con la alineación si ex
o em
se usan como unidades en la text width
clave en este ejemplo; no estoy seguro de por qué).
Como siempre, he trabajado un poco más en las opciones antes de la imagen, para que el código de dibujo esté menos desordenado.
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\tikzset{
every node/.style={
font=\scriptsize
},
decision/.style={
shape=rectangle,
minimum height=1cm,
text width=2cm,
text centered,
rounded corners=1ex,
draw,
label={[yshift=0.125cm]left:yes},
label={[yshift=0.125cm]right:no},
},
outcome/.style={
shape=ellipse,
fill=gray!15,
draw,
text width=1.5cm,
text centered
},
decision tree/.style={
edge from parent path={[-latex] (\tikzparentnode) -| (\tikzchildnode)},
sibling distance=3cm,
level distance=1.125cm
}
}
\begin{tikzpicture}
\node [decision] { history of petty theft? }
[decision tree]
child { node [outcome] { no violent crime } }
child { node [decision] { history of weapon use}
child { node [decision] { history of employment? }
child { node [outcome] { no violent crime } }
child { node [outcome] { violent crime } }
}
child { node [outcome] { no violent crime } }
};
\end{tikzpicture}
\end{document}