Getting percentages in legend from pie matplotlib pie chart

10,115

I assume by the time you draw the legend, you should know sizes. Something like this would do it:

# use a list comprehension to update the labels
labels = [f'{l}, {s:0.1f}%' for l, s in zip(labels, sizes)]
plt.legend(bbox_to_anchor=(0.85, 1), loc='upper left', labels=labels)

enter image description here

  • Older string formatting style
labels = ['%s, %1.1f %%' % (l, s) for l, s in zip(labels, sizes)]
Share:
10,115
Caroline.py
Author by

Caroline.py

Python 2.7 new user.

Updated on June 09, 2022

Comments

  • Caroline.py
    Caroline.py about 2 years

    I have created a pie chart using matplotlib below:

    import matplotlib.pyplot as plt
    labels = ['dogs','cats','birds','fish']
    sizes = [34, 24,18,13]
    pie = plt.pie(sizes,autopct='%1.1f%%', startangle=90)
    plt.axis('equal')
    plt.legend( loc = 'right', labels=labels)
    plt.show()
    

    enter image description here

    Instead of having the percentages on the pie slices, is there a way to put these percentages within the legend so that the legend reads:

    dogs, 34%

    cats, 24%

    birds, 18%

    fish, 13%

    I know I can just change the "labels" to read the above as the fastest and most elegant way, but what if you do not know "sizes" until after the code is ran?