

.. _sphx_glr_gallery_api_date.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





.. image:: /gallery/api/images/sphx_glr_date_001.png
    :align: center





.. code-block:: python

    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 the date as an np.datetime64 with a day unit ('D') in the date column.
    with cbook.get_sample_data('goog.npz') as datafile:
        r = np.load(datafile)['price_data'].view(np.recarray)
    # Matplotlib works better with datetime.datetime than np.datetime64, but the
    # latter is more portable.
    date = r.date.astype('O')

    fig, ax = plt.subplots()
    ax.plot(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(date.min().year, 1, 1)
    datemax = datetime.date(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()

**Total running time of the script:** ( 0 minutes  0.060 seconds)



.. only :: html

 .. container:: sphx-glr-footer


  .. container:: sphx-glr-download

     :download:`Download Python source code: date.py <date.py>`



  .. container:: sphx-glr-download

     :download:`Download Jupyter notebook: date.ipynb <date.ipynb>`


.. only:: html

 .. rst-class:: sphx-glr-signature

    `Gallery generated by Sphinx-Gallery <https://sphinx-gallery.readthedocs.io>`_
