Sophie

Sophie

distrib > Fedora > 18 > i386 > by-pkgid > bf21b4394f4d7fa09e3626145d3315e0 > files > 137

python-matplotlib-doc-1.2.0-14.fc18.i686.rpm

.. _api-date_index_formatter:

api example code: date_index_formatter.py
=========================================



.. plot:: /builddir/build/BUILD/matplotlib-1.2.0/doc/mpl_examples/api/date_index_formatter.py

::

    """
    When plotting time series, eg financial time series, one often wants
    to leave out days on which there is no data, eh weekends.  The example
    below shows how to use an 'index formatter' to achieve the desired plot
    """
    from __future__ import print_function
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.mlab as mlab
    import matplotlib.cbook as cbook
    import matplotlib.ticker as ticker
    
    datafile = cbook.get_sample_data('aapl.csv', asfileobj=False)
    print ('loading %s' % datafile)
    r = mlab.csv2rec(datafile)
    
    r.sort()
    r = r[-30:]  # get the last 30 days
    
    
    # first we'll do it the default way, with gaps on weekends
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(r.date, r.adj_close, 'o-')
    fig.autofmt_xdate()
    
    # next we'll write a custom formatter
    N = len(r)
    ind = np.arange(N)  # the evenly spaced plot indices
    
    def format_date(x, pos=None):
        thisind = np.clip(int(x+0.5), 0, N-1)
        return r.date[thisind].strftime('%Y-%m-%d')
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(ind, r.adj_close, 'o-')
    ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))
    fig.autofmt_xdate()
    
    plt.show()
    

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