Here’s an approach using pgfplotstable to calculate the Brownian motions as cumulative sums of random normally distributed values. You have to first initialize an empty table, using something like \pgfplotstablenew{200}loadedtable, and then you can draw the brownian motions using \addplot table [brownian motion] {loadedtable};.
You can set the initial value and the maximum and minimum values using \addplot table [brownian motion={start=0.5, min=-1, max=1}] {loadedtable};
This code was written by Jake on TeX.SE.
Edit and compile if you like:\documentclass[border=10pt]{standalone} \usepackage{pgfplots} \pgfplotsset{width=7cm,compat=1.8} \usepackage{pgfplotstable} % Create a function for generating inverse normally distributed numbers using the Box–Muller transform \pgfmathdeclarefunction{invgauss}{2}{% \pgfmathparse{sqrt(-2*ln(#1))*cos(deg(2*pi*#2))}% } % Code for brownian motion \makeatletter \pgfplotsset{ table/.cd, brownian motion/.style={ create on use/brown/.style={ create col/expr accum={ (\coordindex>0)*( max( min( invgauss(rnd,rnd)*0.1+\pgfmathaccuma, \pgfplots@brownian@max ), \pgfplots@brownian@min ) ) + (\coordindex<1)*\pgfplots@brownian@start }{\pgfplots@brownian@start} }, y=brown, x expr={\coordindex}, brownian motion/.cd, #1, /.cd }, brownian motion/.cd, min/.store in=\pgfplots@brownian@min, min=-inf, max/.store in=\pgfplots@brownian@max, max=inf, start/.store in=\pgfplots@brownian@start, start=0 } \makeatother % Initialise an empty table with a certain number of rows \pgfplotstablenew{201}\loadedtable % How many steps? \pgfplotsset{ no markers, xmin=0, enlarge x limits=false, scaled y ticks=false, ymin=-1, ymax=1 } \tikzset{line join=bevel} \begin{document} \pgfmathsetseed{3} \begin{tikzpicture} \begin{axis} \addplot table [brownian motion] {\loadedtable}; \addplot table [brownian motion] {\loadedtable}; \end{axis} \end{tikzpicture} \pgfmathsetseed{3} \begin{tikzpicture} \begin{axis} \addplot table [ brownian motion = {% max = 0.5, min = -0.75 } ] {\loadedtable}; \addplot table [ brownian motion = {% start = 0.5, min = -0.5, max = 0.75 } ] {\loadedtable}; \end{axis} \end{tikzpicture} \end{document}