tikzpictures 在 pgfplots 轴内

tikzpictures 在 pgfplots 轴内

当拥有tikzpicture内部pgfplots环境时axis,可以观察到奇怪的效果,我猜这是由于相应的坐标系相互干扰造成的:

\begin{tikzpicture}
 \begin{axis}[
   xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
 \addplot {x*x};
 \end{axis}
\end{tikzpicture}

在此处输入图片描述

我的第一个想法是添加pgfplots' 选项disabledatascaling,但这似乎使事情变得更糟:

\begin{tikzpicture}
 \begin{axis}[
   disabledatascaling,
   xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
 \addplot {x*x};
 \end{axis}
\end{tikzpicture}

在此处输入图片描述

实际似乎有效的是为、 和xmin增加xmax明确的值:yminymax

\begin{tikzpicture}
 \begin{axis}[
   xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
   xmin = -6, xmax = 6,
   ymin =  0, ymax = 25,
]
 \addplot {x*x};
 \end{axis}
\end{tikzpicture}

在此处输入图片描述

但是,这仍然不是理想的,因为它迫使我 a) 明确设置这些值,并且 b) 丢失了图和轴之间的边距。所以我的问题是:有没有更好的方法来处理这种情况?

当然,这不是现实世界的例子,但内部tikzpicture实际上可能由另一个命令绘制(并且根本不像箭头)。

完整代码:

\documentclass{article}
\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}
 \begin{axis}[
   xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
 \addplot {x*x};
 \end{axis}
\end{tikzpicture}

\bigskip

\begin{tikzpicture}
 \begin{axis}[
   disabledatascaling,
   xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
]
 \addplot {x*x};
 \end{axis}
\end{tikzpicture}

\bigskip

\begin{tikzpicture}
 \begin{axis}[
   xlabel={A \tikz\draw[->](0,0)--++(1em,0); B},
   xmin = -6, xmax = 6,
   ymin =  0, ymax = 25,
]
 \addplot {x*x};
 \end{axis}
\end{tikzpicture}

\end{document}

答案1

看到下面的行为来揭开谜底真的很有趣

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds}
\begin{document}

\begin{tikzpicture}
 \begin{axis}[
   xlabel={A \tikz[show background rectangle]\draw[->](0,0)--++(1cm,0);
             \tikz[show background rectangle]\draw[->](0,0)--++(1em,0);
             \tikz[show background rectangle]\draw[->](0,0)--++(1ex,0);
             \tikz[show background rectangle]\draw[->](0,0)--(1cm,0);
             \tikz[show background rectangle]\draw[->](0,0)--(1em,0);
             \tikz[show background rectangle]\draw[->](0,0)--(1ex,0);
           B},
]
 \addplot {x*x};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

什么?所以我们怀疑相对定位向量和尺寸表现得很奇怪。常规尺寸没有问题。这看起来和 Gonzalo Medina 在pgfplots:使用自定义标记的图例中的问题

\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{backgrounds}
\begin{document}

\begin{tikzpicture}
 \begin{axis}[
   xlabel={A \tikz[show background rectangle]\draw[->](0,0)--++(1cm,0pt);
             \tikz[show background rectangle]\draw[->](0,0)--++(1em,0pt);
             \tikz[show background rectangle]\draw[->](0,0)--++(1ex,0pt);
           B},
]
 \addplot {x*x};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

问题在于(我猜)使用无量纲单位,正如 Jake 在链接问题中发现的那样。那么,无论谁在那一刻负责 PGF 笔语法,都会用自己的坐标系进行解释。在 Gonzalo 的案例中,问题显而易见,但在这里,相对语法似乎导致了类似的事情(0,1)++(-1,0)

这里可能存在的问题是,无量纲坐标被发送到当前坐标系\pgf@process,并且该坐标由当前坐标系解释。当我们添加单位时,坐标不会乘以当前单位向量x,y,结果符合预期。

像往常一样,引用 Andrew Stacey 的话,嵌套 TikZ 图片不是一个好主意:)

相关内容