¿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}
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:
\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 level
estilos.
Respuesta2
Esta respuesta demuestra dos cosas:
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;
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.
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 edges
biblioteca ya que nos permite obtener fácilmente el equivalente de edge from parent fork down
.
\useforestlibrary{edges}
Aplique la edges
configuración por defecto. Haga esto dentro de un alcance TeX local si no desea que se aplique a todos forest
los árboles del documento.
\forestapplylibrarydefaults{edges}
Cuerpo
justo arbolesproporciona un nuevo entorno justtree
que 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 box
modificado 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. r
es la raíz del árbol. L
es la última hoja, es decir, el nodo inferior derecho. current and ancestors
luego 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 0
o 1
de nuestro árbol. (El nivel 0
es 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}