Atualmente estou trabalhando na criação de uma árvore de decisão para uma publicação de periódico e preciso economizar espaço.
A partir de agora, minha árvore de decisão se parece com
Embora isso seja bom, eu gostaria de "comprimir" a árvore verticalmente (ou seja, aproximar os nós uns dos outros, mas verticalmente).
Alguém sabe como fazer isso usando TikZ? Eu alterei várias configurações no código abaixo... mas não consigo fazer nada funcionar.
\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}
Responder1
Por que não usar uma árvore? A distância vertical pode ser alterada através da level distance
tecla . Observe que alterei as larguras do texto para cm
que a fonte agora seja definida usando a font
chave (parece haver um problema com o alinhamento se ex
ou em
forem usados como unidades na text width
chave neste exemplo; não sei por que).
Como sempre, fiz um trabalho extra nas opções antes da imagem, para que o código do desenho fique menos confuso.
\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}