@@ -635,6 +635,9 @@ class Axis(martist.Artist):
635635 The minor ticks.
636636 """
637637 OFFSETTEXTPAD = 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
639642 def __str__ (self ):
640643 return "{}({},{})" .format (
@@ -1437,7 +1440,12 @@ def get_ticks_direction(self, minor=False):
14371440
14381441 def _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
14421450 def _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'
21352143 axis_name = 'x' #: Read-only name identifying the axis.
2144+ _tick_class = XTick
21362145
21372146 def __init__ (self , * args , ** kwargs ):
21382147 super ().__init__ (* args , ** kwargs )
@@ -2173,13 +2182,6 @@ def contains(self, mouseevent):
21732182 t < y < t + self .pickradius )
21742183 return 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-
21832185 def 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'
23912393 axis_name = 'y' #: Read-only name identifying the axis.
2394+ _tick_class = YTick
23922395
23932396 def __init__ (self , * args , ** kwargs ):
23942397 super ().__init__ (* args , ** kwargs )
@@ -2431,13 +2434,6 @@ def contains(self, mouseevent):
24312434 r < x < r + self .pickradius )
24322435 return 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-
24412437 def set_label_position (self , position ):
24422438 """
24432439 Set the label position (left or right)
0 commit comments