화살표 대 화살표 및 더 짧은(?) 화살표

화살표 대 화살표 및 더 짧은(?) 화살표

나는 가설에 대한 보기 좋은 그래픽 표현을 생성하려고 많은 시간을 보냈지만 올바르게 이해할 수 없는 것 같습니다. 가장 큰 문제는 화살표를 표시하는 방법을 알 수 없다는 것입니다(캡션 H8). 노드 H에서 F와 G 사이의 화살표 중간을 가리킵니다. 또 다른 화살표(캡션 H9)가 노드 I에서 방금 생성된 화살표를 가리키고 H에서 F와 G 사이의 화살표를 가리킵니다. 또 다른 문제는 다음과 같습니다. 내 생각엔 화살표가 좀 이상해 보이는 것 같아요. (그들이 더 짧아야 하고 노드에 '접촉'하지 않아야 할까요?) 현재 모습은 다음과 같습니다.

여기에 이미지 설명을 입력하세요

그리고 이것은 두 개의 화살표가 없는 현재 코드입니다.

\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사이에 명명된 좌표를 정의합니다 . 을 의미하고 , 을 의미하며 은 에 매우 가까운 위치에 있습니다 . 옵션을 생략하면 과 동일합니다 . 즉, 좌표가 두 노드 사이의 중간에 배치됩니다.FGpos=0Fpos=1Gpos=0.2Fpos=0.5

-|및 를 사용하여 다른 노드의 위/아래/왼쪽/오른쪽 위치를 지정할 수 있습니다 |-. 위치는 (A-|B)가로로 왼쪽/오른쪽 A, 세로로 위/아래입니다 B.

shorten <=2pt화살표 길이를 줄이는 옵션은 (화살표 시작 부분 2pt 단축)과 shorten >=2pt(화살표 끝 부분 2pt 단축) 옵션을 사용하면 됩니다 . 이를 추가하면 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}

편집하다의견의 질문과 관련하여 가장자리 레이블을 배치하는 방법에는 여러 가지가 있습니다.

등에 거리를 추가할 수 있습니다 above.below

\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);

처음 두 줄은 동일합니다. 방향이 지정되지 않은 경우 기본값은 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

기존 화살표를 더 짧게 만드는 빠른 방법은 s outer 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

*Torbjørn T.$ 답변을 기반으로 하지만 quotes가장자리 라벨링에는 패키지를 사용하고 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}

여기에 이미지 설명을 입력하세요

관련 정보