范围内的 pgfgetlastxy

范围内的 pgfgetlastxy

我正在使用 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 cm5 cmpgfplots隐式缩放也就是说,有一些用户不知道的缩放因子;因此,此解决方案不适用pgfplots。我的建议是使用普通的 TikZ,不带任何缩放选项。

相关内容