前文

前文

ノードのサイズを変更して、そこにテキストを追加する方法。以下はコードであり、2 番目の図はこのコードから生成されます。

\begin{figure}
\usetikzlibrary{trees}
  \begin{tikzpicture}[sibling distance=2.8cm,level distance=2.8cm,
  box/.style={
       shape=rectangle,
       font=\small,
       draw,
       align=center,
       minimum height=1.5cm,
       text width=1.75cm,
       top color=white,
       bottom color=blue!20}
]
\node  [box,text width=3cm] {Indoor\\Localization\\System} [edge from parent fork down]
 child { node [box] {Proximity} }
  child { node [box] {Angulation} 
       child { node [box] {Received Angle} 
             child [sibling distance=2.2cm] { node [box] {AOA}
            child [sibling distance=2.2cm] { node [box] {Antenna array} }}}}
  child { node [box] {Scene Analysis} }
  child [sibling distance=3cm] { node [box] (lat) {Lateration}
        child [sibling distance=4.5cm]  { node [box] {Propagation time}
             child [sibling distance=2.2cm] { node [box] {TOA}
                        child [sibling distance=2.2cm] { node [box] {RF or ultrasonic} }}
             child [sibling distance=2.2cm] { node [box] {TDOA}
                        child [sibling distance=2.2cm] { node [box] {RF or Ultrasonic} }} }
        child [sibling distance=3.4cm]{ node [box] (tof) {Signal Strength}
                child [sibling distance=2.2cm] { node [box] {RSS} 
                 child [sibling distance=2.2cm] { node [box] {RF} }}} };


\end{tikzpicture}
\caption{Overview of Localization}
\end{figure}

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

答え1

あなたのコードでは、画像を再現できません。 見た目は問題ありません。 とにかく、コードを少し減らして、新しい兄弟距離を選択します。 この変更により、次の画像が得られます。

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

\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{trees}

\begin{document}
  \begin{tikzpicture}[sibling distance=2.8cm,level distance=2.8cm,
  box/.style={
       shape=rectangle,
       font=\small,
       draw,
       align=center,
       minimum height=1.3cm,
       text width=1.75cm,
       top color=white,
       bottom color=blue!20},
level 1/.style = {sibling distance=2.6cm},
level 2/.style = {sibling distance=3.4cm},
level 3/.style = {sibling distance=2.4cm},
                        ]
\node  [box,text width=3cm] {Indoor\\Localization\\System} [edge from parent fork down]
 child { node [box] {Proximity} }
  child { node [box] {Angulation}
       child { node [box] {Received Angle}
            child { node [box] {AOA}%sibling distance=2.2cm
            child  { node [box] {Antenna array} }}}}%[sibling distance=2.2cm]
  child { node [box] {Scene Analysis} }
  child  { node [box] (lat) {Lateration}%[sibling distance=3cm]
        child   { node [box] {Propagation time}%[sibling distance=4.5cm]
             child  { node [box] {TOA}%[sibling distance=2.2cm]
                        child  { node [box] {RF or ultrasonic} }}%[sibling distance=2.2cm]
             child [sibling distance=2.2cm] { node [box] {TDOA}
                        child  { node [box] {RF or Ultrasonic} }} }%[sibling distance=2.2cm]
        child { node [box] (tof) {Signal Strength}%[sibling distance=3.4cm]
                child  { node [box] {RSS}%[sibling distance=2.2cm]
                 child  { node [box] {RF} }}} };%[sibling distance=2.2cm]
\end{tikzpicture}
\end{document}

コードでは、すべての兄弟距離をコメント化し、代わりにlevelスタイルで定義します。

答え2

この回答は次の 2 つのことを示しています。

  1. それはこのソリューションにより、兄弟間の距離を手動で指定する必要がなくなります。ツリーは自動的にパックされ、コンパクトで簡潔な形式が作成されます。

  2. 実験的なパッケージジャストツリー元の図の右側に表示されているラベルを追加し、矢印を自動的に追加できます。

ラベルについては言及されていないので興味があるかどうかはわかりませんが、テストケースが必要なので、ついでに不注意な人に結果を押し付けてもいいかもしれません。

これを自宅で試してみたい場合は、まだ入手できないため(つまり、CTAN に載っていないため)、コピーが欲しいとお知らせください。

結果は次のとおりです。これ以降を読むかどうかを判断してください。一番上の矢印を他の矢印と揃えるか、矢印が指しているノードと揃えるかはわかりません。私は後者を選択しましたが、前者は少し修正が必要です。

矢印とラベルで整列したもの

大きな利点はツリーを描画する際に提供されるパワーと柔軟性、特に自動化と一貫したフォーマットの可能性です。また、デフォルトで非常にコンパクトなツリーを描画します。

ジャストツリー1 つのことを行うために設計されたラッパー: ツリーの左または右にラベルを自動的に配置し、ラベルのコンテンツをツリーの一部として指定できるようにし、ラベルの形式をカスタマイズするためのいくつかのキーを提供します。

前文

コードをロードします:

\usepackage{justtrees}% v 0.07

矢印の先端について:

\usetikzlibrary{arrows.meta}

edgesライブラリを使用すると、 と同等のものを簡単に取得できるため、これを使用しますedge from parent fork down

\useforestlibrary{edges}

設定をデフォルトとして適用します。ドキュメント内のedgesすべてのツリーに適用したくない場合は、ローカル TeX スコープ内でこれを実行してください。forest

\forestapplylibrarydefaults{edges}

ジャストツリーjusttreeツリーのプリアンブルを提供する単一の必須引数を取る新しい環境を提供します。これは空でもかまいませんが、引数を省略することはできません。

\begin{justtree}
  {

エッジに直角のカーブをつける。

    forked edges,

ツリー内のすべてのノードにいくつかの項目を適用する必要があります。これは基本的に、box互換性のためにスタイルをわずかに変更したものです。

    for tree={
      font=\small,
      draw,

ではなくalign=center、これが必要です。(ただし、なぜかはわかりません。)

      text centered,
      minimum height=1.5cm,
      text width=1.75cm,

物事を整合させるためにこれが必要です。

      anchor=north,
      top color=white,
      bottom color=blue!20,

テキストなしが必要な場合。そうでない場合は省略します。

      font=\sffamily,
    },

これは右側のラベルの形式です。矢印のためのスペースを確保するためにラベルを右に移動します。

    just format={xshift=25pt, font=\sffamily},

このコードは矢印を描画する役割を担っています。矢印が予期しない場所に配置されないように、メイン ツリー内のすべてのノードの位置が計算されていることを確認するために、このコードを遅延させます。

    before drawing tree={

これは少し複雑です。動作しますが、正しいかどうかはわかりません。マニュアルには、私のようなバカのために、もっと簡単な例 (または、ほんの少しの例) を用意する必要があります ;)!

これはノードからノードへと移動し、各ステップで何かを実行します。rはツリーのルートです。Lは最後のリーフ、つまり右下のノードです。current and ancestors次に、最後のリーフからルート、つまり右下のノード -> 親 -> 祖父母 -> 曽祖父母 -> ... -> ルートに戻ります。

      for nodewalk={rL,current and ancestors}{

ツリーのレベル0やに矢印は必要ありません。(を使用すると、レベルは実際には表示されません。) そのため、各ステップで現在のレベルをテストし、2 未満の場合は何もせず、それ以外の場合は矢印を描画し、適切なアンカーに揃えて、右側と現在のノードに配置されるラベルに揃えます。10justtree

        if={level()<2}{}{tikz+={\draw [Stealth-] (.mid east) ++(2.5pt,0) -- ++(15pt,0);},},
      },
    },
  }

これが前置きです。の括弧記法。ノードに通常のTikZオプションを追加できることに注意してください。渡します。

  [Indoor\\Localization\\System, text width=3cm

右側のラベルは を使用して指定されますjust=<label content>。適切なレベルのノードに渡すだけでよく、どのノードでもかまいません。

  [Proximity, just={Positioning}
    ]
    [Angulation
      [Received\\Angle
        [AOA
          [Antenna\\array
          ]
        ]
      ]
    ]
    [Scene\\Analysis
    ]
    [Lateration

さらにいくつかのラベル。

      [Propagation\\time, just=Variable
        [TOA
          [RF or\\ultrasonic, just=Device
          ]
        ]
        [TDOA
          [RF or\\Ultrasonic
          ]
        ]
      ]
      [Signal\\Strength

最終ラベル。これらは、どこで指定しても問題ないことを示すためにツリー内に分散されています。

        [RSS, just=Ranging
          [RF
          ]
        ]
      ]
    ]
  ]

環境を閉じれば完了です。

\end{justtree}

完全なコード:

\documentclass[tikz, border=10pt, multi]{standalone}
\usepackage{justtrees}% v 0.07
\usetikzlibrary{arrows.meta}
\useforestlibrary{edges}
\forestapplylibrarydefaults{edges}
\begin{document}
\begin{justtree}
  {
    forked edges,
    for tree={
      font=\small,
      draw,
      text centered,
      minimum height=1.5cm,
      text width=1.75cm,
      anchor=north,
      top color=white,
      bottom color=blue!20,
      font=\sffamily,
    },
    just format={xshift=25pt, font=\sffamily},
    before drawing tree={
      for nodewalk={rL,current and ancestors}{
        if={level()<2}{}{tikz+={\draw [Stealth-] (.mid east) ++(2.5pt,0) -- ++(15pt,0);},},
      },
    },
  }
  [Indoor\\Localization\\System, text width=3cm
  [Proximity, just={Positioning}
    ]
    [Angulation
      [Received\\Angle
        [AOA
          [Antenna\\array
          ]
        ]
      ]
    ]
    [Scene\\Analysis
    ]
    [Lateration
      [Propagation\\time, just=Variable
        [TOA
          [RF or\\ultrasonic, just=Device
          ]
        ]
        [TDOA
          [RF or\\Ultrasonic
          ]
        ]
      ]
      [Signal\\Strength
        [RSS, just=Ranging
          [RF
          ]
        ]
      ]
    ]
  ]
\end{justtree}
\end{document}

関連情報