.. 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 .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` 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-73 .. code-block:: default import numpy as np import matplotlib.pyplot as plt 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) ax.set_xticklabels(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:: /gallery/lines_bars_and_markers/images/sphx_glr_hat_graph_001.png :alt: Scores by number of game and players :class: sphx-glr-single-img .. GENERATED FROM PYTHON SOURCE LINES 74-81 .. 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` .. _sphx_glr_download_gallery_lines_bars_and_markers_hat_graph.py: .. only :: html .. container:: sphx-glr-footer :class: sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: hat_graph.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: hat_graph.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature Keywords: matplotlib code example, codex, python plot, pyplot `Gallery generated by Sphinx-Gallery `_