Pfeil zu Pfeil und kürzere (?) Pfeile

Pfeil zu Pfeil und kürzere (?) Pfeile

Ich habe viel Zeit damit verbracht, eine ansprechende grafische Darstellung von Hypothesen zu erstellen, aber ich kriege es einfach nicht hin. Das Hauptproblem ist, dass ich nicht weiß, wie ich einen Pfeil (Beschriftung H8) von Knoten H auf die Mitte des Pfeils zwischen F und G zeigen lassen kann. Außerdem möchte ich, dass dann ein weiterer Pfeil (Beschriftung H9) von Knoten I auf den gerade erstellten Pfeil zeigt, der von H auf den Pfeil zwischen F und G zeigt. Ein weiteres Problem ist, dass die Pfeile meiner Meinung nach im Moment etwas seltsam aussehen (sollten sie kürzer sein und die Knoten nicht „berühren“?). So sieht es im Moment aus:

Bildbeschreibung hier eingeben

Und dies ist mein aktueller Code ohne diese beiden Pfeile:

\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}
 \tikzset{main node/.style={rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt},
            }


\begin{document} \centering \begin{tikzpicture}

    \node[main node] (A) at (0,3) {Situation};
    \node[main node] (B) at (3,1) {Gratitude};
    \node[main node] (C) at (3,3) {Guilt};
    \node[main node] (D) at (3,5) {Anger};
    \node[main node] (F) at (6,3) {State};
    \node[main node] (G) at (9,3) {Actions};
    \node[main node] (H) at (7.5,0) {Higher order beliefs};
    \node[main node] (I) at (9,1.5) {Time pressure};
\draw [->] (A) -- node[below] {H3} (B); 

\draw [->] (A) -- node[below] {H2} (C);

\draw [->] (A) -- node[above] {H1} (D);

\draw [->] (B) -- node[below] {H6} (F);

\draw [->] (C) -- node[below] {H5} (F);

\draw [->] (D) -- node[above] {H4} (F);

\draw [->] (F) -- node[above] {H7} (G);
\end{tikzpicture}
\end{document}

Vielen Dank im Voraus für Ihre Hilfe!

Antwort1

Sie können Punkte zwischen Knoten wie folgt definieren:

\draw [->] (F) -- coordinate[pos=0.2] (fg) (G);

Dies definiert eine Koordinate mit dem Namen fgzwischen Fund G; pos=0bedeutet bei F, pos=1bedeutet bei Gund pos=0.2ist eine Position ziemlich nahe bei F. Das Weglassen der Option hat die gleiche Wirkung wie pos=0.5, d. h. die Koordinate würde in der Mitte zwischen den beiden Knoten platziert.

-|Mit und können Sie Positionen angeben, die über/unter/links/rechts von anderen Knoten liegen |-. Die Position (A-|B)ist horizontal links/rechts von Aund vertikal über/unter von B.

shorten <=2ptDas Kürzen von Pfeilen kann mit den Optionen (kürzt den Anfang von Pfeilen um 2pt) und (kürzt das Ende von Pfeilen um 2pt) erreicht werden shorten >=2pt. Das Hinzufügen zu den tikzpictureOptionen wirkt sich auf alle Zeilen aus, das Hinzufügen zu den Optionen eines \drawBefehls wirkt sich nur auf bestimmte Zeilen aus.

Bildbeschreibung hier eingeben

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset
  {main node/.style=
    {rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt}
  }
\begin{document}
\begin{tikzpicture}%
  [shorten <=2pt,shorten >=2pt,>=stealth]
  \node[main node] (A) at (0,3) {Situation};
  \node[main node] (B) at (3,1) {Gratitude};
  \node[main node] (C) at (3,3) {Guilt};
  \node[main node] (D) at (3,5) {Anger};
  \node[main node] (F) at (6,3) {State};
  \node[main node] (G) at (9,3) {Actions};
  \node[main node] (H) at (7.5,0) {Higher order beliefs};
  \node[main node] (I) at (9,1.5) {Time pressure};
  \draw [->] (A) -- node[below] {H3} (B); 
  \draw [->] (A) -- node[below] {H2} (C);
  \draw [->] (A) -- node[above] {H1} (D);
  \draw [->] (B) -- node[below] {H6} (F);
  \draw [->] (C) -- node[below] {H5} (F);
  \draw [->] (D) -- node[above] {H4} (F);
  \draw [->] (F) -- node[above] {H7} coordinate[pos=0.2] (fg) (G);
  \draw [<-] (fg) --node[left] {H8} coordinate (fgH) (fg|-H.north);
  \draw [->] (I.west) -- node[above] {H9} (I.west-|fgH); 
\end{tikzpicture}
\end{document}

BearbeitenZur Frage im Kommentar: Es gibt mehrere Methoden um Randbeschriftungen zu positionieren.

Sie können eine Distanz zu usw. hinzufügen above.below

\draw [->] (A) -- node[below=3mm] {H2} (C);

Sie können xshiftund/oder verwenden yshift, um den Knoten zu verschieben:

\draw [->] (C) -- node[below,xshift=-5mm] {H5} (F);

Sie können den inneren oder äußeren Abstand ändern. Dies ist der zusätzliche Raum, der die Grenze des Knotens umgibt.

\draw [->] (A) -- node[below,outer sep=2pt] {H3} (B); 
\draw [->] (A) -- node[above,inner sep=7pt] {H1} (D);

Sie können den Knoten ohne Inhalt direkt auf die Zeile setzen und den Inhalt als Beschriftung hinzufügen.zum Knoten.

\draw [->] (D) -- node[label=H4] {} (F);
\draw [->] (D) -- node[label=90:H4] {} (F);
\draw [->] (B) -- node[label={[label distance=1cm]-90:H6}] {} (F);

Die ersten beiden Zeilen sind gleichwertig: Wenn keine Richtung angegeben ist, ist die Vorgabe oben, also 90 Grad. Zusätzlich kann optional der Beschriftungsabstand angegeben werden. Beachten Sie, dass Sie zusätzliche Klammern benötigen, wenn der Wert der Option labeleckige Klammern, Kommas oder Gleichheitszeichen enthält.

Im folgenden Beispiel habe ich die drawOption hinzugefügt, die Grenze und die Position der Knoten anzuzeigen.

Bildbeschreibung hier eingeben

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset
  {main node/.style=
    {rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt}
  }
\begin{document}
\begin{tikzpicture}%
  [shorten <=2pt,shorten >=2pt,>=stealth]
  \node[main node] (A) at (0,3) {Situation};
  \node[main node] (B) at (3,1) {Gratitude};
  \node[main node] (C) at (3,3) {Guilt};
  \node[main node] (D) at (3,5) {Anger};
  \node[main node] (F) at (6,3) {State};
  \draw [->] (A) -- node[below,outer sep=2pt,draw] {H3} (B); 
  \draw [->] (A) -- node[below=3mm,draw] {H2} (C);
  \draw [->] (A) -- node[above,inner sep=7pt,draw] {H1} (D);
  \draw [->] (B) -- node[label={[label distance=1cm]-90:H6},draw] {} (F);
  \draw [->] (C) -- node[below,xshift=-5mm,draw] {H5} (F);
  \draw [->] (D) -- node[label=H4,draw] {} (F);
\end{tikzpicture}
\end{document}

Antwort2

outer sepEine schnelle Methode, die vorhandenen Pfeile kürzer zu machen, besteht darin , den Pfeilen einige hinzuzufügen main node.

Bei den fehlenden Pfeilen können Sie dem Knoten, der sich in der Mitte des Pfeils befindet, einen Namen geben und diesen als Ausgangspunkt verwenden.

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage[english]{babel}
\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{
   main node/.style={rectangle,fill=white!5,draw,minimum size=1cm,inner sep=4pt,outer sep=2pt}
   }
\begin{document}
\centering
\begin{tikzpicture}

    \node[main node] (A) at (0,3) {Situation};
    \node[main node] (B) at (3,1) {Gratitude};
    \node[main node] (C) at (3,3) {Guilt};
    \node[main node] (D) at (3,5) {Anger};
    \node[main node] (F) at (6,3) {State};
    \node[main node] (G) at (9,3) {Actions};
    \node[main node] (H) at (7.5,0) {Higher order beliefs};
    \node[main node] (I) at (9,1.5) {Time pressure};

\draw [->] (A) -- node[below] {H3} (B); 
\draw [->] (A) -- node[below] {H2} (C);
\draw [->] (A) -- node[above] {H1} (D);
\draw [->] (B) -- node[below] {H6} (F);
\draw [->] (C) -- node[below] {H5} (F);
\draw [->] (D) -- node[above] {H4} (F);
\draw [->] (F) -- node[above] (FG) {H7} (G);

\draw [->,shorten >=2pt] (H) to[bend left] node[left] (FGH) {H8} (FG);
\draw [->] (I) -- node[above] {H9} (FGH);
\end{tikzpicture}
\end{document}

Antwort3

Basierend auf der Antwort von *Torbjørn T.$, aber unter Verwendung eines quotesPakets zur Kantenbeschriftung, eines Pakets positioningzur Knotenpositionierung und mit einigen Bemühungen, den Code kürzer zu machen:

\documentclass[tikz, margin=3mm]{standalone}
\usetikzlibrary{positioning, quotes}

\begin{document}
    \centering
\begin{tikzpicture}[auto,
    node distance = 6mm and 15 mm,
 main node/.style = {rectangle, draw, minimum size=1cm,
                     inner sep=4pt, outer sep=2pt}
                    ]
    \begin{scope}[every node/.style={main node}]
\node  (A) {Situation};
\node[right=of A]   (C) {Guilt};
\node[below=of C]   (B) {Gratitude};
\node[above=of C]   (D) {Anger};
\node[right=of C]   (F) {State};
\node[right=of F]   (G) {Actions};
\node[below=of G]   (I) {Time pressure};
\node[below=of I.south west]    (H) {Higher order beliefs};
    \end{scope}
\draw[->]   (A) edge ["H3" '] (B) 
            (A) edge ["H2"] (C) 
            (A) edge ["H1"] (D) 
            (B) edge ["H6"'] (F) 
            (C) edge ["H5"] (F) 
            (D) edge ["H4"] (F) 
            (F) edge node[above] (FG) {H7} (G);
\draw [->,shorten >=2pt] 
            (H) edge [bend left] node[left] (FGH) {H8} (FG)
            (I)  to ["H9" '] (FGH.east |- I);
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen