Fillbetween 不会填充图表下的整个区域

Fillbetween 不会填充图表下的整个区域

我正在尝试填充 tikz 中图表下方的区域,使其看起来像这样:

目标

然而,我最终得到的结果是:

实际结果

这是MWE:

\documentclass[class=minimal,border=0pt]{standalone}
\usepackage{pgfplots}

\pgfmathdeclarefunction{gauss}{2}{%
  \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=1.10}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
      domain=0:10,
      samples=100,
      enlargelimits=false,
     ]
     \addplot [very thick, red!50!black, name path=f] {gauss(5,1)};
     \addplot [name path=axis] coordinates {(0,0)(10,0)};
     \addplot [thick,fill=green,fill opacity=0.4]
           fill between[of=f and axis,soft clip={domain=0:3.5}];
     \addplot [thick,fill=red,fill opacity=0.4]
           fill between[of=f and axis,soft clip={domain=3.5:6.5}];
     \addplot [thick,fill=green,fill opacity=0.4]
           fill between[of=f and axis,soft clip={domain=6.5:10}];
    \end{axis}
\end{tikzpicture}
\end{document}

在修复 MWE 时,我注意到如果我移除enlargelimits=false填充物似乎可以按预期工作,但我不想扩大限制。

为什么会这样?我该如何解决?

答案1

即使不使用库,也有另一种解决方案fillbetween。填充图首先写入,因此它们出现在其他图下方。您可以使用图层来解决这个问题,但如果更改顺序不是问题,那么您就可以这样做。

输出

在此处输入图片描述

代码

\documentclass[margin=10pt]{standalone}
\usepackage{pgfplots}

\pgfmathdeclarefunction{gauss}{2}{%
  \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}

\pgfplotsset{compat=1.13}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
    domain=0:10,
    samples=100,
    enlargelimits=false,
    ]
%
\addplot[fill=green, opacity=.4, domain=0:3.5] {gauss(5,1)} \closedcycle;
\addplot[fill=red, opacity=.4, domain=3.5:6.5] {gauss(5,1)} \closedcycle;
\addplot[fill=green, opacity=.4, domain=6.5:10] {gauss(5,1)} \closedcycle;

\addplot [very thick, red!50!black] {gauss(5,1)};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容