Sky Map Plotting (ligo.skymap.plot.allsky)

Axes subclasses for astronomical mapmaking.

This module adds several astropy.visualization.wcsaxes.WCSAxes subclasses to the Matplotlib projection registry. The projections have names of the form astro_or_geo [lon_units] projection.

astro_or_geo may be astro or geo. It controls the reference frame, either celestial (ICRS) or terrestrial (ITRS).

lon_units may be hours or degrees. It controls the units of the longitude axis. If omitted, astro implies hours and geo implies degrees.

projection may be any of the following:

  • aitoff for the Aitoff all-sky projection

  • mollweide for the Mollweide all-sky projection

  • globe for an orthographic projection, like the three-dimensional view of the Earth from a distant satellite

  • zoom for a gnomonic projection suitable for visualizing small zoomed-in patches

Some of the projections support additional optional arguments. The globe projections support the options center and rotate. The zoom projections support the options center, radius, and rotate.

Examples

import ligo.skymap.plot
from matplotlib import pyplot as plt
ax = plt.axes(projection='astro hours mollweide')
ax.grid()

(Source code, png, hires.png, pdf)

../_images/allsky-1.png
import ligo.skymap.plot
from matplotlib import pyplot as plt
ax = plt.axes(projection='geo aitoff')
ax.grid()

(Source code, png, hires.png, pdf)

../_images/allsky-2.png
import ligo.skymap.plot
from matplotlib import pyplot as plt
ax = plt.axes(projection='astro zoom',
              center='5h -32d', radius='5 deg', rotate='20 deg')
ax.grid()

(Source code, png, hires.png, pdf)

../_images/allsky-3.png
import ligo.skymap.plot
from matplotlib import pyplot as plt
ax = plt.axes(projection='geo globe', center='-50d +23d')
ax.grid()

(Source code, png, hires.png, pdf)

../_images/allsky-4.png

Complete Example

The following example demonstrates most of the features of this module.

from astropy.coordinates import SkyCoord
from astropy.io import fits
from astropy import units as u
import ligo.skymap.plot
from matplotlib import pyplot as plt

url = 'https://dcc.ligo.org/public/0146/G1701985/001/bayestar_no_virgo.fits.gz'
center = SkyCoord.from_name('NGC 4993')

fig = plt.figure(figsize=(4, 4), dpi=100)

ax = plt.axes(
    [0.05, 0.05, 0.9, 0.9],
    projection='astro globe',
    center=center)

ax_inset = plt.axes(
    [0.59, 0.3, 0.4, 0.4],
    projection='astro zoom',
    center=center,
    radius=10*u.deg)

for key in ['ra', 'dec']:
    ax_inset.coords[key].set_ticklabel_visible(False)
    ax_inset.coords[key].set_ticks_visible(False)
ax.grid()
ax.mark_inset_axes(ax_inset)
ax.connect_inset_axes(ax_inset, 'upper left')
ax.connect_inset_axes(ax_inset, 'lower left')
ax_inset.scalebar((0.1, 0.1), 5 * u.deg).label()
ax_inset.compass(0.9, 0.1, 0.2)

ax.imshow_hpx(url, cmap='cylon')
ax_inset.imshow_hpx(url, cmap='cylon')
ax_inset.plot(
    center.ra.deg, center.dec.deg,
    transform=ax_inset.get_transform('world'),
    marker=ligo.skymap.plot.reticle(),
    markersize=30,
    markeredgewidth=3)

(Source code, png, hires.png, pdf)

../_images/allsky-5.png
class ligo.skymap.plot.allsky.AutoScaledWCSAxes(*args, header, obstime=None, **kwargs)[source] [edit on github]

Bases: astropy.visualization.wcsaxes.WCSAxes

Axes base class. The pixel scale is adjusted to the DPI of the image, and there are a variety of convenience methods.

compass(x, y, size)[source] [edit on github]

Add a compass to indicate the north and east directions.

Parameters
x, yfloat

Position of compass vertex in axes coordinates.

sizefloat

Size of compass in axes coordinates.

connect_inset_axes(ax, loc, *args, **kwargs)[source] [edit on github]

Connect a corner of another WCSAxes to the matching point inside this one.

Parameters
axastropy.visualization.wcsaxes.WCSAxes

The other axes.

locint, str

Which corner to connect. For valid values, see matplotlib.offsetbox.AnchoredOffsetbox.

Returns
patchmatplotlib.patches.ConnectionPatch
Other Parameters
args :

Extra arguments for matplotlib.patches.ConnectionPatch

kwargs :

Extra keyword arguments for matplotlib.patches.ConnectionPatch

contour_hpx(data, hdu_in=None, order='bilinear', nested=False, field=0, smooth=None, **kwargs)[source] [edit on github]

Add contour levels for a HEALPix data set.

Parameters
datanumpy.ndarray or str or TableHDU or BinTableHDU or tuple

The HEALPix data set. If this is a numpy.ndarray, then it is interpreted as the HEALPix array in the same coordinate system as the axes. Otherwise, the input data can be any type that is understood by reproject.reproject_from_healpix.

smoothastropy.units.Quantity, optional

An optional smoothing length in angle-compatible units.

Returns
countoursmatplotlib.contour.QuadContourSet
Other Parameters
hdu_in, order, nested, field, smooth :

Extra arguments for reproject.reproject_from_healpix

kwargs :

Extra keyword arguments for matplotlib.axes.Axes.contour

contourf_hpx(data, hdu_in=None, order='bilinear', nested=False, field=0, smooth=None, **kwargs)[source] [edit on github]

Add filled contour levels for a HEALPix data set.

Parameters
datanumpy.ndarray or str or TableHDU or BinTableHDU or tuple

The HEALPix data set. If this is a numpy.ndarray, then it is interpreted as the HEALPix array in the same coordinate system as the axes. Otherwise, the input data can be any type that is understood by reproject.reproject_from_healpix.

smoothastropy.units.Quantity, optional

An optional smoothing length in angle-compatible units.

Returns
contoursmatplotlib.contour.QuadContourSet
Other Parameters
hdu_in, order, nested, field, smooth :

Extra arguments for reproject.reproject_from_healpix

kwargs :

Extra keyword arguments for matplotlib.axes.Axes.contour

imshow_hpx(data, hdu_in=None, order='bilinear', nested=False, field=0, smooth=None, **kwargs)[source] [edit on github]

Add an image for a HEALPix data set.

Parameters
datanumpy.ndarray or str or TableHDU or BinTableHDU or tuple

The HEALPix data set. If this is a numpy.ndarray, then it is interpreted as the HEALPix array in the same coordinate system as the axes. Otherwise, the input data can be any type that is understood by reproject.reproject_from_healpix.

smoothastropy.units.Quantity, optional

An optional smoothing length in angle-compatible units.

Returns
imagematplotlib.image.AxesImage
Other Parameters
hdu_in, order, nested, field, smooth :

Extra arguments for reproject.reproject_from_healpix

kwargs :

Extra keyword arguments for matplotlib.axes.Axes.contour

mark_inset_axes(ax, *args, **kwargs)[source] [edit on github]

Outline the footprint of another WCSAxes inside this one.

Parameters
axastropy.visualization.wcsaxes.WCSAxes

The other axes.

Returns
patchmatplotlib.patches.PathPatch
Other Parameters
args :

Extra arguments for matplotlib.patches.PathPatch

kwargs :

Extra keyword arguments for matplotlib.patches.PathPatch

scalebar(*args, **kwargs)[source] [edit on github]

Add scale bar.

Parameters
xytuple

The axes coordinates of the scale bar.

lengthastropy.units.Quantity

The length of the scale bar in angle-compatible units.

Returns
patchmatplotlib.patches.FancyArrowPatch
Other Parameters
args :

Extra arguments for matplotlib.patches.FancyArrowPatch

kwargs :

Extra keyword arguments for matplotlib.patches.FancyArrowPatch