前言

前言

如何更改节点的大小以在其中添加一些文本。以下是代码,第二个图表是根据此代码生成的。

\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

这个答案说明了两件事:

  1. 森林解决方案消除了手动指定兄弟距离的需要——树会自动打包以创建紧凑而简洁的形式;

  2. 实验包正义树可用于添加原始图表右侧所示的标签,以及森林可以自动添加箭头。

我不知道您是否对标签感兴趣,因为您没有提到它,但我需要测试用例,所以不妨趁此机会将结果强加给粗心大意的人。

如果您希望在家尝试,请告诉我您想要一份副本,因为它尚不容易获得(即不在 CTAN 上)。

这是结果,您可以决定是否继续阅读。我不知道最上面的箭头是否应该与其他箭头对齐,还是与它指向的节点对齐。我选择了后者,但前者只需要稍微修改一下。

用箭头和标签对齐事物

最大的优势森林是它在绘制树时提供的强大功能和灵活性,尤其是自动化和一致格式的潜力。默认情况下,它还会绘制非常紧凑的树。

正义树森林包装器旨在做一件事:自动将标签对齐到树的左侧或右侧,允许将标签内容指定为树的一部分,并提供几个键来定制标签的格式。

前言

加载代码:

\usepackage{justtrees}% v 0.07

对于箭头提示:

\usetikzlibrary{arrows.meta}

我们将使用该edges库,因为它允许我们轻松获得等效的edge from parent fork down

\useforestlibrary{edges}

应用edges默认设置。如果您不想将其应用于forest文档中的每个树,请在本地 TeX 范围内执行此操作。

\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}{

我们不需要级别01树的箭头。(0使用 时,级别实际上是不可见的justtree。)因此,我们在每一步测试当前级别,如果小于 2,则不执行任何操作,否则绘制箭头,将其与适当的锚点对齐,以与最终位于右侧和当前节点的标签对齐。

        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}

相关内容