
.. DO NOT EDIT.
.. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY.
.. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE:
.. "gallery/statistics/hist.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_statistics_hist.py>`
        to download the full example code.

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

.. _sphx_glr_gallery_statistics_hist.py:


==========
Histograms
==========

How to plot histograms with Matplotlib.

.. GENERATED FROM PYTHON SOURCE LINES 8-18

.. code-block:: Python


    import matplotlib.pyplot as plt
    import numpy as np

    from matplotlib import colors
    from matplotlib.ticker import PercentFormatter

    # Create a random number generator with a fixed seed for reproducibility
    rng = np.random.default_rng(19680801)








.. GENERATED FROM PYTHON SOURCE LINES 19-25

Generate data and plot a simple histogram
-----------------------------------------

To generate a 1D histogram we only need a single vector of numbers. For a 2D
histogram we'll need a second vector. We'll generate both below, and show
the histogram for each vector.

.. GENERATED FROM PYTHON SOURCE LINES 25-42

.. code-block:: Python


    N_points = 100000
    n_bins = 20

    # Generate two normal distributions
    dist1 = rng.standard_normal(N_points)
    dist2 = 0.4 * rng.standard_normal(N_points) + 5

    fig, axs = plt.subplots(1, 2, sharey=True, tight_layout=True)

    # We can set the number of bins with the *bins* keyword argument.
    axs[0].hist(dist1, bins=n_bins)
    axs[1].hist(dist2, bins=n_bins)

    plt.show()





.. image-sg:: /gallery/statistics/images/sphx_glr_hist_001.png
   :alt: hist
   :srcset: /gallery/statistics/images/sphx_glr_hist_001.png, /gallery/statistics/images/sphx_glr_hist_001_2_00x.png 2.00x
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 43-50

Updating histogram colors
-------------------------

The histogram method returns (among other things) a ``patches`` object. This
gives us access to the properties of the objects drawn. Using this, we can
edit the histogram to our liking. Let's change the color of each bar
based on its y value.

.. GENERATED FROM PYTHON SOURCE LINES 50-74

.. code-block:: Python


    fig, axs = plt.subplots(1, 2, tight_layout=True)

    # N is the count in each bin, bins is the lower-limit of the bin
    N, bins, patches = axs[0].hist(dist1, bins=n_bins)

    # We'll color code by height, but you could use any scalar
    fracs = N / N.max()

    # we need to normalize the data to 0..1 for the full range of the colormap
    norm = colors.Normalize(fracs.min(), fracs.max())

    # Now, we'll loop through our objects and set the color of each accordingly
    for thisfrac, thispatch in zip(fracs, patches):
        color = plt.cm.viridis(norm(thisfrac))
        thispatch.set_facecolor(color)

    # We can also normalize our inputs by the total number of counts
    axs[1].hist(dist1, bins=n_bins, density=True)

    # Now we format the y-axis to display percentage
    axs[1].yaxis.set_major_formatter(PercentFormatter(xmax=1))





.. image-sg:: /gallery/statistics/images/sphx_glr_hist_002.png
   :alt: hist
   :srcset: /gallery/statistics/images/sphx_glr_hist_002.png, /gallery/statistics/images/sphx_glr_hist_002_2_00x.png 2.00x
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 75-80

Plot a 2D histogram
-------------------

To plot a 2D histogram, one only needs two vectors of the same length,
corresponding to each axis of the histogram.

.. GENERATED FROM PYTHON SOURCE LINES 80-85

.. code-block:: Python


    fig, ax = plt.subplots(tight_layout=True)
    hist = ax.hist2d(dist1, dist2)





.. image-sg:: /gallery/statistics/images/sphx_glr_hist_003.png
   :alt: hist
   :srcset: /gallery/statistics/images/sphx_glr_hist_003.png, /gallery/statistics/images/sphx_glr_hist_003_2_00x.png 2.00x
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 86-91

Customizing your histogram
--------------------------

Customizing a 2D histogram is similar to the 1D case, you can control
visual components such as the bin size or color normalization.

.. GENERATED FROM PYTHON SOURCE LINES 91-104

.. code-block:: Python


    fig, axs = plt.subplots(3, 1, figsize=(5, 15), sharex=True, sharey=True,
                            tight_layout=True)

    # We can increase the number of bins on each axis
    axs[0].hist2d(dist1, dist2, bins=40)

    # As well as define normalization of the colors
    axs[1].hist2d(dist1, dist2, bins=40, norm=colors.LogNorm())

    # We can also define custom numbers of bins for each axis
    axs[2].hist2d(dist1, dist2, bins=(80, 10), norm=colors.LogNorm())




.. image-sg:: /gallery/statistics/images/sphx_glr_hist_004.png
   :alt: hist
   :srcset: /gallery/statistics/images/sphx_glr_hist_004.png, /gallery/statistics/images/sphx_glr_hist_004_2_00x.png 2.00x
   :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 105-122

.. tags::

   plot-type: histogram,
   plot-type: histogram2d
   domain: statistics
   styling: color,
   component: normalization
   component: patch

.. admonition:: References

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

   - `matplotlib.axes.Axes.hist` / `matplotlib.pyplot.hist`
   - `matplotlib.pyplot.hist2d`
   - `matplotlib.ticker.PercentFormatter`


.. rst-class:: sphx-glr-timing

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


.. _sphx_glr_download_gallery_statistics_hist.py:

.. only:: html

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

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

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

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

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

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

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


.. only:: html

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

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