ノードのサイズを変更して、そこにテキストを追加する方法。以下はコードであり、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 つのことを示しています。
それは森このソリューションにより、兄弟間の距離を手動で指定する必要がなくなります。ツリーは自動的にパックされ、コンパクトで簡潔な形式が作成されます。
実験的なパッケージジャストツリー元の図の右側に表示されているラベルを追加し、森矢印を自動的に追加できます。
ラベルについては言及されていないので興味があるかどうかはわかりませんが、テストケースが必要なので、ついでに不注意な人に結果を押し付けてもいいかもしれません。
これを自宅で試してみたい場合は、まだ入手できないため(つまり、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 未満の場合は何もせず、それ以外の場合は矢印を描画し、適切なアンカーに揃えて、右側と現在のノードに配置されるラベルに揃えます。1
0
justtree
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}