.. _api-date_demo:

api example code: date_demo.py
==============================



.. plot:: /home/tcaswell/source/p/matplotlib/doc/mpl_examples/api/date_demo.py

::

    """
    ================
    Date tick labels
    ================
    
    Show how to make date plots in matplotlib using date tick locators and
    formatters.  See major_minor_demo1.py for more information on
    controlling major and minor ticks
    
    All matplotlib date plotting is done by converting date instances into
    days since the 0001-01-01 UTC.  The conversion, tick locating and
    formatting is done behind the scenes so this is most transparent to
    you.  The dates module provides several converter functions date2num
    and num2date
    
    """
    import datetime
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.dates as mdates
    import matplotlib.cbook as cbook
    
    years = mdates.YearLocator()   # every year
    months = mdates.MonthLocator()  # every month
    yearsFmt = mdates.DateFormatter('%Y')
    
    # load a numpy record array from yahoo csv data with fields date,
    # open, close, volume, adj_close from the mpl-data/example directory.
    # The record array stores python datetime.date as an object array in
    # the date column
    datafile = cbook.get_sample_data('goog.npy')
    try:
        # Python3 cannot load python2 .npy files with datetime(object) arrays
        # unless the encoding is set to bytes. However this option was
        # not added until numpy 1.10 so this example will only work with
        # python 2 or with numpy 1.10 and later.
        r = np.load(datafile, encoding='bytes').view(np.recarray)
    except TypeError:
        r = np.load(datafile).view(np.recarray)
    
    fig, ax = plt.subplots()
    ax.plot(r.date, r.adj_close)
    
    
    # format the ticks
    ax.xaxis.set_major_locator(years)
    ax.xaxis.set_major_formatter(yearsFmt)
    ax.xaxis.set_minor_locator(months)
    
    datemin = datetime.date(r.date.min().year, 1, 1)
    datemax = datetime.date(r.date.max().year + 1, 1, 1)
    ax.set_xlim(datemin, datemax)
    
    
    # format the coords message box
    def price(x):
        return '$%1.2f' % x
    ax.format_xdata = mdates.DateFormatter('%Y-%m-%d')
    ax.format_ydata = price
    ax.grid(True)
    
    # rotates and right aligns the x labels, and moves the bottom of the
    # axes up to make room for them
    fig.autofmt_xdate()
    
    plt.show()
    

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