Hide keyboard shortcuts

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 

3 

4from .plotHandler import BasePlotter 

5 

6__all__ = ['HourglassPlot'] 

7 

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'} 

16 

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') 

23 

24 fig = plt.figure(fignum) 

25 ax = fig.add_subplot(111) 

26 

27 plotDict = {} 

28 plotDict.update(self.defaultPlotDict) 

29 plotDict.update(userPlotDict) 

30 

31 pernight = metricValue[0]['pernight'] 

32 perfilter = metricValue[0]['perfilter'] 

33 

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']) 

57 

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') 

72 

73 return fig.number