Präambel

Präambel

Wie kann ich die Größe von Knoten ändern, um Text hinzuzufügen? Unten ist der Code und das zweite Diagramm wird aus diesem Code generiert.

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

Bildbeschreibung hier eingebenBildbeschreibung hier eingeben

Antwort1

Mit deinem Code kann ich dein Bild nicht reproduzieren. Es sieht gut aus. Trotzdem reduziere ich deinen Code leicht und wähle neue Geschwisterabstände. Mit diesen Änderungen erhalte ich das folgende Bild:

Bildbeschreibung hier eingeben

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

Im Code kommentiere ich alle Ihre Geschwisterabstände und definiere sie stattdessen mit levelStilen.

Antwort2

Diese Antwort zeigt zwei Dinge:

  1. dass einWaldLösung macht es überflüssig, Geschwisterabstände manuell anzugeben – der Baum wird automatisch gepackt, um eine kompakte und prägnante Form zu erstellen.

  2. dass das experimentelle Paketnur Bäumekönnen die Beschriftungen auf der rechten Seite des Originaldiagramms hinzugefügt werden undWaldkann die Pfeile automatisch hinzufügen.

Ich weiß nicht, ob Sie an den Etiketten interessiert sind, da Sie es nicht erwähnt haben, aber ich brauche Testfälle, also kann ich, wenn ich schon dabei bin, den Unvorsichtigen auch gleich die Ergebnisse aufzwingen.

Wenn Sie dies zu Hause ausprobieren möchten, lassen Sie mich wissen, dass Sie eine Kopie möchten, da es noch nicht ohne Weiteres verfügbar ist (d. h. nicht auf CTAN).

Hier ist das Ergebnis, damit Sie entscheiden können, ob Sie weiterlesen möchten. Ich weiß nicht, ob der oberste Pfeil mit den anderen Pfeilen oder mit dem Knoten ausgerichtet werden soll, auf den er zeigt. Ich habe mich für Letzteres entschieden, aber Ersteres muss nur geringfügig geändert werden.

ausgerichtete Elemente mit Pfeilen und Beschriftungen

Der große Vorteil vonWaldist die Leistung und Flexibilität, die es beim Zeichnen von Bäumen bietet, insbesondere das Potenzial zur Automatisierung und konsistenten Formatierung. Außerdem zeichnet es standardmäßig sehr kompakte Bäume.

nur Bäumeist einWaldWrapper, der für eine Aufgabe konzipiert ist: Beschriftungen automatisch links oder rechts vom Baum auszurichten, wobei der Beschriftungsinhalt als Teil des Baums angegeben werden kann und einige Schlüssel zum Anpassen des Beschriftungsformats bereitgestellt werden.

Präambel

Laden Sie den Code:

\usepackage{justtrees}% v 0.07

Für die Pfeilspitzen:

\usetikzlibrary{arrows.meta}

Wir verwenden die edgesBibliothek, da wir damit problemlos das Äquivalent von erhalten können edge from parent fork down.

\useforestlibrary{edges}

Wenden Sie die edgesEinstellungen als Standard an. Tun Sie dies in einem lokalen TeX-Bereich, wenn Sie nicht möchten, dass dies auf jeden forestBaum im Dokument angewendet wird.

\forestapplylibrarydefaults{edges}

Körper

nur Bäumestellt eine neue Umgebung bereit justtree, die ein einziges obligatorisches Argument annimmt, das die Präambel des Baums bereitstellen soll. Dieses kann leer sein, das Argument kann jedoch nicht weggelassen werden.

\begin{justtree}
  {

Um die rechtwinkligen Kurven an den Kanten zu erhalten.

    forked edges,

Wir möchten, dass bestimmte Dinge auf jeden Knoten im Baum angewendet werden. Im Wesentlichen wird Ihr Stil boxaus Kompatibilitätsgründen leicht modifiziert.

    for tree={
      font=\small,
      draw,

Anstelle von align=centerbrauchen wir dies. (Ich bin mir jedoch nicht sicher, warum.)

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

Wir brauchen dies, um die Dinge in Einklang zu halten.

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

Wenn wir Text ohne Inhalt wollen. Andernfalls weglassen.

      font=\sffamily,
    },

Dies ist das Format der Beschriftungen auf der rechten Seite. Wir verschieben sie nach rechts, um Platz für die Pfeile zu schaffen.

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

Dieser Code ist für das Zeichnen der Pfeile verantwortlich. Wir verzögern ihn, um sicherzustellen, dass die Positionen aller Knoten im Hauptbaum berechnet wurden, damit unsere Pfeile nicht an unerwarteten Stellen landen.

    before drawing tree={

Das ist ein bisschen kompliziert. Es funktioniert, aber ich bin mir nicht sicher, ob es richtig ist. Das Handbuch muss einfachere Beispiele (oder überhaupt einige Beispiele) für Idioten wie mich bereitstellen ;)!

Dies geht von Knoten zu Knoten und tut bei jedem Schritt etwas. rist die Wurzel des Baums. List das letzte Blatt, d. h. der untere rechte Knoten. current and ancestorsbewegt sich dann vom letzten Blatt wieder nach oben zur Wurzel, d. h. Knoten rechts unten -> übergeordnet -> Großelternteil -> Urgroßelternteil -> ... -> Wurzel.

      for nodewalk={rL,current and ancestors}{

Wir möchten keinen Pfeil für die Ebenen 0oder 1unseren Baum. (Die Ebene 0ist bei Verwendung eines tatsächlich unsichtbar justtree.) Daher testen wir bei jedem Schritt die aktuelle Ebene, tun nichts, wenn sie kleiner als 2 ist, und zeichnen andernfalls unseren Pfeil, wobei wir ihn am entsprechenden Anker ausrichten, um ihn an den Beschriftungen auszurichten, die rechts und am aktuellen Knoten enden.

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

Das ist die Einleitung. Nun der Baum inWald's Klammernotation. Beachten Sie, dass wir Knoten und Knoten reguläre TikZ-Optionen hinzufügen können.Waldwerde sie weitergeben.

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

Das Label auf der rechten Seite wird mit angegeben just=<label content>. Es muss lediglich an einen Knoten auf der richtigen Ebene übergeben werden - egal welcher.

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

Noch ein paar Etiketten.

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

Endgültige Bezeichnung. Diese sind im Baum verteilt, um zu zeigen, dass es egal ist, wo sie angegeben werden.

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

Schließen Sie die Umgebung und wir sind fertig.

\end{justtree}

Vollständiger Code:

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

verwandte Informationen