Coverage for python/lsst/sims/maf/plots/hourglassPlotters.py : 13%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import numpy as np
2import matplotlib.pyplot as plt
4from .plotHandler import BasePlotter
6__all__ = ['HourglassPlot']
8class HourglassPlot(BasePlotter):
9 def __init__(self):
10 self.plotType = 'Hourglass'
11 self.objectPlotter = True
12 self.defaultPlotDict = {'title': None, 'xlabel': 'Night - min(Night)',
13 'ylabel': 'Hours from local midnight'}
14 self.filter2color = {'u': 'purple', 'g': 'blue', 'r': 'green',
15 'i': 'cyan', 'z': 'orange', 'y': 'red'}
17 def __call__(self, metricValue, slicer, userPlotDict, fignum=None):
18 """
19 Generate the hourglass plot
20 """
21 if slicer.slicerName != 'HourglassSlicer':
22 raise ValueError('HourglassPlot is for use with hourglass slicers')
24 fig = plt.figure(fignum)
25 ax = fig.add_subplot(111)
27 plotDict = {}
28 plotDict.update(self.defaultPlotDict)
29 plotDict.update(userPlotDict)
31 pernight = metricValue[0]['pernight']
32 perfilter = metricValue[0]['perfilter']
34 y = (perfilter['mjd'] - perfilter['midnight']) * 24.0
35 dmin = np.floor(np.min(perfilter['mjd']))
36 for i in np.arange(0, perfilter.size, 2):
37 ax.plot([perfilter['mjd'][i] - dmin, perfilter['mjd'][i + 1] - dmin], [y[i], y[i + 1]],
38 self.filter2color[perfilter['filter'][i]])
39 for i, key in enumerate(['u', 'g', 'r', 'i', 'z', 'y']):
40 ax.text(1.05, .9 - i * 0.07, key, color=self.filter2color[key], transform=ax.transAxes)
41 ax.plot(pernight['mjd'] - dmin, (pernight['twi6_rise'] - pernight['midnight']) * 24.,
42 'blue', label=r'6$^\circ$ twilight')
43 ax.plot(pernight['mjd'] - dmin, (pernight['twi6_set'] - pernight['midnight']) * 24.,
44 'blue')
45 ax.plot(pernight['mjd'] - dmin, (pernight['twi12_rise'] - pernight['midnight']) * 24.,
46 'yellow', label=r'12$^\circ$ twilight')
47 ax.plot(pernight['mjd'] - dmin, (pernight['twi12_set'] - pernight['midnight']) * 24.,
48 'yellow')
49 ax.plot(pernight['mjd'] - dmin, (pernight['twi18_rise'] - pernight['midnight']) * 24.,
50 'red', label=r'18$^\circ$ twilight')
51 ax.plot(pernight['mjd'] - dmin, (pernight['twi18_set'] - pernight['midnight']) * 24.,
52 'red')
53 ax.plot(pernight['mjd'] - dmin, pernight['moonPer'] / 100. - 7, 'black', label='Moon')
54 ax.set_xlabel(plotDict['xlabel'])
55 ax.set_ylabel(plotDict['ylabel'])
56 ax.set_title(plotDict['title'])
58 # draw things in with lines if we are only plotting one night
59 if len(pernight['mjd']) == 1:
60 ax.axhline((pernight['twi6_rise'] - pernight['midnight']) * 24.,
61 color='blue', label=r'6$^\circ$ twilight')
62 ax.axhline((pernight['twi6_set'] - pernight['midnight']) * 24.,
63 color='blue')
64 ax.axhline((pernight['twi12_rise'] - pernight['midnight']) * 24.,
65 color='yellow', label=r'12$^\circ$ twilight')
66 ax.axhline((pernight['twi12_set'] - pernight['midnight']) * 24.,
67 color='yellow')
68 ax.axhline((pernight['twi18_rise'] - pernight['midnight']) * 24.,
69 color='red', label=r'18$^\circ$ twilight')
70 ax.axhline((pernight['twi18_set'] - pernight['midnight']) * 24.,
71 color='red')
73 return fig.number