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:
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 fg
zwischen F
und G
; pos=0
bedeutet bei F
, pos=1
bedeutet bei G
und pos=0.2
ist 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 A
und vertikal über/unter von B
.
shorten <=2pt
Das 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 tikzpicture
Optionen wirkt sich auf alle Zeilen aus, das Hinzufügen zu den Optionen eines \draw
Befehls wirkt sich nur auf bestimmte Zeilen aus.
\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 xshift
und/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 label
eckige Klammern, Kommas oder Gleichheitszeichen enthält.
Im folgenden Beispiel habe ich die draw
Option hinzugefügt, die Grenze und die Position der Knoten anzuzeigen.
\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 sep
Eine 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.
\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 quotes
Pakets zur Kantenbeschriftung, eines Pakets positioning
zur 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}