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

.. only:: html

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

        Click :ref:`here <sphx_glr_download_gallery_pie_and_polar_charts_nested_pie.py>`
        to download the full example code

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

.. _sphx_glr_gallery_pie_and_polar_charts_nested_pie.py:


=================
Nested pie charts
=================

The following examples show two ways to build a nested pie chart
in Matplotlib. Such charts are often referred to as donut charts.

.. GENERATED FROM PYTHON SOURCE LINES 10-14

.. code-block:: default


    import matplotlib.pyplot as plt
    import numpy as np








.. GENERATED FROM PYTHON SOURCE LINES 15-26

The most straightforward way to build a pie chart is to use the
`~matplotlib.axes.Axes.pie` method.

In this case, pie takes values corresponding to counts in a group.
We'll first generate some fake data, corresponding to three groups.
In the inner circle, we'll treat each number as belonging to its
own group. In the outer circle, we'll plot them as members of their
original 3 groups.

The effect of the donut shape is achieved by setting a ``width`` to
the pie's wedges through the *wedgeprops* argument.

.. GENERATED FROM PYTHON SOURCE LINES 26-46

.. code-block:: default



    fig, ax = plt.subplots()

    size = 0.3
    vals = np.array([[60., 32.], [37., 40.], [29., 10.]])

    cmap = plt.get_cmap("tab20c")
    outer_colors = cmap(np.arange(3)*4)
    inner_colors = cmap([1, 2, 5, 6, 9, 10])

    ax.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
           wedgeprops=dict(width=size, edgecolor='w'))

    ax.pie(vals.flatten(), radius=1-size, colors=inner_colors,
           wedgeprops=dict(width=size, edgecolor='w'))

    ax.set(aspect="equal", title='Pie plot with `ax.pie`')
    plt.show()




.. image:: /gallery/pie_and_polar_charts/images/sphx_glr_nested_pie_001.png
    :alt: Pie plot with `ax.pie`
    :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 47-54

However, you can accomplish the same output by using a bar plot on
axes with a polar coordinate system. This may give more flexibility on
the exact design of the plot.

In this case, we need to map x-values of the bar chart onto radians of
a circle. The cumulative sum of the values are used as the edges
of the bars.

.. GENERATED FROM PYTHON SOURCE LINES 54-80

.. code-block:: default


    fig, ax = plt.subplots(subplot_kw=dict(polar=True))

    size = 0.3
    vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
    #normalize vals to 2 pi
    valsnorm = vals/np.sum(vals)*2*np.pi
    #obtain the ordinates of the bar edges
    valsleft = np.cumsum(np.append(0, valsnorm.flatten()[:-1])).reshape(vals.shape)

    cmap = plt.get_cmap("tab20c")
    outer_colors = cmap(np.arange(3)*4)
    inner_colors = cmap([1, 2, 5, 6, 9, 10])

    ax.bar(x=valsleft[:, 0],
           width=valsnorm.sum(axis=1), bottom=1-size, height=size,
           color=outer_colors, edgecolor='w', linewidth=1, align="edge")

    ax.bar(x=valsleft.flatten(),
           width=valsnorm.flatten(), bottom=1-2*size, height=size,
           color=inner_colors, edgecolor='w', linewidth=1, align="edge")

    ax.set(title="Pie plot with `ax.bar` and polar coordinates")
    ax.set_axis_off()
    plt.show()




.. image:: /gallery/pie_and_polar_charts/images/sphx_glr_nested_pie_002.png
    :alt: Pie plot with `ax.bar` and polar coordinates
    :class: sphx-glr-single-img





.. GENERATED FROM PYTHON SOURCE LINES 81-88

------------

References
""""""""""

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

.. GENERATED FROM PYTHON SOURCE LINES 89-98

.. code-block:: default


    import matplotlib
    matplotlib.axes.Axes.pie
    matplotlib.pyplot.pie
    matplotlib.axes.Axes.bar
    matplotlib.pyplot.bar
    matplotlib.projections.polar
    matplotlib.axes.Axes.set
    matplotlib.axes.Axes.set_axis_off




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

 Out:

 .. code-block:: none


    <function _AxesBase.set_axis_off at 0x7f73be8dedc0>




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

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


.. _sphx_glr_download_gallery_pie_and_polar_charts_nested_pie.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: nested_pie.py <nested_pie.py>`



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

     :download:`Download Jupyter notebook: nested_pie.ipynb <nested_pie.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>`_
