

.. _sphx_glr_gallery_statistics_bxp.py:


=======================
Boxplot drawer function
=======================

This example demonstrates how to pass pre-computed box plot
statistics to the box plot drawer. The first figure demonstrates
how to remove and add individual components (note that the
mean is the only value not shown by default). The second
figure demonstrates how the styles of the artists can
be customized.

A good general reference on boxplots and their history can be found
here: http://vita.had.co.nz/papers/boxplots.pdf




.. rst-class:: sphx-glr-horizontal


    *

      .. image:: /gallery/statistics/images/sphx_glr_bxp_001.png
            :scale: 47

    *

      .. image:: /gallery/statistics/images/sphx_glr_bxp_002.png
            :scale: 47


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

 Out::

    ['med', 'q3', 'mean', 'cihi', 'q1', 'fliers', 'iqr', 'label', 'cilo', 'whishi', 'whislo']




|


.. code-block:: python


    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.cbook as cbook

    # fake data
    np.random.seed(19680801)
    data = np.random.lognormal(size=(37, 4), mean=1.5, sigma=1.75)
    labels = list('ABCD')

    # compute the boxplot stats
    stats = cbook.boxplot_stats(data, labels=labels, bootstrap=10000)
    # After we've computed the stats, we can go through and change anything.
    # Just to prove it, I'll set the median of each set to the median of all
    # the data, and double the means
    for n in range(len(stats)):
        stats[n]['med'] = np.median(data)
        stats[n]['mean'] *= 2

    print(list(stats[0]))

    fs = 10  # fontsize

    # demonstrate how to toggle the display of different elements:
    fig, axes = plt.subplots(nrows=2, ncols=3, figsize=(6, 6), sharey=True)
    axes[0, 0].bxp(stats)
    axes[0, 0].set_title('Default', fontsize=fs)

    axes[0, 1].bxp(stats, showmeans=True)
    axes[0, 1].set_title('showmeans=True', fontsize=fs)

    axes[0, 2].bxp(stats, showmeans=True, meanline=True)
    axes[0, 2].set_title('showmeans=True,\nmeanline=True', fontsize=fs)

    axes[1, 0].bxp(stats, showbox=False, showcaps=False)
    tufte_title = 'Tufte Style\n(showbox=False,\nshowcaps=False)'
    axes[1, 0].set_title(tufte_title, fontsize=fs)

    axes[1, 1].bxp(stats, shownotches=True)
    axes[1, 1].set_title('notch=True', fontsize=fs)

    axes[1, 2].bxp(stats, showfliers=False)
    axes[1, 2].set_title('showfliers=False', fontsize=fs)

    for ax in axes.flatten():
        ax.set_yscale('log')
        ax.set_yticklabels([])

    fig.subplots_adjust(hspace=0.4)
    plt.show()

    # demonstrate how to customize the display different elements:
    boxprops = dict(linestyle='--', linewidth=3, color='darkgoldenrod')
    flierprops = dict(marker='o', markerfacecolor='green', markersize=12,
                      linestyle='none')
    medianprops = dict(linestyle='-.', linewidth=2.5, color='firebrick')
    meanpointprops = dict(marker='D', markeredgecolor='black',
                          markerfacecolor='firebrick')
    meanlineprops = dict(linestyle='--', linewidth=2.5, color='purple')

    fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(6, 6), sharey=True)
    axes[0, 0].bxp(stats, boxprops=boxprops)
    axes[0, 0].set_title('Custom boxprops', fontsize=fs)

    axes[0, 1].bxp(stats, flierprops=flierprops, medianprops=medianprops)
    axes[0, 1].set_title('Custom medianprops\nand flierprops', fontsize=fs)

    axes[1, 0].bxp(stats, meanprops=meanpointprops, meanline=False,
                   showmeans=True)
    axes[1, 0].set_title('Custom mean\nas point', fontsize=fs)

    axes[1, 1].bxp(stats, meanprops=meanlineprops, meanline=True,
                   showmeans=True)
    axes[1, 1].set_title('Custom mean\nas line', fontsize=fs)

    for ax in axes.flatten():
        ax.set_yscale('log')
        ax.set_yticklabels([])

    fig.suptitle("I never said they'd be pretty")
    fig.subplots_adjust(hspace=0.4)
    plt.show()

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



.. container:: sphx-glr-footer


  .. container:: sphx-glr-download

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



  .. container:: sphx-glr-download

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

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

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