Preámbulo

Preámbulo

¿Cómo puedo cambiar el tamaño de los nodos para agregar algo de texto? A continuación se muestra el código y el segundo diagrama se genera a partir de este 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}

ingrese la descripción de la imagen aquíingrese la descripción de la imagen aquí

Respuesta1

Con tu código no puedo reproducir tu imagen. Se ve bien. De todos modos, reduzco ligeramente tu código y selecciono nuevas distancias entre hermanos. Con estos cambios obtengo la siguiente imagen:

ingrese la descripción de la imagen aquí

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

En el código comento todas tus distancias entre hermanos y en lugar de ellas las defino con levelestilos.

Respuesta2

Esta respuesta demuestra dos cosas:

  1. que unabosquela solución evita la necesidad de especificar distancias entre hermanos manualmente: el árbol se empaqueta automáticamente para crear una forma compacta y concisa;

  2. que el paquete experimentaljusto arbolesse puede utilizar para agregar las etiquetas que se muestran a la derecha del diagrama original ybosquePuede agregar automáticamente las flechas.

No sé si tienes algún interés en las etiquetas ya que no lo mencionaste, pero necesito casos de prueba, así que también podría infligir los resultados a los incautos mientras estoy en ello.

Si desea probar esto en casa, avíseme que le gustaría una copia ya que aún no está disponible (es decir, no en CTAN).

Aquí está el resultado para que puedas decidir si te molestas en seguir leyendo. No sé si la flecha superior debe alinearse con las otras flechas o con el nodo al que apunta. Opté por este último, pero el primero sólo necesita una ligera modificación.

cosas alineadas con flechas y etiquetas

La gran ventaja debosquees el poder y la flexibilidad que proporciona al dibujar árboles, especialmente el potencial de automatización y formato consistente. También dibuja árboles muy compactos por defecto.

justo arboleses unbosquecontenedor diseñado para hacer una cosa: alinear automáticamente las etiquetas a la izquierda o derecha del árbol, permitiendo que el contenido de la etiqueta se especifique como parte del árbol y proporcionando un par de claves para personalizar el formato de las etiquetas.

Preámbulo

Cargue el código:

\usepackage{justtrees}% v 0.07

Para las puntas de las flechas:

\usetikzlibrary{arrows.meta}

Usaremos la edgesbiblioteca ya que nos permite obtener fácilmente el equivalente de edge from parent fork down.

\useforestlibrary{edges}

Aplique la edgesconfiguración por defecto. Haga esto dentro de un alcance TeX local si no desea que se aplique a todos forestlos árboles del documento.

\forestapplylibrarydefaults{edges}

Cuerpo

justo arbolesproporciona un nuevo entorno justtreeque requiere un único argumento obligatorio que debería proporcionar el preámbulo del árbol. Puede que esté vacío, pero el argumento no se puede omitir.

\begin{justtree}
  {

Para conseguir el cuadrado gira en los bordes.

    forked edges,

Queremos que algunas cosas se apliquen a cada nodo del árbol. Este es esencialmente su estilo boxmodificado ligeramente por compatibilidad.

    for tree={
      font=\small,
      draw,

En lugar de eso align=center, necesitamos esto. (Aunque no estoy seguro de por qué).

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

Necesitamos esto para mantener las cosas alineadas.

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

Si queremos sans text. De lo contrario, omítalo.

      font=\sffamily,
    },

Este es el formato de las etiquetas de la derecha. Los desplazamos hacia la derecha para dejar espacio para las flechas.

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

Este código se encarga de dibujar las flechas. Lo retrasamos para asegurarnos de que las ubicaciones de todos los nodos en el árbol principal se hayan calculado para que nuestras flechas no terminen en lugares inesperados.

    before drawing tree={

Esto es un poco complicado. Funciona, pero no estoy seguro de si es correcto. ¡El manual necesita proporcionar ejemplos más simples (o simplemente algunos ejemplos) para idiotas como yo;)!

Este camina de nodo a nodo y hace algo en cada paso. res la raíz del árbol. Les la última hoja, es decir, el nodo inferior derecho. current and ancestorsluego retrocede desde la última hoja hasta la raíz, es decir, el nodo inferior derecho -> padre -> abuelo -> bisabuelo -> ... -> raíz.

      for nodewalk={rL,current and ancestors}{

No queremos una flecha para los niveles 0o 1de nuestro árbol. (El nivel 0es en realidad invisible cuando se usa justtree). Entonces, probamos el nivel actual en cada paso, no hacemos nada si es menor que 2 y, de lo contrario, dibujamos nuestra flecha, alineándola con el ancla apropiada para alinearla con las etiquetas que terminarán en el nodo derecho y el actual.

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

Ese es el preámbulo. Ahora el árbol enbosqueNotación entre corchetes. Tenga en cuenta que podemos agregar opciones regulares de TikZ a los nodos ybosquelos transmitirá.

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

La etiqueta de la derecha se especifica mediante just=<label content>. Sólo hay que pasarlo a un nodo del nivel correcto, no importa cuál.

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

Un par de etiquetas más.

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

Etiqueta final. Estos están dispersos dentro del árbol sólo para mostrar que no importa dónde se especifiquen.

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

Cierra el entorno y listo.

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

información relacionada