
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "gallery/lines_bars_and_markers/hat_graph.py"
.. LINE NUMBERS ARE GIVEN BELOW.

.. only:: html

    .. meta::
        :keywords: codex

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

        :ref:`Go to the end <sphx_glr_download_gallery_lines_bars_and_markers_hat_graph.py>`
        to download the full example code.

.. rst-class:: sphx-glr-example-title

.. _sphx_glr_gallery_lines_bars_and_markers_hat_graph.py:


=========
Hat graph
=========
This example shows how to create a `hat graph`_ and how to annotate it with
labels.

.. _hat graph: https://doi.org/10.1186/s41235-019-0182-3

.. GENERATED FROM PYTHON SOURCE LINES 10-72

.. code-block:: Python

    import matplotlib.pyplot as plt
    import numpy as np


    def hat_graph(ax, xlabels, values, group_labels):
        """
        Create a hat graph.

        Parameters
        ----------
        ax : matplotlib.axes.Axes
            The Axes to plot into.
        xlabels : list of str
            The category names to be displayed on the x-axis.
        values : (M, N) array-like
            The data values.
            Rows are the groups (len(group_labels) == M).
            Columns are the categories (len(xlabels) == N).
        group_labels : list of str
            The group labels displayed in the legend.
        """

        def label_bars(heights, rects):
            """Attach a text label on top of each bar."""
            for height, rect in zip(heights, rects):
                ax.annotate(f'{height}',
                            xy=(rect.get_x() + rect.get_width() / 2, height),
                            xytext=(0, 4),  # 4 points vertical offset.
                            textcoords='offset points',
                            ha='center', va='bottom')

        values = np.asarray(values)
        x = np.arange(values.shape[1])
        ax.set_xticks(x, labels=xlabels)
        spacing = 0.3  # spacing between hat groups
        width = (1 - spacing) / values.shape[0]
        heights0 = values[0]
        for i, (heights, group_label) in enumerate(zip(values, group_labels)):
            style = {'fill': False} if i == 0 else {'edgecolor': 'black'}
            rects = ax.bar(x - spacing/2 + i * width, heights - heights0,
                           width, bottom=heights0, label=group_label, **style)
            label_bars(heights, rects)


    # initialise labels and a numpy array make sure you have
    # N labels of N number of values in the array
    xlabels = ['I', 'II', 'III', 'IV', 'V']
    playerA = np.array([5, 15, 22, 20, 25])
    playerB = np.array([25, 32, 34, 30, 27])

    fig, ax = plt.subplots()
    hat_graph(ax, xlabels, [playerA, playerB], ['Player A', 'Player B'])

    # Add some text for labels, title and custom x-axis tick labels, etc.
    ax.set_xlabel('Games')
    ax.set_ylabel('Score')
    ax.set_ylim(0, 60)
    ax.set_title('Scores by number of game and players')
    ax.legend()

    fig.tight_layout()
    plt.show()



.. image-sg:: /gallery/lines_bars_and_markers/images/sphx_glr_hat_graph_001.png
   :alt: Scores by number of game and players
   :srcset: /gallery/lines_bars_and_markers/images/sphx_glr_hat_graph_001.png, /gallery/lines_bars_and_markers/images/sphx_glr_hat_graph_001_2_00x.png 2.00x
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 73-86

.. admonition:: References

   The use of the following functions, methods, classes and modules is shown
   in this example:

   - `matplotlib.axes.Axes.bar` / `matplotlib.pyplot.bar`
   - `matplotlib.axes.Axes.annotate` / `matplotlib.pyplot.annotate`

.. tags::

   component: annotate
   plot-type: bar
   level: beginner


.. _sphx_glr_download_gallery_lines_bars_and_markers_hat_graph.py:

.. only:: html

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

    .. container:: sphx-glr-download sphx-glr-download-jupyter

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

    .. container:: sphx-glr-download sphx-glr-download-python

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

    .. container:: sphx-glr-download sphx-glr-download-zip

      :download:`Download zipped: hat_graph.zip <hat_graph.zip>`


.. only:: html

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

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