Preâmbulo

Preâmbulo

Como posso alterar o tamanho dos nós para adicionar algum texto neles. Abaixo está o código e o segundo diagrama é gerado a partir deste código.

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

insira a descrição da imagem aquiinsira a descrição da imagem aqui

Responder1

Com o seu código não consigo reproduzir sua imagem. Parece bem. De qualquer forma, reduzo um pouco o seu código e seleciono novas distâncias entre irmãos. Com essas alterações obtenho a seguinte imagem:

insira a descrição da imagem aqui

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

No código eu comento todas as distâncias dos seus irmãos e em vez delas defino-as com levelestilos.

Responder2

Esta resposta demonstra duas coisas:

  1. que umflorestaa solução elimina a necessidade de especificar manualmente as distâncias entre irmãos - a árvore é automaticamente compactada para criar um formato compacto e conciso;

  2. que o pacote experimentalapenas árvorespode ser usado para adicionar os rótulos mostrados à direita do diagrama original eflorestapode adicionar automaticamente as setas.

Não sei se você tem algum interesse nos rótulos, pois não mencionou, mas preciso de casos de teste, então é melhor infligir os resultados aos incautos enquanto estou nisso.

Se você quiser tentar isso em casa, diga-me que gostaria de uma cópia, pois ela ainda não está disponível (ou seja, não está no CTAN).

Aqui está o resultado para que você possa decidir se deseja ler mais. Não sei se a seta superior deve estar alinhada com as outras setas ou com o nó para o qual ela aponta. Optei pelo último, mas o primeiro só precisa de uma ligeira modificação.

coisas alinhadas com setas e rótulos

A grande vantagem deflorestaé o poder e a flexibilidade que oferece ao desenhar árvores, especialmente o potencial de automação e formatação consistente. Ele também desenha árvores muito compactas por padrão.

apenas árvoresé umflorestawrapper projetado para fazer uma coisa: alinhar automaticamente os rótulos à esquerda ou à direita da árvore, permitindo que o conteúdo do rótulo seja especificado como parte da árvore e fornecendo algumas chaves para personalizar o formato dos rótulos.

Preâmbulo

Carregue o código:

\usepackage{justtrees}% v 0.07

Para as pontas das setas:

\usetikzlibrary{arrows.meta}

Usaremos a edgesbiblioteca porque ela nos permite obter facilmente o equivalente a edge from parent fork down.

\useforestlibrary{edges}

Aplique as edgesconfigurações como padrão. Faça isso dentro de um escopo TeX local se não quiser que ele se aplique a todas forestas árvores do documento.

\forestapplylibrarydefaults{edges}

Corpo

apenas árvoresfornece um novo ambiente justtreeque utiliza um único argumento obrigatório que deve fornecer o preâmbulo da árvore. Pode estar vazio, mas o argumento não pode ser omitido.

\begin{justtree}
  {

Para obter curvas quadradas nas bordas.

    forked edges,

Queremos que algumas coisas sejam aplicadas a cada nó da árvore. Este é essencialmente o seu estilo boxligeiramente modificado para compatibilidade.

    for tree={
      font=\small,
      draw,

Em vez de align=center, precisamos disso. (Mas não sei por que.)

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

Precisamos disso para manter as coisas alinhadas.

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

Se quisermos sem texto. Caso contrário, omita.

      font=\sffamily,
    },

Este é o formato dos rótulos à direita. Nós os deslocamos para a direita para permitir espaço para as flechas.

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

Este código é responsável por desenhar as setas. Atrasamos para garantir que as localizações de todos os nós na árvore principal foram calculadas para que nossas setas não acabem em locais inesperados.

    before drawing tree={

Isso é um pouco complicado. Funciona, mas não tenho certeza se está certo. O manual precisa fornecer exemplos mais simples (ou apenas alguns exemplos) para idiotas como eu;)!

Isso caminha de nó em nó e faz algo em cada etapa. ré a raiz da árvore. Lé a última folha, ou seja, o nó inferior direito. current and ancestorsem seguida, volta da última folha para a raiz, ou seja, nó inferior direito -> pai -> avô -> bisavô -> ... -> raiz.

      for nodewalk={rL,current and ancestors}{

Não queremos uma flecha para os níveis 0ou 1para a nossa árvore. (O nível 0é realmente invisível ao usar um justtree.) Portanto, testamos o nível atual em cada etapa, não fazemos nada se for menor que 2 e, caso contrário, desenhamos nossa seta, alinhando-a com a âncora apropriada para alinhar com os rótulos que terminarão em o nó direito e o nó atual.

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

Esse é o preâmbulo. Agora a árvore emflorestanotação de colchetes. Observe que podemos adicionar opções TikZ regulares aos nós eflorestaos transmitirá.

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

O rótulo à direita é especificado usando just=<label content>. Ele só precisa ser passado para um nó no nível certo - não importa qual.

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

Mais alguns rótulos.

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

Rótulo final. Eles estão dispersos na árvore apenas para mostrar que não importa onde estão especificados.

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

Feche o ambiente e pronto.

\end{justtree}

Código completo:

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

informação relacionada