決定木の外観を改善する方法

決定木の外観を改善する方法

私は LaTeX でグラフィック (この場合は決定木) を作成するのが初めてです。必要なツリーの描画方法はわかりましたが、見栄えを良くするには少し助けが必要です。具体的には、テキスト ラベル (例: None/Some/Full/No/Yes) を、ラベルを付けるパスと平行に並べたいと考えています。以下は私のコードとツリーの画像です。ツリーに赤い矢印を配置して、さまざまなテキスト ラベルの向きを示しています。ご協力ありがとうございます。

\documentclass[12pt, fullpage,letterpaper]{article}

\usepackage{verbatim}
\usepackage{tikz}
\usetikzlibrary{calc, shapes}
\usepackage{amsmath, amssymb}

\begin{document}
\tikzset{
    Patrons/.style = {text = black, label = center:\textsf{Patrons}},
    Friday/.style = {text = black, label = center:\textsf{Friday}},
    Hungry/.style = {text = black, label = center:\textsf{Hungry}},
    No/.style = {text = black, label = center:\textsf{No}},
    Yes/.style = {text = black, label = center:\textsf{Yes}}
}

\begin{tikzpicture}[
    scale = 1, transform shape, thick,
    every node/.style = {draw, rectangle, minimum size = 15mm},
    grow = down, 
    level 1/.style = {sibling distance=4cm},
    level 2/.style = {sibling distance=4cm}, 
    level 3/.style = {sibling distance=2cm}, 
    level distance = 3cm
    ]
  
  \node [Patrons] (A) {}
  child { node [No] (B) {}} 
  child { node [Yes] (C) {}}
  child { node [Friday] (D) {}
    child { node [Hungry] (E) {}
        child { node [No] (G) {}}
        child { node [Yes] (H) {}}
    }
    child { node [No] (F) {}}
  };
  
  % Labels
  \begin{scope}[nodes = {draw = none}]
    \path (A) -- (B) node [near start, left] {None};
    \path (A) -- (C) node [near start, left] {Some};
    \path (A) -- (D) node [near start, right] {Full};
    \path (D) -- (E) node [near start, left] {Yes};
    \path (E) -- (F) node [near start, left] {No};
    \path (E) -- (G) node [near start, right] {Yes};
    \path (D) -- (H) node [near start, right] {No};
  \end{scope}
\end{tikzpicture}
\end{document}

答え1

ツリーにはシンプルなスタイルを使用します。たとえば、名前のみを入力する必要があります。

child { node [P] (D) {Friday} %--- only Friday needs to be filled now 

こうすることで繰り返しを避けることができる

同様に、ラベルには傾斜オプション付きのシンプルなスタイルが設定されています。見てください。また、ラベルセクションのノードは、最後では--なく直後に配置する必要があります。

ここに画像の説明を入力してください

\documentclass[12pt, fullpage,letterpaper]{article}

\usepackage{verbatim}
\usepackage{tikz}
\usetikzlibrary{calc, shapes}
\usepackage{amsmath, amssymb}

\begin{document}
    \tikzset{
        P/.style = {text = black, label = center:\textsf{#1}},
%       Friday/.style = {text = black, label = center:\textsf{#1}},
%       Hungry/.style = {text = black, label = center:\textsf{Hungry}},
%       No/.style = {text = black, label = center:\textsf{No}},
%       Yes/.style = {text = black, label = center:\textsf{Yes}}
    }
    
    \begin{tikzpicture}[
    scale = 1, transform shape, thick,
    every node/.style = {draw, rectangle, minimum size = 15mm},
    grow = down, 
    level 1/.style = {sibling distance=4cm},
    level 2/.style = {sibling distance=4cm}, 
    level 3/.style = {sibling distance=2cm}, 
    level distance = 3cm
    ]
    
    \node [P] (A) {}
    child { node [P] (B) {}} 
    child { node [P] (C) {}}
    child { node [P] (D) {Friday}
        child { node [P] (E) {}
            child { node [P] (G) {}}
            child { node [P] (H) {}}
        }
        child { node [P] (F) {}}
    };
    
    % Labels
    \begin{scope}[nodes = {draw = none},pos=0.3, sloped,left]
    \path (A) -- node [yshift=5pt] {None} (B) ;
%   \path (A) -- (C) node [] {Some};
%   \path (A) -- (D) node [] {Full};
%   \path (D) -- (E) node [] {Yes};
%   \path (E) -- (F) node [] {No};
%   \path (E) -- (G) node [] {Yes};
%   \path (D) -- (H) node [] {No};
    \end{scope}
    \end{tikzpicture}
\end{document}

関連情報