Source code for aplpy.axis_labels

from __future__ import absolute_import, print_function, division

from astropy.wcs.utils import wcs_to_celestial_frame
from astropy.coordinates import (ICRS, FK5, FK4, Galactic,
                                 HeliocentricTrueEcliptic,
                                 BarycentricTrueEcliptic)

from .decorators import auto_refresh, fixdocstring

__all__ = ['AxisLabels']


[docs]class AxisLabels(object): def __init__(self, parent): self._ax = parent.ax self._wcs = parent.ax.wcs self.x = parent.x self.y = parent.y self._ax.coords[self.x].set_axislabel_visibility_rule('always') self._ax.coords[self.y].set_axislabel_visibility_rule('always') xcoord_type = self._ax.coords[self.x].coord_type ycoord_type = self._ax.coords[self.y].coord_type if xcoord_type == 'longitude' and ycoord_type == 'latitude': celestial = True inverted = False elif xcoord_type == 'latitude' and ycoord_type == 'longitude': celestial = True inverted = True else: celestial = inverted = False if celestial: frame = wcs_to_celestial_frame(self._wcs) else: frame = None if isinstance(frame, ICRS): xtext = 'RA (ICRS)' ytext = 'Dec (ICRS)' elif isinstance(frame, FK5): equinox = "{:g}".format(FK5.equinox.jyear) xtext = 'RA (J{0})'.format(equinox) ytext = 'Dec (J{0})'.format(equinox) elif isinstance(frame, FK4): equinox = "{:g}".format(FK4.equinox.byear) xtext = 'RA (B{0})'.format(equinox) ytext = 'Dec (B{0})'.format(equinox) elif isinstance(frame, Galactic): xtext = 'Galactic Longitude' ytext = 'Galactic Latitude' elif isinstance(frame, (HeliocentricTrueEcliptic, BarycentricTrueEcliptic)): # NOTE: once we support only Astropy 2.0+, we can use BaseEclipticFrame xtext = 'Ecliptic Longitude' ytext = 'Ecliptic Latitude' else: cunit_x = self._wcs.wcs.cunit[self.x] cunit_y = self._wcs.wcs.cunit[self.y] cname_x = self._wcs.wcs.cname[self.x] cname_y = self._wcs.wcs.cname[self.y] ctype_x = self._wcs.wcs.ctype[self.x] ctype_y = self._wcs.wcs.ctype[self.y] xunit = " (%s)" % cunit_x if cunit_x not in ["", None] else "" yunit = " (%s)" % cunit_y if cunit_y not in ["", None] else "" if len(cname_x) > 0: xtext = cname_x + xunit else: if len(ctype_x) == 8 and ctype_x[4] == '-': xtext = ctype_x[:4].replace('-', '') + xunit else: xtext = ctype_x + xunit if len(cname_y) > 0: ytext = cname_y + yunit else: if len(ctype_y) == 8 and ctype_y[4] == '-': ytext = ctype_y[:4].replace('-', '') + yunit else: ytext = ctype_y + yunit if inverted: xtext, ytext = ytext, xtext self.set_xtext(xtext) self.set_ytext(ytext) self.set_xposition('bottom') self.set_yposition('left')
[docs] @auto_refresh def set_xtext(self, label): """ Set the x-axis label text. """ self._x_text = label self._ax.coords[self.x].set_axislabel(label)
[docs] @auto_refresh def set_ytext(self, label): """ Set the y-axis label text. """ self._y_text = label self._ax.coords[self.y].set_axislabel(label)
[docs] @auto_refresh def set_xpad(self, pad): """ Set the x-axis label displacement in terms of the axis label font size. """ self._ax.coords[self.x].axislabels.set_minpad(pad)
[docs] @auto_refresh def set_ypad(self, pad): """ Set the y-axis label displacement in terms of the axis label font size. """ self._ax.coords[self.y].axislabels.set_minpad(pad)
[docs] @auto_refresh @fixdocstring def set_font(self, **kwargs): """ Set the font of the axis labels. Parameters ---------- common: family, style, variant, stretch, weight, size, fontproperties Notes ----- Default values are set by matplotlib or previously set values if set_font has already been called. Global default values can be set by editing the matplotlibrc file. """ self._ax.coords[self.x].axislabels.set(**kwargs) self._ax.coords[self.y].axislabels.set(**kwargs)
[docs] @auto_refresh def show(self): """ Show the x- and y-axis labels. """ self.show_x() self.show_y()
[docs] @auto_refresh def hide(self): """ Hide the x- and y-axis labels. """ self.hide_x() self.hide_y()
[docs] @auto_refresh def show_x(self): """ Show the x-axis label. """ if self._xposition == 'bottom': self._ax.coords[self.x].set_axislabel_position('b') else: self._ax.coords[self.x].set_axislabel_position('t')
[docs] @auto_refresh def hide_x(self): """ Hide the x-axis label. """ self._ax.coords[self.x].set_axislabel_position('')
[docs] @auto_refresh def show_y(self): """ Show the y-axis label. """ if self._yposition == 'left': self._ax.coords[self.y].set_axislabel_position('l') else: self._ax.coords[self.y].set_axislabel_position('r')
[docs] @auto_refresh def hide_y(self): """ Hide the y-axis label. """ self._ax.coords[self.y].set_axislabel_position('')
[docs] @auto_refresh def set_xposition(self, position): """ Set the position of the x-axis label ('top' or 'bottom') """ if position == 'bottom': self._ax.coords[self.x].set_axislabel_position('b') elif position == 'top': self._ax.coords[self.x].set_axislabel_position('t') else: raise ValueError("position should be one of 'top' or 'bottom'") self._xposition = position
[docs] @auto_refresh def set_yposition(self, position): """ Set the position of the y-axis label ('left' or 'right') """ if position == 'left': self._ax.coords[self.y].set_axislabel_position('l') elif position == 'right': self._ax.coords[self.y].set_axislabel_position('r') else: raise ValueError("position should be one of 'left' or 'right'") self._yposition = position