APLpy in non-interactive mode¶
While APLpy can be easily used to interactively make plots, it is also possible to make plots without opening up a display. This can be useful to run APLpy remotely, or to write non-interactive scripts to plot one or many FITS files.
Running APLpy in non-interactive mode¶
To run APLpy in non-interactive mode, you will need to change the
‘backend’ used by matplotlib from an interactive (e.g. WxAgg, TkAgg,
MacOS X) to a non-interactive (e.g. Agg, Cairo, PS, PDF) backend. The
default backend is typically set in your .matplotlibrc
file (or if you do not have such a file, an interactive backend is
usually chosen by default). The easiest way to change the backend
temporarily is to use the matplotlib.use()
function:
import matplotlib
matplotlib.use('Agg')
It is important to change the backend via matplotlib.use
before the aplpy
module is imported. Once the backend has
been changed, any call to FITSFigure()
will no longer make a figure
window appear. The following script can be used to make a PNG plot:
import matplotlib
matplotlib.use('Agg')
import aplpy
f = aplpy.FITSFigure('mips_24micron.fits')
f.show_grayscale()
f.save('mips_24.png')
Pan/Zoom in non-interactive mode¶
One of the advantages of using APLpy in interactive mode is the
ability to zoom in on a given region of interest. To replicate this
functionality in non-interactive mode, the
FITSFigure.recenter()
method can be used. This method
takes a central position, and either a radius (to make a square plot)
or a width/height (to make a rectangular plot). This is illustrated in
the following example:
import matplotlib
matplotlib.use('Agg')
import aplpy
f = aplpy.FITSFigure('mips_24micron.fits')
f.show_grayscale()
f.recenter(266.2142,-29.1832,width=0.5,height=0.3)
f.save('mips_24_zoomin.png')
Batch scripting¶
Using APLpy non-interactively can be useful for making plots of many
FITS files. Given a directory fits/
containing FITS
files, the following code will generate on plot for each
.fits
file:
import matplotlib
matplotlib.use('Agg')
import aplpy
import glob
import os
for fits_file in glob.glob(os.path.join('fits/','*.fits')):
f = aplpy.FITSFigure(fits_file)
f.show_grayscale()
f.save(fits_file.replace('.fits','.png'))
f.close()