.. note::
    :class: sphx-glr-download-link-note

    Click :ref:`here <sphx_glr_download_gallery_ticks_and_spines_date_index_formatter2.py>` to download the full example code
.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_ticks_and_spines_date_index_formatter2.py:


====================
Date Index Formatter
====================

When plotting daily data, a frequent request is to plot the data
ignoring skips, e.g., no extra spaces for weekends.  This is particularly
common in financial time series, when you may have data for M-F and
not Sat, Sun and you don't want gaps in the x axis.  The approach is
to simply use the integer index for the xdata and a custom tick
Formatter to get the appropriate date string for a given index.




.. image:: /gallery/ticks_and_spines/images/sphx_glr_date_index_formatter2_001.png
    :class: sphx-glr-single-img


.. rst-class:: sphx-glr-script-out

 Out:

 .. code-block:: none

    loading /build/matplotlib-3.0.2/lib/matplotlib/mpl-data/sample_data/msft.csv




|


.. code-block:: python



    import numpy as np

    import matplotlib.pyplot as plt
    import matplotlib.cbook as cbook
    from matplotlib.dates import bytespdate2num, num2date
    from matplotlib.ticker import Formatter


    datafile = cbook.get_sample_data('msft.csv', asfileobj=False)
    print('loading %s' % datafile)
    msft_data = np.genfromtxt(datafile, delimiter=',', names=True,
                              converters={0: bytespdate2num('%d-%b-%y')})[-40:]


    class MyFormatter(Formatter):
        def __init__(self, dates, fmt='%Y-%m-%d'):
            self.dates = dates
            self.fmt = fmt

        def __call__(self, x, pos=0):
            'Return the label for time x at position pos'
            ind = int(np.round(x))
            if ind >= len(self.dates) or ind < 0:
                return ''

            return num2date(self.dates[ind]).strftime(self.fmt)

    formatter = MyFormatter(msft_data['Date'])

    fig, ax = plt.subplots()
    ax.xaxis.set_major_formatter(formatter)
    ax.plot(np.arange(len(msft_data)), msft_data['Close'], 'o-')
    fig.autofmt_xdate()
    plt.show()


.. _sphx_glr_download_gallery_ticks_and_spines_date_index_formatter2.py:


.. only :: html

 .. container:: sphx-glr-footer
    :class: sphx-glr-footer-example



  .. container:: sphx-glr-download

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



  .. container:: sphx-glr-download

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


.. only:: html

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

    Keywords: matplotlib code example, codex, python plot, pyplot
    `Gallery generated by Sphinx-Gallery
    <https://sphinx-gallery.readthedocs.io>`_
