为什么添加多个 addplots 会使我的轴发生移动?

为什么添加多个 addplots 会使我的轴发生移动?

我试图在节点内定义一个轴环境。添加多个 addplot 后,我​​观察到轴位置发生了变化,对于更多 addplot,轴位置发生了进一步的变化。下面是重现该问题的示例:

\documentclass{article}

\usepackage{tikz,pgfplots}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
%
\node at (0.0,0.0) (A) {x};%
\node at (0.0,2.0) (B) {x};%
\node at (0.0,4.0) (C) {x};%
%
\node at (A) {%
\begin{axis}[domain=1:2,width=40mm,height=30mm]%
\addplot {sin(deg(x))};%
\end{axis}%
};%
%
\node at (B) {%
\begin{axis}[domain=1:2,width=40mm,height=30mm]%
\addplot {sin(deg(x))};%
\addplot {sin(deg(x))};%
\end{axis}%
};%
%
\node at (C) {%
\begin{axis}[domain=1:2,width=40mm,height=30mm]%
\addplot {sin(deg(x))};%
\addplot {sin(deg(x))};%
\addplot {sin(deg(x))};%
\end{axis}%
};%
%
\end{tikzpicture}
\end{figure}

\end{document}

这里讨论了类似的问题:为什么 \addplot 将我的 \pgfmathdeclarefunction 函数图形向右移动?,这就是我在每行末尾添加 % 符号的原因,但这并不能解决这里的转移问题。

答案1

这是因为你在做一些不该做的事情。我的意思是,你能做并不意味着你应该做。这里的问题是一个常见的问题,即禁用\nullfont和使空格变得重要。

我尝试在这里非常简短地描述一下使用键设置 TikZ 节点的长度在节点内部,关闭 TikZ 的常规空格和文本吞噬行为,以便能够让 TeX 排版文本。但是您在节点内插入代码时没有这种便利。

例如,如果我添加\nullfont到第一个节点,我会得到预期的结果

在此处输入图片描述

因此,不要将节点的文本区域用作复杂对象的占位符。对于你的情况,正确的方法是确定每个轴的范围,如果它们是独立的,则通过\begin{scope}[shift={(3cm,5cm)}] \end{scope}同一 TikZ 图片移动它们,或者使用轴的名称选项,例如

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\begin{document}
\begin{tikzpicture}
\pgfplotsset{width=3cm}
    \begin{axis}[name=a]\end{axis}
    \begin{axis}[anchor=north east, at = (a.south west)]\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

或许多其他可能的定位和锚定选项。

答案2

我会将此报告给pgfplots这里处理虚假空格的方式真的很奇怪。目前,您可以写:

% arara: pdflatex

\documentclass{article}
\usepackage{pgfplots}

\begin{document}    
\begin{figure}
    \centering
    \begin{tikzpicture}
        \coordinate (A) at (0.0,0.0);
        \coordinate (B) at (0.0,2.0);
        \coordinate (C) at (0.0,4.0);
        \node at (A) {
            \begin{axis}[domain=1:2,width=40mm,height=30mm]
            \addplot {sin(deg(x))};
            \end{axis}
        };
        \node at (B) {
            \begin{axis}[domain=1:2,width=40mm,height=30mm]
            \addplot {sin(deg(x))};%
            \addplot {sin(deg(x))};%
            \end{axis}
        };
        \node at (C) {
            \begin{axis}[domain=1:2,width=40mm,height=30mm]%
            \addplot {sin(deg(x))};%
            \addplot {sin(deg(x))};%
            \addplot {sin(deg(x))};%
            \end{axis}
        };
    \end{tikzpicture}
\end{figure}    
\end{document}

我只是在真正需要的地方添加了 % 符号。

在此处输入图片描述

相关内容