Python matplotlib library helps us to plot data on graphs in its simplest terms. If you are familiar with MATLAB plotting, then Matplotlib will be easy to use for basic plotting.
Python Matplotlib
To start understanding how Matplotlib helps us building graphs and visualisation figures to represent data, we will need to know some of the basic terms we will use a lot in this post. Let’s study these terms first.
Python Matplotlib Terminology
- The Figure is complete window or the page the graph is drawn upon.
- The Axes is the area on which data is plotted. This can be X-Axis or Y-Axis etc.
- The Spines are the lines which connects Axes points.
Install Matplotlib
It is easy to install python matplotlib library with pip
:
1 2 3 |
pip install matplotlib |
That’s it! Now we are ready to build some cool examples using this data visualisation library.
Getting started with Matplotlib
In this section, we will get started with the plot construction and start feeding data to python matplotlib functions.
Matplotlib Line Plot
We will start with a very basic example of plotting. We will just use two Python lists as the data source for points of a graph. Let’s write a code snippet for this:
1 2 3 4 5 6 7 |
import matplotlib.pyplot as plt year = [1950, 1975, 2000, 2018] population = [2.12, 3.681, 5.312, 6.981] plt.plot(year, population) plt.show() |
Note the last line with the show()
function. It is important to call it otherwise, the plot won’t be shown on the screen. When we run this code, we can see the following figure appear:
Note that we can also provide a title to this figure and labels to our Axes by using this snippet:
1 2 3 4 5 6 |
... plt.xlabel('Year') plt.ylabel('Population') plt.title('World Population') |
Matplotlib Scatter Plot
Above plot was very much indicative of the points which were actually not passed in the array as it showed a line. What if we only want to see the actual points on the plot? Scatter plot achieves this:
1 2 3 4 5 6 7 |
import matplotlib.pyplot as plt year = [1950, 1975, 2000, 2018] population = [2.12, 3.681, 5.312, 6.981] plt.scatter(year, population) plt.show() |
When we run this code, we can see the following figure appear:
Matplotlib Historgrams
In this section, we introduce you to Histograms. While graphs inform us how our data vary, histogram describes how our data is distributed. More the values in a range, higher the bar for a range.
We use hist() function to make a Histogram. It has 2 important parameters:
- List of values to plot
- Number of ranges to distribute these points into
Let’s demonstrate this with a code snippet:
1 2 3 4 5 6 |
import matplotlib.pyplot as plt values = [0, 1.2, 1.3, 1.9, 4.3, 2.5, 2.7, 4.3, 1.3, 3.9] plt.hist(values, bins = 4) plt.show() |
When we run this code, we can see the following figure appear:
The default value for number of bins is 10. The number of bins is important to set. Smaller number of bins can hide reality of data distribution and too many bins can overcomplicate reality.
Customisation in Matplotlib Plot
If you notice the first Line plot, we see that Y-axis didn’t started from 0. We can modify this:
1 2 3 4 |
... plt.yticks([0, 2, 4, 6, 8, 10]) |
When we run this code, we can see the following figure appear:
Drawing multiple curves in Matplotlib
It is utterly common to draw multiple curves on a single graph to make a comparison. Let’s try this here:
1 2 3 4 5 6 7 8 9 |
import numpy as np import matplotlib.pyplot as plt X = np.linspace(-np.pi, np.pi, 256, endpoint=True) cos, sin = np.cos(X), np.sin(X) plt.plot(X, cos) plt.plot(X, sin) plt.show() |
When we run this code, we can see the following figure appear:
So, it was just a matter of calling plot multiple times. To add, we used numpy to create a non-linear curve!
Changing color and Adding Legends in Matplotlib Plot
As we saw, curves look nice but aren’t they all look so, similar? What if we want to change their color and show what each color represents? Let’s try drawing the sine and cosine curves together:
1 2 3 4 5 6 7 8 9 10 |
import numpy as np import matplotlib.pyplot as plt X = np.linspace(-np.pi, np.pi, 256, endpoint=True) cos, sin = np.cos(X), np.sin(X) plt.plot(X, cos, color="blue", label="cosine") plt.plot(X, sin, color="red", label="sine") plt.legend(loc="upper left", frameon=False) plt.show() |
When we run this code, we can see the following figure appear:
If you notice, we actually did two things in this figure:
- Modified the color for the curves to make the comparison easier
- Added a legend frame which introduces which colour represents what. This makes the metadata on the graph very easy to read.
Creating Bar chart in Matplotlib
We can create appealing bar charts with Matplotlib with simple code snippet:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import matplotlib.pyplot as plt; plt.rcdefaults() import numpy as np import matplotlib.pyplot as plt names = ('Tom', 'Dick', 'Harry', 'Jill', 'Meredith', 'George') y_pos = np.arange(len(names)) speed = [8, 7, 12, 4, 3, 2] plt.bar(y_pos, speed, align='center', alpha=0.5) plt.xticks(y_pos, names) plt.ylabel('Speed') plt.title('Person') plt.show() |
When we run this code, we can see the following figure appear:
Creating Pie chart in Matplotlib
We can create appealing pie charts with Matplotlib with simple code snippet:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import matplotlib.pyplot as plt # Data to plot names="Tom", 'Dick', 'Harry', 'Jill', 'Meredith', 'George' speed = [8, 7, 12, 4, 3, 2] colors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue', 'red', 'blue'] explode = (0.1, 0, 0, 0, 0, 0) # explode 1st slice # Plot plt.pie(speed, explode=explode, labels=names, colors=colors, autopct="%1.1f%%", shadow=True, startangle=140) plt.axis('equal') plt.show() |
When we run this code, we can see the following figure appear:
See how we elevated one of the slice in the pie chart to differentiate it from the rest!
Creating Heat Maps in Matplotlib
Charts are cool but when it comes to visualising geographical information, nothing works better than a heat map:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import numpy as np import numpy.random import matplotlib.pyplot as plt # Create data temperature = np.random.randn(4096) anger = np.random.randn(4096) # Create heatmap heatmap, xedges, yedges = np.histogram2d(temperature, anger, bins=(64,64)) extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] # Plot heatmap plt.clf() plt.ylabel('Anger') plt.xlabel('Temp') plt.imshow(heatmap, extent=extent) plt.show() |
When we run this code,
Note that we created the data by just random values and output figure can vary depending on the values.
That’s all for python matplotlib plotting tutorial.
Reference: Website