我正在使用 hack这里在 tikzpicture 中绘制一个轴,并在离开轴环境后在范围内“重新创建”坐标系(以便能够使用foreach
命令)。但是,似乎\pgfgetlastxy
返回了错误坐标系中的坐标。请考虑此示例
\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\begin{axis}[ymin=0, ymax=1, xmin=0, xmax=1]
\coordinate (O) at (axis cs:0,0);
\coordinate (X) at (axis cs:1,0);
\coordinate (Y) at (axis cs:0,1);
\end{axis}
\begin{scope}[x={($(X)-(O)$)}, y={($(Y)-(O)$)}, shift={(O)}]
\coordinate (A) at (0.5, 0.5);
\path (A);
\pgfgetlastxy{\XCoord}{\YCoord};
\show\XCoord % Shows 97.49985pt
\show\YCoord % Shows 80.99976pt
\end{scope}
\end{tikzpicture}
\end{document}
我如何才能变(97.49985pt, 101.2497pt)
回原版(0.5,0.5)
?或者更好的是,是否有命令可以返回这些坐标?
答案1
请注意,您的问题是关于 PGF/TikZ,而不是pgfplots
。该命令\pgfgetlastxy
返回中的数字pt
。要获取中的一些数字cm
,您可以使用
\pgfmathsetmacro{\dABcm}{\dAB*(1pt)/(1cm)}
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\draw[gray!30] (-1,-1) grid (5,4);
\path
(0,0) coordinate (A) node[below left]{A}
(4,3) coordinate (B) node[above right]{B};
\path (A); \pgfgetlastxy{\xA}{\yA};
\path (B); \pgfgetlastxy{\xB}{\yB};
\pgfmathsetmacro{\dAB}{veclen(\xB-\xA,\yB-\yA)}
\draw (A)--(B) node[midway,above,sloped]{$\dAB$ pt};
\pgfmathsetmacro{\dABcm}{\dAB*(1pt)/(1cm)}
\path (A)--(B) node[midway,below,sloped]{$\dABcm$ cm};
\end{tikzpicture}
\end{document}
您可能希望控制数字的精度。为此,请precision
在 \pgfkeys 中设置
\pgfkeys{/pgf/number format/.cd,fixed,precision=2}
\pgfmathprintnumber
并按照第 97 节“数字打印”中的说明写出手册
\documentclass[tikz,border=5mm]{standalone}
\begin{document}
\begin{tikzpicture}
\pgfkeys{/pgf/number format/.cd,fixed,precision=2}
\draw[gray!30] (-1,-1) grid (5,4);
\path
(0,0) coordinate (A) node[below left]{A}
(4,3) coordinate (B) node[above right]{B};
\path (A); \pgfgetlastxy{\xA}{\yA};
\path (B); \pgfgetlastxy{\xB}{\yB};
\pgfmathsetmacro{\dAB}{veclen(\xB-\xA,\yB-\yA)}
\draw (A)--(B) node[midway,above,sloped]{$\pgfmathprintnumber{\dAB}$ pt};
\pgfmathsetmacro{\dABcm}{\dAB*(1pt)/(1cm)}
\path (A)--(B) node[midway,below,sloped]{$\pgfmathprintnumber{\dABcm}$ cm};
\end{tikzpicture}
\end{document}
更新请注意,如果我们使用一些显式或隐式缩放,那么所有数字(坐标)也会以相同的速率缩放。例如,在上面的代码中,使用然后[scale=1.5]
打印 AB 的距离将得到。不幸的是,使用7.5 cm
5 cm
pgfplots
隐式缩放也就是说,有一些用户不知道的缩放因子;因此,此解决方案不适用pgfplots
。我的建议是使用普通的 TikZ,不带任何缩放选项。