当我在轴环境中使用 shift TikZ 内容时,我得到了意外的结果\begin{scope}[shift=...]
。请考虑以下示例。
\documentclass[]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\begin{scope}[shift={(1,1)}] % Using (1,1) shifts incorrectly, while using (2,2) shifts correctly, why?
\draw[fill, gray!20] (0,0) rectangle (1,1);
\end{scope}
\addplot
[
x filter/.expression = {x+1},
y filter/.expression = {y+1}
]
coordinates
{
(0, 0)
(1, 1)
(1, 0)
};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
PGFPLOTS 的默认坐标系是axis cs
。从PGFPLOTS 手册第353页:
结果
axis cs
始终是轴内的绝对位置。这意味着,具体来说添加两点产生了意想不到的效果:表达式(0,0) ++ (1,0)
不一定与相同(1,0)
。这种意外效果的背景是 pgfplots 应用了移位线性变换移动原点以支持其高精度和高数据范围(比较 disabledatascaling 的文档)。为了表达相对的位置(或长度),您需要使用
axis direction cs
。
因此使用shift={(axis direction cs:1,1)}
。
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\begin{scope}[shift={(axis direction cs:1,1)}]
\draw[fill, gray!20] (0,0) rectangle (1,1);
\end{scope}
\addplot
[
x filter/.expression = {x+1},
y filter/.expression = {y+1}
]
coordinates
{
(0, 0)
(1, 1)
(1, 0)
};
\end{axis}
\end{tikzpicture}
\end{document}