@@ -1016,6 +1016,7 @@ def _set_artist_props(self, a):
10161016 return
10171017 a .set_figure (self .figure )
10181018
1019+ @cbook .deprecated ("3.1" )
10191020 def iter_ticks (self ):
10201021 """
10211022 Yield ``(Tick, location, label)`` tuples for major and minor ticks.
@@ -1035,7 +1036,7 @@ def get_ticklabel_extents(self, renderer):
10351036 of the axes.
10361037 """
10371038
1038- ticks_to_draw = self ._update_ticks (renderer )
1039+ ticks_to_draw = self ._update_ticks ()
10391040 ticklabelBoxes , ticklabelBoxes2 = self ._get_tick_bboxes (ticks_to_draw ,
10401041 renderer )
10411042
@@ -1058,20 +1059,38 @@ def get_smart_bounds(self):
10581059 """get whether the axis has smart bounds"""
10591060 return self ._smart_bounds
10601061
1061- def _update_ticks (self , renderer ):
1062+ def _update_ticks (self ):
10621063 """
1063- Update ticks (position and labels) using the current data
1064- interval of the axes. Returns a list of ticks that will be
1065- drawn.
1064+ Update ticks (position and labels) using the current data interval of
1065+ the axes. Return the list of ticks that will be drawn.
10661066 """
10671067
1068- interval = self .get_view_interval ()
1069- tick_tups = list (self .iter_ticks ()) # iter_ticks calls the locator
1070- if self ._smart_bounds and tick_tups :
1068+ major_locs = self .major .locator ()
1069+ major_ticks = self .get_major_ticks (len (major_locs ))
1070+ self .major .formatter .set_locs (major_locs )
1071+ major_labels = self .major .formatter .format_ticks (major_locs )
1072+ for tick , loc , label in zip (major_ticks , major_locs , major_labels ):
1073+ tick .update_position (loc )
1074+ tick .set_label1 (label )
1075+ tick .set_label2 (label )
1076+ minor_locs = self .minor .locator ()
1077+ minor_ticks = self .get_minor_ticks (len (minor_locs ))
1078+ self .minor .formatter .set_locs (minor_locs )
1079+ minor_labels = self .minor .formatter .format_ticks (minor_locs )
1080+ for tick , loc , label in zip (minor_ticks , minor_locs , minor_labels ):
1081+ tick .update_position (loc )
1082+ tick .set_label1 (label )
1083+ tick .set_label2 (label )
1084+ ticks = [* major_ticks , * minor_ticks ]
1085+
1086+ view_low , view_high = self .get_view_interval ()
1087+ if view_low > view_high :
1088+ view_low , view_high = view_high , view_low
1089+
1090+ if self ._smart_bounds and ticks :
10711091 # handle inverted limits
1072- view_low , view_high = sorted (interval )
10731092 data_low , data_high = sorted (self .get_data_interval ())
1074- locs = np .sort ([ti [ 1 ] for ti in tick_tups ])
1093+ locs = np .sort ([tick . get_loc () for tick in ticks ])
10751094 if data_low <= view_low :
10761095 # data extends beyond view, take view as limit
10771096 ilow = view_low
@@ -1096,33 +1115,21 @@ def _update_ticks(self, renderer):
10961115 else :
10971116 # No ticks (why not?), take last tick
10981117 ihigh = locs [- 1 ]
1099- tick_tups = [ti for ti in tick_tups if ilow <= ti [ 1 ] <= ihigh ]
1118+ ticks = [tick for tick in ticks if ilow <= tick . get_loc () <= ihigh ]
11001119
1101- if interval [1 ] <= interval [0 ]:
1102- interval = interval [1 ], interval [0 ]
1103- inter = self .get_transform ().transform (interval )
1120+ interval_t = self .get_transform ().transform ([view_low , view_high ])
11041121
11051122 ticks_to_draw = []
1106- for tick , loc , label in tick_tups :
1107- # draw each tick if it is in interval. Note the transform
1108- # to pixel space to take care of log transforms etc.
1109- # interval_contains has a floating point tolerance.
1110- if tick is None :
1111- continue
1112- # NB: always update labels and position to avoid issues like #9397
1113- tick .update_position (loc )
1114- tick .set_label1 (label )
1115- tick .set_label2 (label )
1123+ for tick in ticks :
11161124 try :
1117- loct = self .get_transform ().transform (loc )
1125+ loc_t = self .get_transform ().transform (tick . get_loc () )
11181126 except AssertionError :
11191127 # transforms.transform doesn't allow masked values but
11201128 # some scales might make them, so we need this try/except.
1121- loct = None
1122- continue
1123- if not mtransforms ._interval_contains_close (inter , loct ):
1124- continue
1125- ticks_to_draw .append (tick )
1129+ pass
1130+ else :
1131+ if mtransforms ._interval_contains_close (interval_t , loc_t ):
1132+ ticks_to_draw .append (tick )
11261133
11271134 return ticks_to_draw
11281135
@@ -1141,7 +1148,7 @@ def get_tightbbox(self, renderer):
11411148 if not self .get_visible ():
11421149 return
11431150
1144- ticks_to_draw = self ._update_ticks (renderer )
1151+ ticks_to_draw = self ._update_ticks ()
11451152
11461153 self ._update_label_position (renderer )
11471154
@@ -1182,7 +1189,7 @@ def draw(self, renderer, *args, **kwargs):
11821189 return
11831190 renderer .open_group (__name__ )
11841191
1185- ticks_to_draw = self ._update_ticks (renderer )
1192+ ticks_to_draw = self ._update_ticks ()
11861193 ticklabelBoxes , ticklabelBoxes2 = self ._get_tick_bboxes (ticks_to_draw ,
11871194 renderer )
11881195
@@ -1948,7 +1955,7 @@ def _get_tick_boxes_siblings(self, renderer):
19481955 grp = self .figure ._align_xlabel_grp
19491956 # if we want to align labels from other axes:
19501957 for nn , axx in enumerate (grp .get_siblings (self .axes )):
1951- ticks_to_draw = axx .xaxis ._update_ticks (renderer )
1958+ ticks_to_draw = axx .xaxis ._update_ticks ()
19521959 tlb , tlb2 = axx .xaxis ._get_tick_bboxes (ticks_to_draw , renderer )
19531960 bboxes .extend (tlb )
19541961 bboxes2 .extend (tlb2 )
@@ -2262,7 +2269,7 @@ def _get_tick_boxes_siblings(self, renderer):
22622269 grp = self .figure ._align_ylabel_grp
22632270 # if we want to align labels from other axes:
22642271 for axx in grp .get_siblings (self .axes ):
2265- ticks_to_draw = axx .yaxis ._update_ticks (renderer )
2272+ ticks_to_draw = axx .yaxis ._update_ticks ()
22662273 tlb , tlb2 = axx .yaxis ._get_tick_bboxes (ticks_to_draw , renderer )
22672274 bboxes .extend (tlb )
22682275 bboxes2 .extend (tlb2 )
0 commit comments