Creating subplotsΒΆ

By default, FITSFigure creates a figure with a single subplot that occupies the entire figure. However, APLpy can be used to place a subplot in an existing matplotlib figure instance. To do this, FITSFigure should be called with the figure= argument as follows:

import aplpy
import matplotlib.pyplot as mpl

 fig = mpl.figure()
 f = aplpy.FITSFigure('some_image.fits', figure=fig)

The above will place a subplot inside the fig figure instance. The f object can be used as normal to control the FITS figure inside the subplot. The above however is not very interesting compared to just creating a FITSFigure instance from scratch. What this is useful for is only using sub-regions of the figure to display the FITS data, to leave place for other subplots, whether histograms, scatter, or other matplotlib plots, or another FITS Figure. This can be done using the subplot argument. From the docstring for FITSFigure:

*subplot*: [ list of four floats ]
    If specified, a subplot will be added at this position. The list
    should contain [xmin, ymin, dx, dy] where xmin and ymin are the
    position of the bottom left corner of the subplot, and dx and dy are
    the width and height of the subplot respectively. These should all be
    given in units of the figure width and height. For example, [0.1, 0.1,
    0.8, 0.8] will almost fill the entire figure, leaving a 10 percent
    margin on all sides.

The following code outline illustrates how to create a rectangular figure with two FITS images:

import aplpy
import matplotlib.pyplot as mpl

fig = mpl.figure(figsize=(15, 7))

f1 = aplpy.FITSFigure('image_1.fits', figure=fig, subplot=[0.1,0.1,0.35,0.8])
f1.set_tick_labels_font(size='x-small')
f1.set_axis_labels_font(size='small')
f1.show_grayscale()

f2 = aplpy.FITSFigure('image_2.fits', figure=fig, subplot=[0.5,0.1,0.35,0.8])
f2.set_tick_labels_font(size='x-small')
f2.set_axis_labels_font(size='small')
f2.show_grayscale()

f2.hide_yaxis_label()
f2.hide_ytick_labels()

fig.canvas.draw()

The hide methods shown above are especially useful when working with subplots, as in some cases there is no need to repeat the tick labels. Alternatively figures can be constructed from both APLpy figures and normal matplotlib axes:

import aplpy
import matplotlib.pyplot as mpl

fig = mpl.figure(figsize=(15, 7))

f1 = aplpy.FITSFigure('image_1.fits', figure=fig, subplot=[0.1,0.1,0.35,0.8])
f1.set_tick_labels_font(size='x-small')
f1.set_axis_labels_font(size='small')
f1.show_grayscale()

ax2 = fig.add_axes([0.5,0.1,0.35,0.8])

# some code here with ax2

fig.canvas.draw()