55
66A = np .array
77
8- from grid_finder import ExtremeFinderSimple
8+ from mpl_toolkits . axisartist . grid_finder import ExtremeFinderSimple
99
1010def select_step_degree (dv ):
1111
@@ -80,9 +80,6 @@ def select_step_sub(dv):
8080
8181 # subarcsec or degree
8282 tmp = 10. ** (int (math .log10 (dv ))- 1. )
83- dv2 = dv / tmp
84- substep_limits_ = [1.5 , 3. , 7. ]
85- substep_steps_ = [1. , 2. , 5. ]
8683
8784 factor = 1. / tmp
8885
@@ -99,13 +96,11 @@ def select_step_sub(dv):
9996 return step , factor
10097
10198
102- def select_step (v1 , v2 , nv , hour = False ):
99+ def select_step (v1 , v2 , nv , hour = False , include_last = True ):
103100
104101 if v1 > v2 :
105102 v1 , v2 = v2 , v1
106103
107- A = np .array
108-
109104 dv = float (v2 - v1 ) / nv
110105
111106 if hour :
@@ -141,38 +136,45 @@ def select_step(v1, v2, nv, hour=False):
141136 # we need to check the range of values
142137 # for example, -90 to 90, 0 to 360,
143138
144-
145139 if factor == 1. and (levs [- 1 ] >= levs [0 ]+ cycle ): # check for cycle
146140 nv = int (cycle / step )
147- levs = np .arange (0 , nv , 1 ) * step
141+ if include_last :
142+ levs = levs [0 ] + np .arange (0 , nv + 1 , 1 ) * step
143+ else :
144+ levs = levs [0 ] + np .arange (0 , nv , 1 ) * step
145+
148146 n = len (levs )
149147
150148 return np .array (levs ), n , factor
151149
152150
153- def select_step24 (v1 , v2 , nv ):
151+ def select_step24 (v1 , v2 , nv , include_last = True ):
154152 v1 , v2 = v1 / 15. , v2 / 15.
155- levs , n , factor = select_step (v1 , v2 , nv , hour = True )
153+ levs , n , factor = select_step (v1 , v2 , nv , hour = True ,
154+ include_last = include_last )
156155 return levs * 15. , n , factor
157156
158- def select_step360 (v1 , v2 , nv ):
159- return select_step (v1 , v2 , nv , hour = False )
157+ def select_step360 (v1 , v2 , nv , include_last = True ):
158+ return select_step (v1 , v2 , nv , hour = False ,
159+ include_last = include_last )
160160
161161
162162
163163
164164class LocatorHMS (object ):
165- def __init__ (self , den ):
165+ def __init__ (self , den , include_last = True ):
166166 self .den = den
167+ self ._include_last = include_last
167168 def __call__ (self , v1 , v2 ):
168- return select_step24 (v1 , v2 , self .den )
169+ return select_step24 (v1 , v2 , self .den , self . _include_last )
169170
170171
171172class LocatorDMS (object ):
172- def __init__ (self , den ):
173+ def __init__ (self , den , include_last = True ):
173174 self .den = den
175+ self ._include_last = include_last
174176 def __call__ (self , v1 , v2 ):
175- return select_step360 (v1 , v2 , self .den )
177+ return select_step360 (v1 , v2 , self .den , self . _include_last )
176178
177179
178180class FormatterHMS (object ):
@@ -181,11 +183,12 @@ def __call__(self, direction, factor, values): # hour
181183 return []
182184 #ss = [[-1, 1][v>0] for v in values] #not py24 compliant
183185 values = np .asarray (values )
184- ss = np .where (values > 0 , 1 , - 1 )
186+ ss = np .where (values >= 0 , 1 , - 1 )
185187 values = np .abs (values )/ 15.
186188
187189 if factor == 1 :
188- return ["$%d^{\mathrm{h}}$" % (int (v ),) for v in values ]
190+ return ["$%s%d^{\mathrm{h}}$" % ({1 :"" ,- 1 :"-" }[s ], int (v ),) \
191+ for s , v in zip (ss , values )]
189192 elif factor == 60 :
190193 return ["$%d^{\mathrm{h}}\,%02d^{\mathrm{m}}$" % (s * floor (v / 60. ), v % 60 ) \
191194 for s , v in zip (ss , values )]
@@ -347,3 +350,6 @@ def _adjust_extremes(self, lon_min, lon_max, lat_min, lat_max):
347350 print select_step360 (20 + 21.2 / 60. , 21 + 33.3 / 60. , 5 )
348351 print select_step360 (20.5 + 21.2 / 3600. , 20.5 + 33.3 / 3600. , 5 )
349352 print select_step360 (20 + 21.2 / 60. , 20 + 53.3 / 60. , 5 )
353+
354+ print select_step (- 180 , 180 , 10 , hour = False )
355+ print select_step (- 12 , 12 , 10 , hour = True )
0 commit comments