Can anyone tell me how to plot a gaussian function/bell curve using TikZ/PGF? I'm basically looking to implement something like PSTricks's \psGauss command.
Asked
Active
Viewed 3.1k times
53
-
great question and great solution, thank you! Some days ago I was searching for something like that but only found an example in the TikZ gallery which required gnuplot and did not work for me. – MostlyHarmless Apr 10 '11 at 11:27
1 Answers
72
You can use pgfplots to plot the functions. There's no standard macro for it, but the function isn't too complicated and can be added as a pgfmath function (based on this answer: How do I use pgfmathdeclarefunction to create define a new pgf function?):
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\pgfmathdeclarefunction{gauss}{2}{%
\pgfmathparse{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))}%
}
\begin{tikzpicture}
\begin{axis}[every axis plot post/.append style={
mark=none,domain=-2:3,samples=50,smooth}, % All plots: from -2:2, 50 samples, smooth, no marks
axis x line*=bottom, % no box around the plot, only x and y axis
axis y line*=left, % the * suppresses the arrow tips
enlargelimits=upper] % extend the axes a bit to the right and top
\addplot {gauss(0,0.5)};
\addplot {gauss(1,0.75)};
\end{axis}
\end{tikzpicture}
\end{document}

In my original answer, I had just declared a normal LaTeX function to the same end:
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\newcommand\gauss[2]{1/(#2*sqrt(2*pi))*exp(-((x-#1)^2)/(2*#2^2))} % Gauss function, parameters mu and sigma
\begin{tikzpicture}
\begin{axis}[every axis plot post/.append style={
mark=none,domain=-2:3,samples=50,smooth}, % All plots: from -2:2, 50 samples, smooth, no marks
axis x line*=bottom, % no box around the plot, only x and y axis
axis y line*=left, % the * suppresses the arrow tips
enlargelimits=upper] % extend the axes a bit to the right and top
\addplot {\gauss{0}{0.5}};
\addplot {\gauss{1}{0.75}};
\end{axis}
\end{tikzpicture}
\end{document}
-
Exactly what I needed, thank you. No way I would have worked this out on my own. – mike Feb 18 '11 at 05:22
-
1Quick fix on the equation.. a bit messy but the post eqn did not work for me..
\newcommand\gauss[2]{(1/(#2*(sqrt(2*pi))))*exp(-0.5*(((x-#1)/#2)^2))} % Gauss function, parameters mu and sigma– May 23 '12 at 19:56 -
2
-
-
-
@Adam: It's best to open a new question for this. Make sure to include the exact code you're trying to compile, and the version number of PGFPlots and TikZ/PGF that you're using. – Jake Aug 28 '12 at 12:02
-
How would one make the gauss function take a custom number set as input instead of
x? – Gallifreyan Feb 25 '20 at 21:16