<divid="unreleased-message"> You are reading an old version of the documentation (v2.2.0). For the latest version see <ahref="https://matplotlib.org/stable/gallery/animation/rain.html">https://matplotlib.org/stable/gallery/animation/rain.html</a></div>
<spanid="sphx-glr-gallery-animation-rain-py"></span><h1>Rain simulation<aclass="headerlink" href="#rain-simulation" title="Permalink to this headline">¶</a></h1>
<p>Simulates rain drops on a surface by animating the scale and opacity
<spanclass="kn">from</span><spanclass="nn">matplotlib.animation</span><spanclass="kn">import</span><ahref="../../api/_as_gen/matplotlib.animation.FuncAnimation.html#matplotlib.animation.FuncAnimation" title="View documentation for matplotlib.animation.FuncAnimation"><spanclass="n">FuncAnimation</span></a>
<spanclass="c1"># Fixing random state for reproducibility</span>
<ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.seed.html#numpy.random.seed" title="View documentation for numpy.random.seed"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">random</span><spanclass="o">.</span><spanclass="n">seed</span></a><spanclass="p">(</span><spanclass="mi">19680801</span><spanclass="p">)</span>
<spanclass="c1"># Create new Figure and an Axes which fills it.</span>
<spanclass="n">fig</span><spanclass="o">=</span><ahref="../../api/_as_gen/matplotlib.pyplot.figure.html#matplotlib.pyplot.figure" title="View documentation for matplotlib.pyplot.figure"><spanclass="n">plt</span><spanclass="o">.</span><spanclass="n">figure</span></a><spanclass="p">(</span><spanclass="n">figsize</span><spanclass="o">=</span><spanclass="p">(</span><spanclass="mi">7</span><spanclass="p">,</span><spanclass="mi">7</span><spanclass="p">))</span>
<spanclass="n">rain_drops</span><spanclass="o">=</span><ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros" title="View documentation for numpy.zeros"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">zeros</span></a><spanclass="p">(</span><spanclass="n">n_drops</span><spanclass="p">,</span><spanclass="n">dtype</span><spanclass="o">=</span><spanclass="p">[(</span><spanclass="s1">'position'</span><spanclass="p">,</span><spanclass="nb">float</span><spanclass="p">,</span><spanclass="mi">2</span><spanclass="p">),</span>
<spanclass="c1"># Initialize the raindrops in random positions and with</span>
<spanclass="c1"># random growth rates.</span>
<spanclass="n">rain_drops</span><spanclass="p">[</span><spanclass="s1">'position'</span><spanclass="p">]</span><spanclass="o">=</span><ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html#numpy.random.uniform" title="View documentation for numpy.random.uniform"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">random</span><spanclass="o">.</span><spanclass="n">uniform</span></a><spanclass="p">(</span><spanclass="mi">0</span><spanclass="p">,</span><spanclass="mi">1</span><spanclass="p">,</span><spanclass="p">(</span><spanclass="n">n_drops</span><spanclass="p">,</span><spanclass="mi">2</span><spanclass="p">))</span>
<spanclass="n">rain_drops</span><spanclass="p">[</span><spanclass="s1">'growth'</span><spanclass="p">]</span><spanclass="o">=</span><ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html#numpy.random.uniform" title="View documentation for numpy.random.uniform"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">random</span><spanclass="o">.</span><spanclass="n">uniform</span></a><spanclass="p">(</span><spanclass="mi">50</span><spanclass="p">,</span><spanclass="mi">200</span><spanclass="p">,</span><spanclass="n">n_drops</span><spanclass="p">)</span>
<spanclass="c1"># Construct the scatter which we will update during animation</span>
<spanclass="c1"># as the raindrops develop.</span>
<spanclass="n">rain_drops</span><spanclass="p">[</span><spanclass="s1">'color'</span><spanclass="p">][:,</span><spanclass="mi">3</span><spanclass="p">]</span><spanclass="o">=</span><ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.clip.html#numpy.clip" title="View documentation for numpy.clip"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">clip</span></a><spanclass="p">(</span><spanclass="n">rain_drops</span><spanclass="p">[</span><spanclass="s1">'color'</span><spanclass="p">][:,</span><spanclass="mi">3</span><spanclass="p">],</span><spanclass="mi">0</span><spanclass="p">,</span><spanclass="mi">1</span><spanclass="p">)</span>
<spanclass="c1"># Pick a new position for oldest rain drop, resetting its size,</span>
<spanclass="c1"># color and growth factor.</span>
<spanclass="n">rain_drops</span><spanclass="p">[</span><spanclass="s1">'position'</span><spanclass="p">][</span><spanclass="n">current_index</span><spanclass="p">]</span><spanclass="o">=</span><ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html#numpy.random.uniform" title="View documentation for numpy.random.uniform"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">random</span><spanclass="o">.</span><spanclass="n">uniform</span></a><spanclass="p">(</span><spanclass="mi">0</span><spanclass="p">,</span><spanclass="mi">1</span><spanclass="p">,</span><spanclass="mi">2</span><spanclass="p">)</span>
<spanclass="n">rain_drops</span><spanclass="p">[</span><spanclass="s1">'growth'</span><spanclass="p">][</span><spanclass="n">current_index</span><spanclass="p">]</span><spanclass="o">=</span><ahref="https://docs.scipy.org/doc/numpy/reference/generated/numpy.random.uniform.html#numpy.random.uniform" title="View documentation for numpy.random.uniform"><spanclass="n">np</span><spanclass="o">.</span><spanclass="n">random</span><spanclass="o">.</span><spanclass="n">uniform</span></a><spanclass="p">(</span><spanclass="mi">50</span><spanclass="p">,</span><spanclass="mi">200</span><spanclass="p">)</span>
<spanclass="c1"># Update the scatter collection, with the new colors, sizes and positions.</span>
<spanclass="c1"># Construct the animation, using the update function as the animation director.</span>
<spanclass="n">animation</span><spanclass="o">=</span><ahref="../../api/_as_gen/matplotlib.animation.FuncAnimation.html#matplotlib.animation.FuncAnimation" title="View documentation for matplotlib.animation.FuncAnimation"><spanclass="n">FuncAnimation</span></a><spanclass="p">(</span><spanclass="n">fig</span><spanclass="p">,</span><spanclass="n">update</span><spanclass="p">,</span><spanclass="n">interval</span><spanclass="o">=</span><spanclass="mi">10</span><spanclass="p">)</span>
<ahref="../../api/_as_gen/matplotlib.pyplot.show.html#matplotlib.pyplot.show" title="View documentation for matplotlib.pyplot.show"><spanclass="n">plt</span><spanclass="o">.</span><spanclass="n">show</span></a><spanclass="p">()</span>