.. _animation-bayes_update:

animation example code: bayes_update.py
=======================================

[`source code <bayes_update.py>`_]

::

    """
    ================
    The Bayes update
    ================
    
    This animation displays the posterior estimate updates as it is refitted when
    new data arrives.
    The vertical line represents the theoretical value to which the plotted
    distribution should converge.
    """
    
    # update a distribution based on new data.
    import numpy as np
    import matplotlib.pyplot as plt
    import scipy.stats as ss
    from matplotlib.animation import FuncAnimation
    
    
    class UpdateDist(object):
        def __init__(self, ax, prob=0.5):
            self.success = 0
            self.prob = prob
            self.line, = ax.plot([], [], 'k-')
            self.x = np.linspace(0, 1, 200)
            self.ax = ax
    
            # Set up plot parameters
            self.ax.set_xlim(0, 1)
            self.ax.set_ylim(0, 15)
            self.ax.grid(True)
    
            # This vertical line represents the theoretical value, to
            # which the plotted distribution should converge.
            self.ax.axvline(prob, linestyle='--', color='black')
    
        def init(self):
            self.success = 0
            self.line.set_data([], [])
            return self.line,
    
        def __call__(self, i):
            # This way the plot can continuously run and we just keep
            # watching new realizations of the process
            if i == 0:
                return self.init()
    
            # Choose success based on exceed a threshold with a uniform pick
            if np.random.rand(1,) < self.prob:
                self.success += 1
            y = ss.beta.pdf(self.x, self.success + 1, (i - self.success) + 1)
            self.line.set_data(self.x, y)
            return self.line,
    
    fig, ax = plt.subplots()
    ud = UpdateDist(ax, prob=0.7)
    anim = FuncAnimation(fig, ud, frames=np.arange(100), init_func=ud.init,
                         interval=100, blit=True)
    plt.show()
    

Keywords: python, matplotlib, pylab, example, codex (see :ref:`how-to-search-examples`)