Aproximando verticalmente os nós de uma árvore de decisão TikZ

Aproximando verticalmente os nós de uma árvore de decisão TikZ

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 insira a descrição da imagem aqui

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 distancetecla . Observe que alterei as larguras do texto para cmque a fonte agora seja definida usando a fontchave (parece haver um problema com o alinhamento se exou emforem usados ​​como unidades na text widthchave 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}

insira a descrição da imagem aqui

informação relacionada