Blog Posts

Donut Plots : Data Visualization With Python

Blog: Think Data Analytics Blog

Introduction

The twenty-first century can be regarded as the era of data-driven decision-making. Organizations having a pile of data can help to make advantageous future decisions.

This decision-making backed by visualizations puts the cherry on the cake making it easier to understand for the viewers unaware of the math behind this decision-making. Thus, the need for visualization has been growing since then.

But knowing something is not enough and one must always focus on improvising the existing methods or tools to perform a certain task most efficiently.

With a similar objective, the need for advanced visualization techniques has been increasing rapidly. One of the advanced visualizations we are going to talk about is the Donut Chart.

What are Donut Charts?

Donut Charts or Doughnut Charts are a special kind of Pie chart with the difference that it has a Blank Circle at the center.

The whole ring represents the data series taken into consideration. Each piece of this ring represents the proportion of the whole Data Series or percentage of total if the whole ring represents 100% of data. Donut Chart got its name from the Donuts which has a circle at its center.

Donut Charts help answer questions such as How much a category is the percent of total or How much area two pieces constitutes of the whole. The blank circle at the center can be used to show additional statistical or general information about the data.

Image by Mikael Blomkvist from Pexels

Building Donut Plots in Python

The whole pie chart can be built with one infamous matplotlib library of Python. It is built the same way pie charts are built with some additional commands to get the blank space at the center.

1. Importing Libraries

import numpy as np
import matplotlib.pyplot as plt

2. Creating Random Data

data = np.random.randint(20, 100, 6)

3. Plotting Pie Chart of the made-up data

plt.pie(data)

4. Creating a Circle

circle = plt.Circle( (0,0), 0.7, color='white')

5. Adding circle to the Pie Chart

p=plt.gcf()
p.gca().add_artist(circle)

The gcf() & gca() methods stand for get current figure & get current axis respectively. The add_artist() method of axes class is used to add artist to the axis (here referenced by .gca() )

6. Putting it all together

import numpy as np
import matplotlib.pyplot as plt
data = np.random.randint(20, 100, 6)
plt.pie(data)
circle = plt.Circle( (0,0), 0.7, color='white')
p=plt.gcf()
p.gca().add_artist(circle)
plt.show()
simple Donut plots

A Simple Donut Chart (Image Source – Personal Computer)

Adding Extra Parameters to Donut Chart

1. Adding Annotations to the Donut Chart

import matplotlib.pyplot as plt
import numpy as np
data = np.random.randint(20, 100, 6)
plt.pie(data, labels = ['A', 'B', 'C', 'D', 'E', 'F'])
circle = plt.Circle( (0,0), 0.7, color='white')
p = plt.gcf()
p.gca().add_artist(circle)
plt.show()

Donut Chart with Annotations (Image Source – Personal Computer)

2. Adding Percent of Total as Annotations to the Donut Chart

import matplotlib.pyplot as plt
import numpy as np
data = np.random.randint(20, 100, 6)
total = sum(data)
data_per = data/total*100
plt.pie(data_per, labels = [round(i,2) for i in (list(data_per))])
circle = plt.Circle( (0,0), 0.7, color='white')
p=plt.gcf()
p.gca().add_artist(circle)
plt.show()

Donut Chart with Percent of Total Values as Annotations (Image Source – Personal Computer)

3. Exploding a Part of the Donut Chart with Annotations

import matplotlib.pyplot as plt
import numpy as np
data = np.random.randint(20, 100, 6)
total = sum(data)
data_per = data/total*100
explode = (0.2, 0, 0, 0, 0, 0)
plt.pie(data_per, explode = explode, labels = [round(i,2) for i in (list(data_per))])
circle = plt.Circle( (0,0), 0.7, color='white')
p=plt.gcf()
p.gca().add_artist(circle)
plt.show()

Donut Chart with Percent of Total Values as Annotations and First Part Exploded

**The Donut Charts shown above are not the actual representation of what we get as an output. Since we used np.random(), we will get a different Donut Chart every time we run the given code.

Practical Examples

1. Donut Chart of Sports interest of Students in Class

A donut chart can be built based on interest in 3 kinds of sports: Cricket, Football, Basketball by counting the numbers of students in each of these types & displaying the total number of students at the center or displaying all the types of sports taken into consideration. By the size of the Donut Chart, we can get a rough estimate of what the majority of the class likes the sport more than the other two.

2. Donut Chart of Sales of Books at a Bookshop

A donut chart can be built based on the sales made by a bookshop over a week with the total number of books sold displayed at the center. The components of this donut chart consist of genres of the book purchased by the customers. This will give a rough estimate of what genre of book people are more interested to buy. This would help the bookshop take decisions as well as procuring marketing campaigns.

3. Donut Chart of Personal Expenditure

A donut chart can be built based on one’s personal expenditure over the month with total money spent & total money saved displayed at the center. The Donut ring would consist of different categories of expenditure such as Entertainment, Food, Necessities, Bills, etc. This would help one evaluate the next month’s budget & the categories which can help save money.

Advantages & Disadvantages

Advantages

  1. Donut Plots are Easy to Plot
  2. Donut Plots are User friendly and can be read by anyone
  3. Can easily add or remove data & the whole donut chart gets adjusted with the remaining data
  4. Can be extensively used for the comparison of categories
  5. Due to the large availability of the room, extra information can be added at the center

Disadvantages

  1. Cannot determine the exact value of a category unless annotated
  2. Could be misinterpreted unknown angles of parts of Donut Chart
  3. Donu Charts may get cluttered if more categories are added
  4. Negative values cannot be shown in a Donut Chart

Conclusion

Thus, Donut Charts are giving desired results for what they are meant for at the end of the day. A more number of parameters can be added to the Plot code which I highly encourage the readers to do to create their own version of creating & more informative Donut Charts. One can try changing the colors or palettes of the parts of the ring & manipulating wedgeprops parameter of plt.pie().

Donut Charts can be built in other tools and languages as well such as R Programming Language, Microsoft Excel, Tableau, Power BI, et Cetra. Donut Charts become difficult to interpret sometimes & thus are not always advised to use. For comparing the values of categories, one must always choose Bar Charts. But it’s always good to know multiple visualization techniques.

About the Author

Connect with me on LinkedIn Here.

Check out my other Articles Here

You can provide your valuable feedback to me on LinkedIn.

Thanks for giving your time!

Original Source

The post Donut Plots : Data Visualization With Python appeared first on ThinkDataAnalytics.

Leave a Comment

Get the BPI Web Feed

Using the HTML code below, you can display this Business Process Incubator page content with the current filter and sorting inside your web site for FREE.

Copy/Paste this code in your website html code:

<iframe src="https://www.businessprocessincubator.com/content/donut-plots-data-visualization-with-python/?feed=html" frameborder="0" scrolling="auto" width="100%" height="700">

Customizing your BPI Web Feed

You can click on the Get the BPI Web Feed link on any of our page to create the best possible feed for your site. Here are a few tips to customize your BPI Web Feed.

Customizing the Content Filter
On any page, you can add filter criteria using the MORE FILTERS interface:

Customizing the Content Filter

Customizing the Content Sorting
Clicking on the sorting options will also change the way your BPI Web Feed will be ordered on your site:

Get the BPI Web Feed

Some integration examples

BPMN.org

XPDL.org

×