矢印から矢印、そしてより短い(?)矢印

矢印から矢印、そしてより短い(?)矢印

私は仮説の見栄えの良いグラフィカル表現を生成しようと多くの時間を費やしてきましたが、うまくいかないようです。主な問題は、矢印 (キャプション H8) をノード H から F と G の間の矢印の中央に向ける方法がわからないことです。また、別の矢印 (キャプション H9) をノード I から、H から F と G の間の矢印に向ける先ほど作成した矢印に向けたいと思っています。もう 1 つの問題は、矢印が現時点では少し奇妙に見えることです (矢印を短くして、ノードに「触れない」ようにする必要がありますか?)。これは現在の状態です。

ここに画像の説明を入力してください

以下は、2 つの矢印がない現在のコードです。

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

ご協力をよろしくお願いいたします!

答え1

ノード間のポイントは次のように定義できます。

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

これは、とfgの間の という名前の座標を定義します。は、 は、は を意味し、は に非常に近い位置です。 このオプションを省略すると と同じです。つまり、座標は 2 つのノードの中間に配置されます。FGpos=0Fpos=1Gpos=0.2Fpos=0.5

-|およびを使用して、他のノードの上/下/左/右の位置を指定できます|-。位置は(A-|B)、水平方向に の左/右A、垂直方向に の上/下になりますB

shorten <=2pt矢印を短くするには、オプション(矢印の始端を 2 ポイント短くする) とshorten >=2pt(矢印の終端を 2 ポイント短くする) を使用します。これを に追加するとtikzpictureすべての行に影響し、コマンドのオプションに追加すると\draw特定の行にのみ影響します。

ここに画像の説明を入力してください

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

編集コメント内の質問に関して: エッジ ラベルを配置する方法はいくつかあります。

等に距離を追加することができますabovebelow

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

xshiftおよび/またはを使用してyshiftノードを移動できます。

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

内側または外側の分離を変更できます。これは、ノードの境界を囲む余分なスペースです。

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

内容のないノードを線上に直接配置し、内容をラベルとして追加することができます。ノードに

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

最初の 2 行は同等です。方向が指定されていない場合、デフォルトは上、つまり 90 度です。さらに、ラベルの距離をオプションとして指定できます。オプションの値にlabel角括弧、カンマ、または等号が含まれている場合は、追加の中括弧が必要であることに注意してください。

以下の例では、draw境界とノードの位置を表示するオプションを追加しました。

ここに画像の説明を入力してください

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

答え2

既存の矢印を短くする簡単な方法は、 souter sepに矢印を追加することですmain node

矢印がない場合は、矢印の途中にあるノードに名前を付けて、それを開始点として使用できます。

ここに画像の説明を入力してください

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

答え3

quotes*Torbjørn T.$ の回答に基づいていますが、エッジ ラベル付け用のパッケージ、ノード配置用のパッケージを使用しpositioning、コードを短くするための努力も行っています。

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

ここに画像の説明を入力してください

関連情報