# Plotting bell shaped curve in TikZ-PGF

I want to create some bell shaped curves for demonstrating hypothesis testing in statistics. Can anybody help me drawing curves like shown in the following picture? • you can start looking at Texample.net Feb 6, 2012 at 18:19
• Show what you have tried so far in form of some code. Feb 6, 2012 at 18:21
• You can use the pgfplots package for this and more Feb 6, 2012 at 18:37
• Along with the other suggestion, perhaps bell curve gaussian function in tikz pgf can get you going. Then when you run into specific issues, feel free to post questions. It will be extremely helpful if you compose a fully compilable MWE that illustrates the specific problem. BTW, Welcome to TeX.SE. Feb 6, 2012 at 18:53
• I definitely don't have the time to provide a solution but for those who do have the time, it would help if you could tell what your picture shouldlook line and how it depends on which (of your) input parameters.
– user10274
Feb 7, 2012 at 0:04

I would use pgfplots for this, as I find it easier to use than the "raw" TikZ plotting functions. To shade the area under a curve, supply [domain=<xmin>:<xmax>] to the \addplot function and add \closedcyle before the ; that ends the \addplot command. \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}[
no markers, domain=0:10, samples=100,
axis lines*=left, xlabel=$x$, ylabel=$y$,
every axis y label/.style={at=(current axis.above origin),anchor=south},
every axis x label/.style={at=(current axis.right of origin),anchor=west},
height=5cm, width=12cm,
xtick={4,6.5}, ytick=\empty,
enlargelimits=false, clip=false, axis on top,
grid = major
]
\addplot [fill=cyan!20, draw=none, domain=0:5.96] {gauss(6.5,1)} \closedcycle;

\draw [yshift=-0.6cm, latex-latex](axis cs:4,0) -- node [fill=white] {$1.96\sigma$} (axis cs:5.96,0);
\end{axis}

\end{tikzpicture}
\end{document}

• Thanks a lot. It looks really promising and easier to understand. However, I failed to compile the above code. It shows me a error message like this - code! Package pgfkeys Error: I do not know the key '/tikz/axis lines*' and I am goi ng to ignore it. Perhaps you misspelled it. See the pgfkeys package documentation for explanation. Type H <return> for immediate help. ... l.26 \end{axis} Any suggestions? Feb 10, 2012 at 16:22
• You're probably using an outdated version of pgfplots (the current one is 1.5.1). You can either update (highly recommended, each new release of pgfplots brings a lot of new features and improvements) or try removing the offending lines (the axis lines* key is not necessary for the example in principle, it just tweaks the appearance of the axis lines).
– Jake
Feb 10, 2012 at 16:26
• That's correct. I had an outdated package. I have a Ubuntu 11.10 laptop and the pgfplot was installed under a debian package called texlive-pictures. The installed version was 1.2x. I have downloaded the latest version and replaced the old one and it's now working. Thanks for your support. Feb 10, 2012 at 19:51
• Which statement in the above code snippet plotted the two vertical lines going through the two points (4,0) and (6.5,0), respectively? Sep 4, 2013 at 4:49
• @JunLiu: The vertical lines are grid lines, the positions are set using xtick={4, 6.5}
– Jake
Sep 4, 2013 at 5:29

If you go here http://thetarzan.wordpress.com/2011/06/17/tikz-diagrams-for-economists-a-normal-pdf-with-shaded-area/ you will find a code snippet which I have used for plotting normal curves for exams and handouts. \documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% define normal distribution function 'normaltwo'
\def\normaltwo{\x,{4*1/exp(((\x-3)^2)/2)}}

% input y parameter
\def\y{4.4}

% this line calculates f(y)
\def\fy{4*1/exp(((\y-3)^2)/2)}

% Shade orange area underneath curve.
\fill [fill=orange!60] (2.6,0) -- plot[domain=0:4.4] (\normaltwo) -- ({\y},0) -- cycle;

% Draw and label normal distribution function
\draw[color=blue,domain=0:6] plot (\normaltwo) node[right] {};

% Add dashed line dropping down from normal.
\draw[dashed] ({\y},{\fy}) -- ({\y},0) node[below] {$y$};

\draw (-.2,2.5) node[left] {$f_Y(u)$};
\draw (3,-.5) node[below] {$u$};