![为什么添加多个 addplots 会使我的轴发生移动?](https://linux22.com/image/311343/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%B7%BB%E5%8A%A0%E5%A4%9A%E4%B8%AA%20addplots%20%E4%BC%9A%E4%BD%BF%E6%88%91%E7%9A%84%E8%BD%B4%E5%8F%91%E7%94%9F%E7%A7%BB%E5%8A%A8%EF%BC%9F.png)
我试图在节点内定义一个轴环境。添加多个 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}
我只是在真正需要的地方添加了 % 符号。