我正在尝试使用 Tikzpicture 绘制 SIS 流行病模型,就像本页中的那样http://pythonhosted.org/epigrass/intromodels.html。我的问题是我无法制作从 I 隔间到 S 隔间的箭头。
此外,我想添加其他超出人口统计范围的箭头(对于这一点,我不知道如何进行)。
我在这里打印我的错误代码:
\begin{tikzpicture}[node distance=6cm,auto,>=latex',every node/.append style={align=center}]
\node [int] (a) {$S$};
\node [int] (c) [right of=a] {$I$};
\path[->, auto=false] (a) edge node {$\beta I$ \\[.2em]} (c)
(c) edge node {$\gamma$ \\[.2em] } (e) ;
\end{tikzpicture}
答案1
像这样吗?
我必须定义int
样式并包含arrows
库latex'
。我还right of
用新语法(positioning
库)替换了righ= of
(参见:PGF/TikZ 中“right of=”和“right=of”之间的区别)
对于箭头,out of the box
我使用了一个coordinate
节点,尽管其他一些解决方案也是可能的。
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{arrows,positioning}
\begin{document}
\begin{tikzpicture}[node distance=1cm,auto,>=latex',every node/.append style={align=center},int/.style={draw, minimum size=1cm}]
\node [int] (S) {$S$};
\node [int, right=of S] (I) {$I$};
\coordinate[right=of I] (out);
\path[->, auto=false] (S) edge node {$\beta I$ \\[.2em]} (I)
(I) edge node {$\gamma$ \\[.2em] } (out) edge [out=-120, in=-60] node[below] {$\delta$} (S);
\end{tikzpicture}
\end{document}
更新:
Torbjørn T. 对您的代码提出了更多改进:
node {$\beta I$ \\[.2em]}
只需将语法替换为node[above] {$\beta I$}
,即可TiKZ
将边标签放置在箭头上方。在这种情况下,由于您已经包含了auto
选项,因此不需要,[above]
因为边标签会自动按照箭头方向放置。您使用 停止了这种自动化auto=false
。
使用新arrows.meta
库而不是弃用的(尽管仍受支持)arrows
。例如,latex'
style 已被替换为Latex
新代码为:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{arrows.meta,positioning}
\begin{document}
\begin{tikzpicture}[node distance=1cm, auto,
>=Latex,
every node/.append style={align=center},
int/.style={draw, minimum size=1cm}]
\node [int] (S) {$S$};
\node [int, right=of S] (I) {$I$};
\coordinate[right=of I] (out);
\path[->] (S) edge node {$\beta I$} (I)
(I) edge node {$\gamma$} (out)
edge[out=-120, in=-60] node {$\delta$} (S);
\end{tikzpicture}
\end{document}