Using Matplotlib for visualisation on JASMIN
This article provides a basic example of using Matplotlib on JASMIN to generate a plot. It also gives an important tip that may stop your code failing when run on the LOTUS cluster.
Matplotlib - a basic example
Matplotlib is a very well documented plotting library for Python. Here is a brief example of generating a line graph on a PNG file using matplotlib.
Load the Jaspy Python 3 environment, and start a Python session:
$ module load jaspy $ python
In python, set some x-values, y-values, axis labels and a title, and plot:
import matplotlib matplotlib.use('agg') import matplotlib.pyplot as plt x_values = [1, 5, 3, 9, 14] y_values = [2000, 2005, 2010, 2015, 2020] x_label = 'Temperature (degC)' y_label = 'Year' title = 'Average temperature of garden shed (2000-2020)' plt.plot(y_values, x_values, 'g--') plt.ylabel(y_label) plt.xlabel(x_label) plt.title(title) plt.savefig('output.png')
Plotting with matplotlib on LOTUS
When using matplotlib on LOTUS hosts please make sure that you are setting the
rendering
backend to a setting that will definitely work. This must be done
before importing
matplotlib.pyplot
.
On JASMIN it is safe to use:
import matplotlib matplotlib.use('agg') import matplotlib.pyplot as plt
or alternatively, the
MPLBACKEND
environment variable can be set in the job script before invoking python:
export MPLBACKEND=agg
If you do not set this option or you choose an alternative backend then you may see
failures which include very large dump (error) files being written (up to 56GB per file!). Please remove these files if you accidentally create them, and switch over to selecting an appropriate rendering backend as indicated above.
Note that if you see the following error message, this results from attempting to use the default GTK backend on LOTUS (as GTK is only available in an interactive X-windows environment). The solution is to use
agg
, as described above.
ValueError: Namespace Gtk not available for version 3.0
For more information please see the
matplotlib back-ends page.