私は次のような SIRS (感受性-感染性-回復-感受性) 図を作成しようとしています。
もうすぐ完了です。上の矢印以外はすべて「回復済み」から「影響を受けやすい」に変わりました。現在のコードは次のとおりです。
\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{positioning, arrows.meta}
\begin{document}
\begin{tikzpicture}[
node distance=2.5cm,
arrow/.style={->, >=Stealth, thick},
box/.style={draw, rectangle, rounded corners, minimum width=2cm, minimum height=1cm, align=center}
]
% Nodes
\node[box] (S) {Susceptible};
\node[box, right=of S] (I) {Infectious};
\node[box, right=of I] (R) {Recovered};
% Arrows
\draw[arrow] (S) -- node[above]{$\beta$} (I);
\draw[arrow] (I) -- node[above]{$\gamma$} (R);
\end{tikzpicture}
\end{document}
「回復済み」から「感受性あり」への矢印を描くのに問題があります。重ならずにボックスの上を通る矢印を描くにはどうすればよいでしょうか? ご協力いただければ幸いです。
答え1
これが私の当初の素朴な試みでした:
\node (A) [above=0.5cm of I] {$\delta$};
\draw[arrow] (R.north) |- (A.south) -| (S.north);
ユーザーの Sandy G は、調査するのが驚くほど難しい (Google 検索は難しいことが判明) 手法を使用するという、より良いオプションを提示しています。--++
私は、それについて説明しているこの古い (11 年前の) 投稿を見つけました。TiKz ダッシュ ダッシュ プラス プラス
そこからTikZのマニュアルセクションにたどり着きました13.4 相対座標と増分座標
新しいパス座標の前にを使用すると、パス内のその前の座標を基準とした相対座標を指定できます++
。マニュアルより:
座標の前に ++ を付けると、座標が「相対的」になります。++(1cm,0pt) のような座標は、「前の位置から 1cm 右に移動し、これが新しい現在の位置になる」ことを意味します。相対座標は、「ローカル」なコンテキストで役立つことがよくあります。
これにより、次のことが簡単になります。
\draw[arrow] (R.north) -- ++(0,0.5) -| (S.north) node[above, pos=0.25] {$\delta$};
これにより、ノード R の北から 0.5 上にノードが描画され、次に S の北に接続しますが、そこに到達するまでに急カーブを曲がります ( で指定-|
)。ノードはパス (対称的になります) の 0.25 上に配置され、 で塗りつぶされます$\delta$
。
どちらの回答もほぼ同じイメージになりますが、複数の視点を見て楽しんでいただけるのではないかと思いました。
MWE:
\documentclass[tikz, border=10pt]{standalone}
\usetikzlibrary{positioning, arrows.meta}
\begin{document}
\begin{tikzpicture}[
node distance=2.5cm,
arrow/.style={->, >=Stealth, thick},
box/.style={draw, rectangle, rounded corners, minimum width=2cm, minimum height=1cm, align=center}
]
% Nodes
\node[box] (S) {Susceptible};
\node[box, right=of S] (I) {Infectious};
\node[box, right=of I] (R) {Recovered};
% Arrows
\draw[arrow] (S) -- node[above]{$\beta$} (I);
\draw[arrow] (I) -- node[above]{$\gamma$} (R);
% My Naive Attempt
% \node (A) [above=0.5cm of I] {$\delta$};
% \draw[arrow] (R.north) |- (A.south) -| (S.north);
% Sandy G's code
\draw[arrow] (R.north) -- ++(0,.5) -| (S.north) node[above, pos=0.25] {$\delta$};
\end{tikzpicture}
\end{document}