使用 TikZ 在 SIRS 图中绘制箭头

使用 TikZ 在 SIRS 图中绘制箭头

我正在尝试创建一个如下所示的 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 给出了一个更好的选择,即使用一种出奇难以研究的技术(事实证明,谷歌搜索--++很难);我找到了这篇谈论它的旧帖子(11 年前):TiKz dash dash plus plus 这让我进入了 TikZ 手册部分13.4 相对坐标和增量坐标

我们可以在新的路径坐标前指定一个相对坐标,++使其相对于路径中它之前的坐标。手册中写道:

您可以在坐标前加上 ++ 来使其成为“相对的”。诸如 ++(1cm,0pt) 之类的坐标表示“向前一个位置右侧移动 1 厘米,使其成为新的当前位置”。相对坐标通常在“本地”上下文中很有用:

这使得它变得非常简单:

\draw[arrow] (R.north) -- ++(0,0.5) -| (S.north) node[above, pos=0.25] {$\delta$};

这将从节点 R 的北边向上 0.5 绘制一个节点,然后连接到 S 的北边,但要急转弯才能到达那里(由 指定-|)。节点放置在路径上方 0.25(恰好是对称的)处,并用 填充$\delta$

平均能量损失

这两个答案都会给出大致相同的图像,但我认为您会喜欢看到多种视角。

梅威瑟:

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

相关内容