# Matplotlib

A brief description of Matplotlib, with some simple examples

This article provides a quick overview of the Python plotting tool Matplotlib.

An important part of any work involving the use of quantitative data is visualisation of that data and the results of your analyses. If your data analysis takes place in Python, it makes sense to produce your plots and data visualisation within Python too. The most common Python package for doing this is Matplotlib (https://matplotlib.org/). This comes pre-installed with Anaconda but otherwise you can install it easily using pip:

 pip install matplotlib

## Some examples

Below are some simple examples to give you a feel of how Matplotlib works. A complete version of the code to produce all the examples is available from our Github: https://github.com/LAR/PhenoDataCampp/tree/main/MachineLearning

### Line plots

To make a plot with Matplotlib all you need is a set of x values and a set of y values. This can be a Python list, or as in the example below, a Numpy array. Once you have the values you want to plot, you make the plot with plt.plot(x,y) and display it with plt.show():

import matplotlib.pyplot as pltimport numpy as npx = np.linspace(-5, 5, 1000)y = np.cos(x)plt.plot(x, y)plt.show()plt.close()

This code should make and display a figure in a popup window like the one below. For your script to continue or terminate you will need to close the window in the usual way for any window based system, with the cross.

As you can see the default behaviour of plot is to make a line plot.

To save a figure, rather than displaying it with show(), you need to use the savefig() function as follows:

plt.savefig('my_figure_name.png')

Note: it’s important to use plt.savefig before or instead of plt.show, rather than afterwards. Otherwise, if you use plt.show first, the plot is displayed first in a new window, then when you close it is cleared from memory. So plt.savefig just saves an empty plot.

If you want to plot more than one line on your axes you can just add more plot commands as follows:

x = np.linspace(-5, 5, 1000)y1 = np.cos(x)y2 = np.sin(x)plt.plot(x, y1,'r')plt.plot(x, y2,'g')

The strings ‘r’ and ‘g’ after the x,y part specify the colours of the lines to be red and green respectively.

### Scatter plots

If your data are separate observations, it’s common to want to plot them as discrete points in a scatter plot. To do this in Matplotlib you can just add a marker character such as ‘X’ to the plot command, possibly along with a colour code as we’ve done for the first plot below. Alternatively, you can be more explicit and use the scatter function along with the keyword arguments marker and color. We’ve included both ways in the code below using some randomly simulated data:

x = np.linspace(0,10,15)y1 = np.random.random(15)y2 = np.random.random(15)plt.plot(x,y1,'Xr') # scatter plot chosen by adding 'X' character in stringplt.scatter(x,y2,marker='o',color='b') # scatter plot chosen explicitlyplt.show()

For a full list of colour and marker codes you can use see https://matplotlib.org/cheatsheets/.

Of course, all good plots need to be well annotated and laid out, and there are functions in Matplotlib to do all this. Try following though the code below using the comments, which displays the same random data series as above, but with additional axes labels, axes limits, a figure legend, and a title:

x = np.linspace(0,10,15)y1 = np.random.random(15)y2 = np.random.random(15)# it's often useful to explicitly make blank figures and axes# so you can then refer to them directlyfig = plt.figure() # make a blank figureax = plt.axes() # add some axesax.plot(x,y1,'Xr',label='apples') # notice the keyword label ax.scatter(x,y2,marker='o',color='b', label='oranges')ax.legend() # add legend (using the labels set above) ax.set_xlim([-5,15]) # set limits of x-axisax.set_ylim([-0.5,1.5]) # set limits of y-axisax.set_xlabel('some x values') # set label of x-axisax.set_ylabel('some y values') # set label of y-axisax.set_title('random fruit data')plt.show()

There’s much more to Matplotlib then we can cover here, so we would encourage you to look at the examples and documentation on the Matplotlib website if you want to learn more. Other plot types include:

• histograms
• bar charts
• error bars
• contour plots
• range fills.