@@ -1011,17 +1011,15 @@ def _set_artist_props(self, a):
1011
1011
1012
1012
def iter_ticks (self ):
1013
1013
"""
1014
- Iterate through all of the major and minor ticks.
1014
+ Yield ``(Tick, location, label)`` tuples for major and minor ticks.
1015
1015
"""
1016
- major_locs = self .major .locator ()
1017
- major_ticks = self .get_major_ticks (len (major_locs ))
1016
+ major_locs = self .get_majorticklocs ()
1018
1017
major_labels = self .major .formatter .format_ticks (major_locs )
1019
-
1020
- minor_locs = self .minor .locator ()
1021
- minor_ticks = self .get_minor_ticks (len (minor_locs ))
1022
- minor_labels = self .minor .formatter .format_ticks (minor_locs )
1023
-
1018
+ major_ticks = self .get_major_ticks (len (major_locs ))
1024
1019
yield from zip (major_ticks , major_locs , major_labels )
1020
+ minor_locs = self .get_minorticklocs ()
1021
+ minor_labels = self .minor .formatter .format_ticks (minor_locs )
1022
+ minor_ticks = self .get_minor_ticks (len (minor_locs ))
1025
1023
yield from zip (minor_ticks , minor_locs , minor_labels )
1026
1024
1027
1025
def get_ticklabel_extents (self , renderer ):
@@ -1297,18 +1295,29 @@ def get_ticklines(self, minor=False):
1297
1295
return self .get_majorticklines ()
1298
1296
1299
1297
def get_majorticklocs (self ):
1300
- "Get the major tick locations in data coordinates as a numpy array "
1298
+ """ Get the array of major tick locations in data coordinates."" "
1301
1299
return self .major .locator ()
1302
1300
1303
1301
def get_minorticklocs (self ):
1304
- "Get the minor tick locations in data coordinates as a numpy array"
1305
- return self .minor .locator ()
1302
+ """Get the array of minor tick locations in data coordinates."""
1303
+ # Remove minor ticks duplicating major ticks.
1304
+ major_locs = self .major .locator ()
1305
+ minor_locs = self .minor .locator ()
1306
+ transform = self ._scale .get_transform ()
1307
+ tr_minor_locs = transform .transform (minor_locs )
1308
+ tr_major_locs = transform .transform (major_locs )
1309
+ lo , hi = sorted (transform .transform (self .get_view_interval ()))
1310
+ # Use the transformed view limits as scale. 1e-5 is the default rtol
1311
+ # for np.isclose.
1312
+ tol = (hi - lo ) * 1e-5
1313
+ minor_locs = [
1314
+ loc for loc , tr_loc in zip (minor_locs , tr_minor_locs )
1315
+ if not np .isclose (tr_loc , tr_major_locs , atol = tol , rtol = 0 ).any ()]
1316
+ return minor_locs
1306
1317
1307
1318
def get_ticklocs (self , minor = False ):
1308
- "Get the tick locations in data coordinates as a numpy array"
1309
- if minor :
1310
- return self .minor .locator ()
1311
- return self .major .locator ()
1319
+ """Get the array of tick locations in data coordinates."""
1320
+ return self .get_minorticklocs () if minor else self .get_majorticklocs ()
1312
1321
1313
1322
def get_ticks_direction (self , minor = False ):
1314
1323
"""
0 commit comments