使用 pgfplots 绘制编译时优化的“分析曲线下面积”?

使用 pgfplots 绘制编译时优化的“分析曲线下面积”?

有一些关于如何使用绘制曲线下面积的问题pgfplots。但据我所知,所有答案都有一个共同点,即必须使用不同的样式选项绘制两次函数。例如,Pgfplots:如何用斜线(阴影)作为图案填充曲线下的区域?

这也是我目前的做法。下面是一个简单的示例:

\begin{tikzpicture}[/pgf/declare function={f=1-exp(-x*x);}]
  \begin{axis}[axis x line=center]
    \addplot [domain=-2:2, samples=500, red, fill] {f} \closedcycle;
    \addplot [domain=-5:5, samples=500] {f};
  \end{axis}
\end{tikzpicture}

但特别是如果有许多具有非平凡函数的图(需要大量样本才能看起来很流畅!)这可能会导致较长的编译时间。

仅仅设置区域填充图的样本通常是不够的,因为由于图的粗糙采样,一些区域会“悬垂”在曲线的错误一侧。

是否只需绘制一次函数就能实现相同的输出,从而显著减少编译时间?

答案1

pgfplots 1.10 版刚刚发布,它提供了一种新的解决方案,以“编译时优化的方式”填充图表之间的区域。

在此处输入图片描述

\documentclass{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.10}
\usepgfplotslibrary{fillbetween}

\begin{document}

\begin{tikzpicture}[/pgf/declare function={f=1-exp(-x*x);}]
  \begin{axis}[axis x line=center]
    \addplot [name path=f,domain=-5:5, samples=500] {f};

    \path[name path=axis] (axis cs:\pgfkeysvalueof{/pgfplots/xmin},0) -- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},0);

    \addplot[gray!50] fill between[of=f and axis];
  \end{axis}
\end{tikzpicture}
\end{document}

该解决方案依赖于\usepgfplotslibrary{fillbetween}:它分配name path=f给感兴趣的函数。这是编译时优化的:它将使用此函数的低级软路径。然后,它定义一个\path(既不绘制也不填充),它类似于 x 轴(并接收name path=axis。最后,\addplot fill between填充下的区域f and axis,仅依赖于编译时优化的表示。事实上,这个填充操作只是连接faxis(并计算结果边界框)。因此,它应该很快。并且:它具有与大致相同的效果\closedcycle(除了它填充在 xmin 和 xmax 之间,这可能大于输入数据范围)。

相关内容