我有 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
此方法使用pic
s 将高斯钟形曲线放置在图中的相关坐标处。我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}