LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | List of all members
lsst.display.matplotlib.matplotlib.DisplayImpl Class Reference
Inheritance diagram for lsst.display.matplotlib.matplotlib.DisplayImpl:

Public Member Functions

def __init__ (self, display, verbose=False, interpretMaskBits=True, mtvOrigin=afwImage.PARENT, fastMaskDisplay=False, reopenPlot=False, useSexagesimal=False, dpi=None, *args, **kwargs)
 
def savefig (self, *args, **kwargs)
 
def show_colorbar (self, show=True, where="right", axSize="5%", axPad=None, **kwargs)
 
def useSexagesimal (self, useSexagesimal)
 
def wait (self, prompt="[c(ontinue) p(db)] :", allowPdb=True)
 

Detailed Description

Provide a matplotlib backend for afwDisplay

Recommended backends in notebooks are:
  %matplotlib notebook
or
  %matplotlib ipympl
or
  %matplotlib qt
  %gui qt
or
  %matplotlib inline
or
  %matplotlib osx

Apparently only qt supports Display.interact(); the list of interactive
backends is given by lsst.display.matplotlib.interactiveBackends

Definition at line 82 of file matplotlib.py.

Constructor & Destructor Documentation

◆ __init__()

def lsst.display.matplotlib.matplotlib.DisplayImpl.__init__ (   self,
  display,
  verbose = False,
  interpretMaskBits = True,
  mtvOrigin = afwImage.PARENT,
  fastMaskDisplay = False,
  reopenPlot = False,
  useSexagesimal = False,
  dpi = None,
args,
**  kwargs 
)
Initialise a matplotlib display

@param fastMaskDisplay      If True only show the first bitplane that's
                            set in each pixel
                            (e.g. if (SATURATED & DETECTED)
                            ignore DETECTED)
                            Not really what we want, but a bit faster
@param interpretMaskBits    Interpret the mask value under the cursor
@param mtvOrigin            Display pixel coordinates with LOCAL origin
                            (bottom left == 0,0 not XY0)
@param reopenPlot           If true, close the plot before opening it.
                            (useful with e.g. %ipympl)
@param useSexagesimal       If True, display coordinates in sexagesimal
                            E.g. hh:mm:ss.ss (default:False)
                            May be changed by calling
                                  display.useSexagesimal()
@param dpi                  Number of dpi (passed to pyplot.figure)

The `frame` argument to `Display` may be a matplotlib figure; this
permits code such as
   fig, axes = plt.subplots(1, 2)

   disp = afwDisplay.Display(fig)
   disp.scale('asinh', 'zscale', Q=0.5)

   for axis, exp in zip(axes, exps):
      plt.sca(axis)    # make axis active
      disp.mtv(exp)

Definition at line 100 of file matplotlib.py.

102  reopenPlot=False, useSexagesimal=False, dpi=None, *args, **kwargs):
103  """
104  Initialise a matplotlib display
105 
106  @param fastMaskDisplay If True only show the first bitplane that's
107  set in each pixel
108  (e.g. if (SATURATED & DETECTED)
109  ignore DETECTED)
110  Not really what we want, but a bit faster
111  @param interpretMaskBits Interpret the mask value under the cursor
112  @param mtvOrigin Display pixel coordinates with LOCAL origin
113  (bottom left == 0,0 not XY0)
114  @param reopenPlot If true, close the plot before opening it.
115  (useful with e.g. %ipympl)
116  @param useSexagesimal If True, display coordinates in sexagesimal
117  E.g. hh:mm:ss.ss (default:False)
118  May be changed by calling
119  display.useSexagesimal()
120  @param dpi Number of dpi (passed to pyplot.figure)
121 
122  The `frame` argument to `Display` may be a matplotlib figure; this
123  permits code such as
124  fig, axes = plt.subplots(1, 2)
125 
126  disp = afwDisplay.Display(fig)
127  disp.scale('asinh', 'zscale', Q=0.5)
128 
129  for axis, exp in zip(axes, exps):
130  plt.sca(axis) # make axis active
131  disp.mtv(exp)
132  """
133  if hasattr(display.frame, "number"): # the "display" quacks like a matplotlib figure
134  figure = display.frame
135  else:
136  figure = None
137 
138  virtualDevice.DisplayImpl.__init__(self, display, verbose)
139 
140  if reopenPlot:
141  pyplot.close(display.frame)
142 
143  if figure is not None:
144  self._figure = figure
145  else:
146  self._figure = pyplot.figure(display.frame, dpi=dpi)
147  self._figure.clf()
148 
149  self._display = display
150  self._maskTransparency = {None: 0.7}
151  self._interpretMaskBits = interpretMaskBits # interpret mask bits in mtv
152  self._fastMaskDisplay = fastMaskDisplay
153  self._useSexagesimal = [useSexagesimal] # use an array so we can modify the value in format_coord
154  self._mtvOrigin = mtvOrigin
155  self._mappable_ax = None
156  self._colorbar_ax = None
157  self._image_colormap = pyplot.cm.gray
158  #
159  self.__alpha = unicodedata.lookup("GREEK SMALL LETTER alpha") # used in cursor display string
160  self.__delta = unicodedata.lookup("GREEK SMALL LETTER delta") # used in cursor display string
161  #
162  # Support self._scale()
163  #
164  self._scaleArgs = dict()
165  self._normalize = None
166  #
167  # Support self._erase(), reporting pixel/mask values, and
168  # zscale/minmax; set in mtv
169  #
170  self._i_setImage(None)
171  #
172  # Ignore warnings due to BlockingKeyInput
173  #
174  if not verbose:
175  warnings.filterwarnings("ignore", category=matplotlib.cbook.mplDeprecation)
176 

Member Function Documentation

◆ savefig()

def lsst.display.matplotlib.matplotlib.DisplayImpl.savefig (   self,
args,
**  kwargs 
)
Defer to figure.savefig()

Parameters
----------
args : `list`
  Passed through to figure.savefig()
kwargs : `dict`
  Passed through to figure.savefig()

Definition at line 205 of file matplotlib.py.

205  def savefig(self, *args, **kwargs):
206  """Defer to figure.savefig()
207 
208  Parameters
209  ----------
210  args : `list`
211  Passed through to figure.savefig()
212  kwargs : `dict`
213  Passed through to figure.savefig()
214  """
215  self._figure.savefig(*args, **kwargs)
216 

◆ show_colorbar()

def lsst.display.matplotlib.matplotlib.DisplayImpl.show_colorbar (   self,
  show = True,
  where = "right",
  axSize = "5%",
  axPad = None,
**  kwargs 
)
Show (or hide) the colour bar

Parameters
----------
show : `bool`
  Should I show the colour bar?
where : `str`
  Location of colour bar: "right" or "bottom"
axSize : `float` or `str`
  Size of axes to hold the colour bar; fraction of current x-size
axPad : `float` or `str`
  Padding between axes and colour bar; fraction of current x-size
args : `list`
  Passed through to colorbar()
kwargs : `dict`
  Passed through to colorbar()

We set the default padding to put the colourbar in a reasonable
place for roughly square plots, but you may need to fiddle for
plots with extreme axis ratios.

You can only configure the colorbar when it isn't yet visible, but
as you can easily remove it this is not in practice a difficulty.

Definition at line 217 of file matplotlib.py.

217  def show_colorbar(self, show=True, where="right", axSize="5%", axPad=None, **kwargs):
218  """Show (or hide) the colour bar
219 
220  Parameters
221  ----------
222  show : `bool`
223  Should I show the colour bar?
224  where : `str`
225  Location of colour bar: "right" or "bottom"
226  axSize : `float` or `str`
227  Size of axes to hold the colour bar; fraction of current x-size
228  axPad : `float` or `str`
229  Padding between axes and colour bar; fraction of current x-size
230  args : `list`
231  Passed through to colorbar()
232  kwargs : `dict`
233  Passed through to colorbar()
234 
235  We set the default padding to put the colourbar in a reasonable
236  place for roughly square plots, but you may need to fiddle for
237  plots with extreme axis ratios.
238 
239  You can only configure the colorbar when it isn't yet visible, but
240  as you can easily remove it this is not in practice a difficulty.
241  """
242  if show:
243  if self._mappable_ax:
244  if self._colorbar_ax is None:
245  orientationDict = dict(right="vertical", bottom="horizontal")
246 
247  mappable, ax = self._mappable_ax
248 
249  if where in orientationDict:
250  orientation = orientationDict[where]
251  else:
252  print(f"Unknown location {where}; "
253  f"please use one of {', '.join(orientationDict.keys())}")
254 
255  if axPad is None:
256  axPad = 0.1 if orientation == "vertical" else 0.3
257 
258  divider = make_axes_locatable(ax)
259  self._colorbar_ax = divider.append_axes(where, size=axSize, pad=axPad)
260 
261  self._figure.colorbar(mappable, cax=self._colorbar_ax, orientation=orientation, **kwargs)
262 
263  try: # fails with %matplotlib inline
264  pyplot.sca(ax) # make main window active again
265  except ValueError:
266  pass
267  else:
268  if self._colorbar_ax is not None:
269  self._colorbar_ax.remove()
270  self._colorbar_ax = None
271 

◆ useSexagesimal()

def lsst.display.matplotlib.matplotlib.DisplayImpl.useSexagesimal (   self,
  useSexagesimal 
)
Control the formatting coordinates as HH:MM:SS.ss

Parameters
----------
useSexagesimal : `bool`
   Print coordinates as e.g. HH:MM:SS.ss iff True

N.b. can also be set in Display's ctor
Are we formatting coordinates as HH:MM:SS.ss?

Definition at line 272 of file matplotlib.py.

272  def useSexagesimal(self, useSexagesimal):
273  """Control the formatting coordinates as HH:MM:SS.ss
274 
275  Parameters
276  ----------
277  useSexagesimal : `bool`
278  Print coordinates as e.g. HH:MM:SS.ss iff True
279 
280  N.b. can also be set in Display's ctor
281  """
282 
283  """Are we formatting coordinates as HH:MM:SS.ss?"""
284  self._useSexagesimal[0] = useSexagesimal
285 

◆ wait()

def lsst.display.matplotlib.matplotlib.DisplayImpl.wait (   self,
  prompt = "[c(ontinue) p(db)] :",
  allowPdb = True 
)
Wait for keyboard input

Parameters
----------
prompt : `str`
   The prompt string.
allowPdb : `bool`
   If true, entering a 'p' or 'pdb' puts you into pdb

Returns the string you entered

Useful when plotting from a programme that exits such as a processCcd
Any key except 'p' continues; 'p' puts you into pdb (unless
allowPdb is False)

Definition at line 286 of file matplotlib.py.

286  def wait(self, prompt="[c(ontinue) p(db)] :", allowPdb=True):
287  """Wait for keyboard input
288 
289  Parameters
290  ----------
291  prompt : `str`
292  The prompt string.
293  allowPdb : `bool`
294  If true, entering a 'p' or 'pdb' puts you into pdb
295 
296  Returns the string you entered
297 
298  Useful when plotting from a programme that exits such as a processCcd
299  Any key except 'p' continues; 'p' puts you into pdb (unless
300  allowPdb is False)
301  """
302  while True:
303  s = input(prompt)
304  if allowPdb and s in ("p", "pdb"):
305  import pdb
306  pdb.set_trace()
307  continue
308 
309  return s

The documentation for this class was generated from the following file: