我正在尝试填充 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}