我的问题与此类似:使用 tikz 在节点之间绘制箭头
我想使用相对坐标绘制几条带箭头的线。我期望该命令
\draw (axis cs:0,0) edge[->] ++(axis direction cs:-2,0) edge[->] ++(axis direction cs:0,1);
产生以下图(左图),但得到的却是右图。
++
然而,虽然使用了,坐标并没有从原点移动。MWE:
\documentclass[a4paper]{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}%
\begin{axis}[title={want},axis lines=middle,xmin=-3, xmax=1, ymin=-2, ymax=3,]
% This is the result I want
\draw[green,->] (axis cs:0,0) -- ++(axis direction cs:-2,0);
\draw[green,->] (axis cs:-2,0) -- ++(axis direction cs:0,1);
\end{axis}
\begin{axis}[xshift=7cm, axis lines=middle, title={got},xmin=-3, xmax=1, ymin=-2, ymax=3,]
% I want to use multiple relative coordinates in one command as in the following:
\draw[red] (axis cs:0,0) edge[->] ++(axis direction cs:-2,0) edge[->] ++(axis direction cs:0,1);
\end{axis}
\end{tikzpicture}%
\end{document}
答案1
使用 PGFPlots 时始终设置compat
级别。不要写axis cs:
- 这是默认坐标系。
edge
开始一条新路径,因此++
不会有任何帮助。这是正常的 TikZ 行为 - 不仅仅是 PGFPlots。我不知道你想实现什么,所以不能说什么是最好的方法。它可能是一个\addplot
循环\foreach
(或 PGFPlot 友好版本)。-或者干脆放弃不指定下一个箭头的起点的想法(就像你给出的链接一样)。
以下是仅使用您指定的两个点的一种方法:
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle, xmin=-3, xmax=1, ymin=-2, ymax=3,]
\draw[red, thick, ->] (0,0) edge +(axis direction cs:-2,0) \pgfextra{\pgfgetlastxy{\macrox}{\macroy}} (\macrox,\macroy) -- +(axis direction cs:0,1);
\end{axis}
\end{tikzpicture}
\end{document}