@@ -929,17 +929,15 @@ def iter_ticks(self):
929
929
"""
930
930
Iterate through all of the major and minor ticks.
931
931
"""
932
- major_locs = self .major .locator ()
933
- major_ticks = self .get_major_ticks (len (major_locs ))
932
+ major_locs = self .get_majorticklocs ()
934
933
self .major .formatter .set_locs (major_locs )
935
934
major_labels = self .major .formatter .format_ticks (major_locs )
936
-
937
- minor_locs = self . minor . locator ( )
938
- minor_ticks = self .get_minor_ticks ( len ( minor_locs ) )
935
+ major_ticks = self . get_major_ticks ( len ( major_locs ))
936
+ yield from zip ( major_ticks , major_locs , major_labels )
937
+ minor_locs = self .get_minorticklocs ( )
939
938
self .minor .formatter .set_locs (minor_locs )
940
939
minor_labels = self .minor .formatter .format_ticks (minor_locs )
941
-
942
- yield from zip (major_ticks , major_locs , major_labels )
940
+ minor_ticks = self .get_minor_ticks (len (minor_locs ))
943
941
yield from zip (minor_ticks , minor_locs , minor_labels )
944
942
945
943
def get_ticklabel_extents (self , renderer ):
@@ -1220,18 +1218,29 @@ def get_ticklines(self, minor=False):
1220
1218
return self .get_majorticklines ()
1221
1219
1222
1220
def get_majorticklocs (self ):
1223
- "Get the major tick locations in data coordinates as a numpy array "
1221
+ """ Get the array of major tick locations in data coordinates."" "
1224
1222
return self .major .locator ()
1225
1223
1226
1224
def get_minorticklocs (self ):
1227
- "Get the minor tick locations in data coordinates as a numpy array"
1228
- return self .minor .locator ()
1225
+ """Get the array of minor tick locations in data coordinates."""
1226
+ # Remove minor ticks duplicating major ticks.
1227
+ major_locs = self .major .locator ()
1228
+ minor_locs = self .minor .locator ()
1229
+ transform = self ._scale .get_transform ()
1230
+ tr_minor_locs = transform .transform (minor_locs )
1231
+ tr_major_locs = transform .transform (major_locs )
1232
+ lo , hi = sorted (transform .transform (self .get_view_interval ()))
1233
+ # Use the transformed view limits as scale. 1e-5 is the default rtol
1234
+ # for np.isclose.
1235
+ tol = (hi - lo ) * 1e-5
1236
+ minor_locs = [
1237
+ loc for loc , tr_loc in zip (minor_locs , tr_minor_locs )
1238
+ if not np .isclose (tr_loc , tr_major_locs , atol = tol , rtol = 0 ).any ()]
1239
+ return minor_locs
1229
1240
1230
1241
def get_ticklocs (self , minor = False ):
1231
- "Get the tick locations in data coordinates as a numpy array"
1232
- if minor :
1233
- return self .minor .locator ()
1234
- return self .major .locator ()
1242
+ """Get the array of tick locations in data coordinates."""
1243
+ return self .get_minorticklocs () if minor else self .get_majorticklocs ()
1235
1244
1236
1245
def get_ticks_direction (self , minor = False ):
1237
1246
"""
0 commit comments