如何绘制 3 组数据并绘制每个点的钟形曲线方差?

如何绘制 3 组数据并绘制每个点的钟形曲线方差?

我有 3 组数据。我的第一张图表将绘制所有 3 组数据。然后,我希望第二张图表计算每组 Y 值的平均值,绘制图表,然后在表示方差的每个点上显示钟形曲线。这是我想要的图片和我的 MWE。 在此处输入图片描述

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=6cm,compat=1.8}
\pgfmathdeclarefunction{gauss}{2}{%
  \pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xlabel=Cost,
        ylabel=Error]
    \addplot[color=red,mark=x] coordinates {
        (2,2)
        (4,4.0)
        (6,6.3)
        (8,7.8)
        };
   \addplot[color=black,mark=x] coordinates {
        (2,1.7)
        (4,3.8)
        (6,6.0)
        (8,7.95)
    };
    \addplot[color=green,mark=x] coordinates {
        (2,2.2)
        (4,3.9)
        (6,5.7)
        (8,8.1)
    };
    
    \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
    \begin{axis}[
        xlabel=Cost,
        ylabel=Error Distribution]
    \addplot[color=red,mark=x] coordinates {
        (2,2)
        (4,3.9)
        (6,6.0)
        (8,7.9)
        };
    \end{axis}
\end{tikzpicture}
\end{document}

答案1

此方法使用pics 将高斯钟形曲线放置在图中的相关坐标处。我gauss稍微修改了该函数,使其可以在\draw宏中使用(现在它需要三个参数,第一个是X)。pic 也被调用gauss,并接受两个参数,第一个是μ第二个是σ

要使以下代码正常工作,您至少需要设置\pgfplotsset{compat=1.10}。对于较旧的发行版,您需要pic使用 来放置 s axis cs:(例如:\pic[red] at (axis cs:2,2) {gauss={0}{0.3}};)。

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=6cm, compat=newest}

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

\tikzset{
    pics/gauss/.style 2 args={
        code={
            \draw[pic actions, rotate around={-90:(0pt,0pt)}, scale around={7.5:(0pt,0pt)}] 
                plot [domain=-1:1, samples=100, smooth] (\x*1pt,{gauss(\x,#1,#2)*1pt});
        }
    },
}

\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        xlabel=Cost,
        ylabel=Error]
    \addplot[color=red, mark=x] coordinates {
        (2,2)
        (4,4.0)
        (6,6.3)
        (8,7.8)
        };
   \addplot[color=black, mark=x] coordinates {
        (2,1.7)
        (4,3.8)
        (6,6.0)
        (8,7.95)
    };
    \addplot[color=green, mark=x] coordinates {
        (2,2.2)
        (4,3.9)
        (6,5.7)
        (8,8.1)
    };
    
    \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
    \begin{axis}[
        xlabel=Cost,
        ylabel=Error Distribution]
    \addplot[color=red, mark=x] coordinates {
        (2,2)
        (4,3.9)
        (6,6.0)
        (8,7.9)
        };
    \pic[red] at (2,2) {gauss={0}{0.3}};
    \pic[red] at (4,3.9) {gauss={0}{0.5}};
    \pic[red] at (6,6.0) {gauss={0}{0.2}};
    \pic[red] at (8,7.9) {gauss={0}{0.4}};
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容