@@ -635,6 +635,9 @@ class Axis(martist.Artist):
635635 The minor ticks.
636636 """
637637OFFSETTEXTPAD = 3
638+ # The class used in _get_tick() to create tick instances. Must either be
639+ # overwritten in subclasses, or subclasses must reimplement _get_tick().
640+ _tick_class = None
638641
639642def __str__ (self ):
640643return "{}({},{})" .format (
@@ -1437,7 +1440,12 @@ def get_ticks_direction(self, minor=False):
14371440
14381441def _get_tick (self ,major ):
14391442"""Return the default tick instance."""
1440- raise NotImplementedError ('derived must override' )
1443+ if self ._tick_class is None :
1444+ raise NotImplementedError (
1445+ f"The Axis subclass{ self .__class__ .__name__ } must define "
1446+ "_tick_class or reimplement _get_tick()" )
1447+ tick_kw = self ._major_tick_kw if major else self ._minor_tick_kw
1448+ return self ._tick_class (self .axes ,0 ,major = major ,** tick_kw )
14411449
14421450def _get_tick_label_size (self ,axis_name ):
14431451"""
@@ -2133,6 +2141,7 @@ def setter(self, vmin, vmax, ignore=False):
21332141class XAxis (Axis ):
21342142__name__ = 'xaxis'
21352143axis_name = 'x' #: Read-only name identifying the axis.
2144+ _tick_class = XTick
21362145
21372146def __init__ (self ,* args ,** kwargs ):
21382147super ().__init__ (* args ,** kwargs )
@@ -2173,13 +2182,6 @@ def contains(self, mouseevent):
21732182t < y < t + self .pickradius )
21742183return inaxis , {}
21752184
2176- def _get_tick (self ,major ):
2177- if major :
2178- tick_kw = self ._major_tick_kw
2179- else :
2180- tick_kw = self ._minor_tick_kw
2181- return XTick (self .axes ,0 ,major = major ,** tick_kw )
2182-
21832185def set_label_position (self ,position ):
21842186"""
21852187 Set the label position (top or bottom)
@@ -2389,6 +2391,7 @@ def get_tick_space(self):
23892391class YAxis (Axis ):
23902392__name__ = 'yaxis'
23912393axis_name = 'y' #: Read-only name identifying the axis.
2394+ _tick_class = YTick
23922395
23932396def __init__ (self ,* args ,** kwargs ):
23942397super ().__init__ (* args ,** kwargs )
@@ -2431,13 +2434,6 @@ def contains(self, mouseevent):
24312434r < x < r + self .pickradius )
24322435return inaxis , {}
24332436
2434- def _get_tick (self ,major ):
2435- if major :
2436- tick_kw = self ._major_tick_kw
2437- else :
2438- tick_kw = self ._minor_tick_kw
2439- return YTick (self .axes ,0 ,major = major ,** tick_kw )
2440-
24412437def set_label_position (self ,position ):
24422438"""
24432439 Set the label position (left or right)