假设我想画一张图来展示从美国到加拿大的出口和进口情况,我尝试的代码是:
\begin{tikzpicture}
\node (a) at (0,0){USA};
\node (b) at (1,0){Canada};
\draw [->] (a)--node[above]{export}(b);
\draw [->](b)--node[below]{import}(a);
\end{tikzpicture}
我知道这绝对是错误的,因为它只生成一个有两个头的箭头。我该如何修改此代码?
答案1
欢迎使用 TeX.SE。您可以使用to
运算符及其bend left
或bend right
选项。此运算符接受其他选项,例如looseness
控制曲率,in
以及out
控制起始和终止角度,例如这里。有关可用选项的更多信息,您可以/tikz/curve to
查看钛钾Z & PGF 手册(本手册 3.1.5b 版本第 838 页)。
\documentclass[tikz, border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}[scale=3]
\node (a) at (0,0) {USA};
\node (b) at (1,0) {Canada};
\draw[->] (a) to[bend left=20] node[above] {export} (b);
\draw[->] (b) to[bend left=20] node[below] {import} (a);
\end{tikzpicture}
\end{document}
如果省略[bend left=20]
箭头,或使用[bend left=0]
或[bend right=0]
,Ti钾Z 将绘制一条直线(一个线段)。
如果要移动此类箭头,我认为您需要在每个节点a
和上选择一个锚点b
,以便移动的点是众所周知的。例如,如果我选择锚点a.30
(30 是极角的度数)和b.150
(150 = 180 - 30 表示对称),将这些点向上移动0.1cm
并增加上箭头的曲率,我们得到:
\documentclass[tikz, border=2mm]{standalone}
\begin{document}
\begin{tikzpicture}[scale=3]
\node (a) at (0,0) {USA};
\node (b) at (1,0) {Canada};
\draw[->] ([yshift=0.1cm]a.30) to[bend left=40] node[above] {export}
([yshift=0.1cm]b.150);
\draw[->] (b) to[bend left=20] node[below] {import} (a);
\end{tikzpicture}
\end{document}
yshift
当然,负值会向下移动。
绘制弯曲箭头的另一种可能性是使用..
运算符,但它可能有点困难,因为您需要提供适当的控制点。
答案2
@frougon 答案的一个小变化。使用包arrows.meta
,positioning
您quotes
的 MWE 图表可以是:
\documentclass[tikz, margin=2mm]{standalone}
\usetikzlibrary{arrows.meta,
positioning,
quotes}
\begin{document}
\begin{tikzpicture}[
node distance = 22mm,
every edge/.style = {draw, -Straight Barb, bend left=15},
]
\node (a) {USA};
\node (b) [right=of a] {Canada};
\draw (a) edge["export"] (b)
(b) edge["import"] (a);
\end{tikzpicture}
\begin{tikzpicture}[
node distance = 22mm,
LA/.style = {draw, -Straight Barb, transform canvas={yshift=#1}},
every edge quotes/.append style = {font=\small, inner sep=1pt}
]
\node (a) {USA};
\node (b) [right=of a] {Canada};
\draw (a) edge[LA=+2pt,"export"] (b)
(b) edge[LA=-2pt,"import"] (a);
\end{tikzpicture}
\end{document}