software:matplotlib:matplotlib

This is an old revision of the document!


Matplotlib

Matplotlib is a python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. matplotlib can be used in python scripts, the python and ipython shell (ala MATLAB®* or Mathematica®†), web application servers, and six graphical user interface toolkits.

Matplotlib, pylab and pyplot are all related. Matplotlib is the whole package; pylab is a module in matplotlib that gets installed alongside matplotlib; and matplotlib.pyplot is a module in matplotlib. There is a pyplot tutorial and numerous other sites that use matplotlib for their plot examples such as SciPy Cookbook for Matplotlib.

All interactive jobs should be run on a compute node by setting your workgroup and using salloc. You need to be running X-Windows and you should make sure you are in the directory where your input and output files will be stored. In the example below, we are using the traine account in workgroup it-css to create the plot123.png file using Python packages Matplotlib.

[traine@login01.caviness ~]$ workgroup -g it_css
[(it_css:traine)@login01.caviness ~]$ salloc --partition=it_css --x11 -N1 -n1
salloc: Granted job allocation 26918710
salloc: Waiting for resource configuration
salloc: Nodes r00n45 are ready for job
[(it_css:traine)@r00n45 ~]$ vpkg_require intel-python
Adding package `intel-python/2022u1:python3` to your environment
[(it_css:traine)@r00n45 ~]$ python
Python 3.9.10 (main, Mar  2 2022, 12:02:00)
[GCC 9.3.0] :: Intel Corporation on linux
Type "help", "copyright", "credits" or "license" for more information.
Intel(R) Distribution for Python is brought to you by Intel Corporation.
Please check out: https://software.intel.com/en-us/python-distribution
>>> import scipy
>>> import matplotlib
>>> from pylab import *
>>> plot([1,2,3])
[<matplotlib.lines.Line2D object at 0x2b9e83d2bee0>]
>>> show()
>>> quit()
[(it_css:traine)@r00n45 ~]$ ls *.png
plot123.png

After typing show() in the example above, a Figure window should appear displaying the plot. Now click on the Save the figure icon at the bottom of the Figure window. A Save the Figure window appears with the default file name image.png for the file format type Portable Network Graphics (png). In this example, we changed image to plot123 and the plot file plot123.png was saved in the current working directory. If you want a different file format, use the pull-down menu at the bottom of the Save the Figure window and this will automatically change the file name extension. When you close the Figure window it returns you back to Python.

If you need to create many plots, then you will want to use a non-interactive method by specifying the file format with matplotlib.use() and saving each plot using savefig(). In the example below we are only generating one plot by specifying AGG to use Portable Network Graphics (png) file format and savefig('plot-cs.png') to save this one plot instead of using show().

plot-ex.py
# Python program to generate plots in batch

import matplotlib
matplotlib.use("AGG")

from pylab import *

X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)

plot(X,C)
plot(X,S)

# show()
savefig('plot-cs.png')

Now we can use this python plot example file and run it using a basic serial job script. Copy the job script template from /opt/shared/templates/slurm/generic/serial.qs and call it serial-plot.qs. Modify serial-plot.qs to add the correct vpkg_require intel-python and replace srun date with python plot-ex.py.

serial-plot.qs
#
#        To run with priority-access to resources owned by your workgroup,
#        use the "_workgroup_" partition:
#
#SBATCH --partition=_workgroup_

#
# If you have VALET packages to load into the job environment,
# uncomment and edit the following line:
#
#vpkg_require intel/2019
vpkg_require intel-python

#
# [EDIT] Add your script statements hereafter, or execute a script or program
#        using the srun command.
#
#srun date
python plot-ex.py

Now we can submit our batch run by using

sbatch serial-plot.qs

This will create the plot file plot-cs.png in the current working directory where you submitted the job.

[(it_css:traine)@login01.caviness matplotlib]$ ls
plot-cs.png  plot-ex.py  serial-plot.qs  slurm-26918733.out

If you want to review the plots created, then you can use Imagemagick on the compute nodes via qlogin as long as you are running X-Windows. For example, using account traine and workgroup it_css, we display the plot-cs.png plot file.

[(it_css:traine)@login01.caviness matplotlib]$ salloc --partition=it_css --x11 -N1 -n1
salloc: Granted job allocation 26918735
salloc: Waiting for resource configuration
salloc: Nodes r04n16 are ready for job
[(it_css:traine)@r04n16 matplotlib$ vpkg_require imagemagick
Adding dependency `fftw/3.3.8` to your environment
Adding dependency `ghostscript/9.23` to your environment
Adding package `imagemagick/7.0.8-3` to your environment
[(it_css:traine)@r04n16 matplotlib]$ display plot-cs.png

With some minor modifications from Text rendering with LaTeX - Matplotlib, we can create a plot called latex_demo.png with labels rendered by LaTeX.

latex_demo.py
import numpy as np
import matplotlib
matplotlib.use("AGG")
import matplotlib.pyplot as plt


# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2

plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.plot(t, s)

plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
          r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
          fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)

plt.savefig('latex_demo')

Using a basic serial job script like serial-plot-latex.qs below which loads the appropriate packages, then use qsub serial-plot-latex.qs will create the plot file latex_demo.png in the current working directory where you submitted the job.

serial-plot-latex.qs
# Setup the environment; add vpkg_require commands after this
# line:
vpkg_require numpy matplotlib
vpkg_require texlive

# Now append all of your shell commands necessary to run your program
# after this line:

python latex_demo.py
  • software/matplotlib/matplotlib.1708377214.txt.gz
  • Last modified: 2024-02-19 16:13
  • by anita