22# Created: 23 Sep 2005
33# Parts rewritten by Reinier Heeres <[email protected] > 44
5+ import inspect
6+
57import numpy as np
68
7- import matplotlib .transforms as mtransforms
89from matplotlib import (
9- artist , lines as mlines , axis as maxis , patches as mpatches , rcParams )
10+ _api , artist , lines as mlines , axis as maxis , patches as mpatches ,
11+ transforms as mtransforms , rcParams )
1012from . import art3d , proj3d
1113
1214
@@ -51,14 +53,34 @@ class Axis(maxis.XAxis):
5153 'color' : (0.925 , 0.925 , 0.925 , 0.5 )},
5254 }
5355
54- def __init__ (self , adir , v_intervalx , d_intervalx , axes , * args ,
55- rotate_label = None , ** kwargs ):
56- # adir identifies which axes this is
57- self .adir = adir
56+ def _old_init (self , adir , v_intervalx , d_intervalx , axes , * args ,
57+ rotate_label = None , ** kwargs ):
58+ return locals ()
59+
60+ def _new_init (self , axes , * , rotate_label = None , ** kwargs ):
61+ return locals ()
62+
63+ def __init__ (self , * args , ** kwargs ):
64+ params = _api .select_matching_signature (
65+ [self ._old_init , self ._new_init ], * args , ** kwargs )
66+ if "adir" in params :
67+ _api .warn_deprecated (
68+ "3.6" , message = f"The signature of 3D Axis constructors has "
69+ f"changed in %(since)s; the new signature is "
70+ f"{ inspect .signature (type (self ).__init__ )} " , pending = True )
71+ if params ["adir" ] != self .axis_name :
72+ raise ValueError (f"Cannot instantiate { type (self ).__name__ } "
73+ f"with adir={ params ['adir' ]!r} " )
74+ axes = params ["axes" ]
75+ rotate_label = params ["rotate_label" ]
76+ args = params .get ("args" , ())
77+ kwargs = params ["kwargs" ]
78+
79+ name = self .axis_name
5880
5981 # This is a temporary member variable.
6082 # Do not depend on this existing in future releases!
61- self ._axinfo = self ._AXINFO [adir ].copy ()
83+ self ._axinfo = self ._AXINFO [name ].copy ()
6284 if rcParams ['_internal.classic_mode' ]:
6385 self ._axinfo .update ({
6486 'label' : {'va' : 'center' , 'ha' : 'center' },
@@ -85,10 +107,10 @@ def __init__(self, adir, v_intervalx, d_intervalx, axes, *args,
85107 'outward_factor' : 0.1 ,
86108 'linewidth' : {
87109 True : ( # major
88- rcParams ['xtick.major.width' ] if adir in 'xz' else
110+ rcParams ['xtick.major.width' ] if name in 'xz' else
89111 rcParams ['ytick.major.width' ]),
90112 False : ( # minor
91- rcParams ['xtick.minor.width' ] if adir in 'xz' else
113+ rcParams ['xtick.minor.width' ] if name in 'xz' else
92114 rcParams ['ytick.minor.width' ]),
93115 }
94116 },
@@ -106,11 +128,18 @@ def __init__(self, adir, v_intervalx, d_intervalx, axes, *args,
106128 super ().__init__ (axes , * args , ** kwargs )
107129
108130 # data and viewing intervals for this direction
109- self .d_interval = d_intervalx
110- self .v_interval = v_intervalx
131+ if "d_intervalx" in params :
132+ self .set_data_interval (* params ["d_intervalx" ])
133+ if "v_intervalx" in params :
134+ self .set_view_interval (* params ["v_intervalx" ])
111135 self .set_rotate_label (rotate_label )
136+ self ._init3d () # Inline after init3d deprecation elapses.
137+
138+ __init__ .__signature__ = inspect .signature (_new_init )
139+ adir = _api .deprecated ("3.6" , pending = True )(
140+ property (lambda self : self .axis_name ))
112141
113- def init3d (self ):
142+ def _init3d (self ):
114143 self .line = mlines .Line2D (
115144 xdata = (0 , 0 ), ydata = (0 , 0 ),
116145 linewidth = self ._axinfo ['axisline' ]['linewidth' ],
@@ -133,6 +162,10 @@ def init3d(self):
133162 self .label ._transform = self .axes .transData
134163 self .offsetText ._transform = self .axes .transData
135164
165+ @_api .deprecated ("3.6" , pending = True )
166+ def init3d (self ): # After deprecation elapses, inline _init3d to __init__.
167+ self ._init3d ()
168+
136169 def get_major_ticks (self , numticks = None ):
137170 ticks = super ().get_major_ticks (numticks )
138171 for t in ticks :
@@ -496,41 +529,34 @@ def get_tightbbox(self, renderer, *, for_layout_only=False):
496529
497530 return mtransforms .Bbox .union ([* bb_1 , * bb_2 , * other ])
498531
499- @property
500- def d_interval (self ):
501- return self .get_data_interval ()
502-
503- @d_interval .setter
504- def d_interval (self , minmax ):
505- self .set_data_interval (* minmax )
506-
507- @property
508- def v_interval (self ):
509- return self .get_view_interval ()
510-
511- @v_interval .setter
512- def v_interval (self , minmax ):
513- self .set_view_interval (* minmax )
514-
515-
516- # Use classes to look at different data limits
532+ d_interval = _api .deprecated (
533+ "3.6" , alternative = "get_data_interval" , pending = True )(
534+ property (lambda self : self .get_data_interval (),
535+ lambda self , minmax : self .set_data_interval (* minmax )))
536+ v_interval = _api .deprecated (
537+ "3.6" , alternative = "get_view_interval" , pending = True )(
538+ property (lambda self : self .get_view_interval (),
539+ lambda self , minmax : self .set_view_interval (* minmax )))
517540
518541
519542class XAxis (Axis ):
543+ axis_name = "x"
520544 get_view_interval , set_view_interval = maxis ._make_getset_interval (
521545 "view" , "xy_viewLim" , "intervalx" )
522546 get_data_interval , set_data_interval = maxis ._make_getset_interval (
523547 "data" , "xy_dataLim" , "intervalx" )
524548
525549
526550class YAxis (Axis ):
551+ axis_name = "y"
527552 get_view_interval , set_view_interval = maxis ._make_getset_interval (
528553 "view" , "xy_viewLim" , "intervaly" )
529554 get_data_interval , set_data_interval = maxis ._make_getset_interval (
530555 "data" , "xy_dataLim" , "intervaly" )
531556
532557
533558class ZAxis (Axis ):
559+ axis_name = "z"
534560 get_view_interval , set_view_interval = maxis ._make_getset_interval (
535561 "view" , "zz_viewLim" , "intervalx" )
536562 get_data_interval , set_data_interval = maxis ._make_getset_interval (
0 commit comments