@@ -1012,6 +1012,7 @@ def _set_artist_props(self, a):
1012
1012
return
1013
1013
a .set_figure (self .figure )
1014
1014
1015
+ @cbook .deprecated ("3.1" )
1015
1016
def iter_ticks (self ):
1016
1017
"""
1017
1018
Iterate through all of the major and minor ticks.
@@ -1035,7 +1036,7 @@ def get_ticklabel_extents(self, renderer):
1035
1036
of the axes.
1036
1037
"""
1037
1038
1038
- ticks_to_draw = self ._update_ticks (renderer )
1039
+ ticks_to_draw = self ._update_ticks ()
1039
1040
ticklabelBoxes , ticklabelBoxes2 = self ._get_tick_bboxes (ticks_to_draw ,
1040
1041
renderer )
1041
1042
@@ -1058,20 +1059,38 @@ def get_smart_bounds(self):
1058
1059
"""get whether the axis has smart bounds"""
1059
1060
return self ._smart_bounds
1060
1061
1061
- def _update_ticks (self , renderer ):
1062
+ def _update_ticks (self ):
1062
1063
"""
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.
1066
1066
"""
1067
1067
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 :
1071
1091
# handle inverted limits
1072
- view_low , view_high = sorted (interval )
1073
1092
data_low , data_high = sorted (self .get_data_interval ())
1074
- locs = np . sort ([ ti [ 1 ] for ti in tick_tups ] )
1093
+ locs = sorted ( tick . get_loc () for tick in ticks )
1075
1094
if data_low <= view_low :
1076
1095
# data extends beyond view, take view as limit
1077
1096
ilow = view_low
@@ -1096,33 +1115,21 @@ def _update_ticks(self, renderer):
1096
1115
else :
1097
1116
# No ticks (why not?), take last tick
1098
1117
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 ]
1100
1119
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 ])
1104
1121
1105
1122
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 :
1116
1124
try :
1117
- loct = self .get_transform ().transform (loc )
1125
+ loc_t = self .get_transform ().transform (tick . get_loc () )
1118
1126
except AssertionError :
1119
1127
# transforms.transform doesn't allow masked values but
1120
1128
# 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 )
1126
1133
1127
1134
return ticks_to_draw
1128
1135
@@ -1141,7 +1148,7 @@ def get_tightbbox(self, renderer):
1141
1148
if not self .get_visible ():
1142
1149
return
1143
1150
1144
- ticks_to_draw = self ._update_ticks (renderer )
1151
+ ticks_to_draw = self ._update_ticks ()
1145
1152
1146
1153
self ._update_label_position (renderer )
1147
1154
@@ -1186,7 +1193,7 @@ def draw(self, renderer, *args, **kwargs):
1186
1193
return
1187
1194
renderer .open_group (__name__ )
1188
1195
1189
- ticks_to_draw = self ._update_ticks (renderer )
1196
+ ticks_to_draw = self ._update_ticks ()
1190
1197
ticklabelBoxes , ticklabelBoxes2 = self ._get_tick_bboxes (ticks_to_draw ,
1191
1198
renderer )
1192
1199
@@ -1979,7 +1986,7 @@ def _get_tick_boxes_siblings(self, renderer):
1979
1986
grp = self .figure ._align_xlabel_grp
1980
1987
# if we want to align labels from other axes:
1981
1988
for nn , axx in enumerate (grp .get_siblings (self .axes )):
1982
- ticks_to_draw = axx .xaxis ._update_ticks (renderer )
1989
+ ticks_to_draw = axx .xaxis ._update_ticks ()
1983
1990
tlb , tlb2 = axx .xaxis ._get_tick_bboxes (ticks_to_draw , renderer )
1984
1991
bboxes .extend (tlb )
1985
1992
bboxes2 .extend (tlb2 )
@@ -2320,7 +2327,7 @@ def _get_tick_boxes_siblings(self, renderer):
2320
2327
grp = self .figure ._align_ylabel_grp
2321
2328
# if we want to align labels from other axes:
2322
2329
for axx in grp .get_siblings (self .axes ):
2323
- ticks_to_draw = axx .yaxis ._update_ticks (renderer )
2330
+ ticks_to_draw = axx .yaxis ._update_ticks ()
2324
2331
tlb , tlb2 = axx .yaxis ._get_tick_bboxes (ticks_to_draw , renderer )
2325
2332
bboxes .extend (tlb )
2326
2333
bboxes2 .extend (tlb2 )
0 commit comments