修复 pgfplots 中的边界框

修复 pgfplots 中的边界框

我想要执行以下操作:

在 pgfplots 中执行一些绘制或绘图命令,然后修复边界框。即,所有后续绘图都不应影响边界框。我该怎么做?我尝试过叠加,但没有效果:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}


\begin{tikzpicture}
  \begin{axis}[no markers]
    \addplot gnuplot {sin(x)};

    %Fix bounding box from this point; do not add any of the following to the bounding box.
    \addplot[overlay] gnuplot {exp(x)};
  \end{axis}
\end{tikzpicture}


\end{document}

答案1

使用update limits=false。修改边界框也是可能的,但在这种情况下不是你想要的——你想改变轴的整个外观(除非我弄错了)。解决方案是

\documentclass{standalone}

\usepackage{pgfplots}

\begin{document}


\begin{tikzpicture}
    \begin{axis}[
        no markers,
        trig format plots=rad,
        restrict y to domain=-1:10,
    ]
    \addplot {sin(x)};

    \addplot+[update limits=false] {exp(x)};
    \end{axis}
\end{tikzpicture}


\end{document}

在此处输入图片描述

restrict y to domain请注意,由于 pgfplots 中的浮点算法存在内部弱点,所以我必须添加此内容。

或者,您可以使用环境来禁用对轴限制的更新。这可能更有效,以便将修改应用于“所有后续图”:

\documentclass{standalone}

\usepackage{pgfplots}

\begin{document}


\begin{tikzpicture}
    \begin{axis}[
        no markers,
        trig format plots=rad,
        restrict y to domain=-1:10,
    ]
    \addplot {sin(x)};

    \begin{pgfplotsinterruptdatabb}
    \addplot {exp(x)};
    \end{pgfplotsinterruptdatabb}
    \end{axis}
\end{tikzpicture}


\end{document}

请注意,这overlay解决了不同的用例:它仅从边界框中排除图形元素,但它确实不是overlay影响轴限值的选择方式。因此,update limits=false由于轴限值仍将像以前一样选择,并且由于轴线定义了边界框,因此该overlay功能没有效果。

然而,overlay 隐藏轴线时的效果:

\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=1.12}

\begin{document}

This is the figure and its BB:

\fbox{%
\begin{tikzpicture}
    \begin{axis}[
        no markers,
        trig format plots=rad,
        restrict y to domain=-1:10,
        hide axis,
    ]
    \addplot {sin(x)};

    \addplot+[overlay] {exp(x)};
    \end{axis}
\end{tikzpicture}}


\end{document}

在此处输入图片描述

请注意,在轴限值计算过程中,这两个图都得到了尊重(从 y 轴缩小的事实可以看出)。但第二个图并不影响边界框,从命令中可以看出\fbox;它甚至跨越了文本。

因此:update limits=false控制单个图如何影响轴限值(这对缩放和描述有影响)。overlay如果涉及图形元素及其边界框,则该键很有用。

相关内容