2
2
# Created: 23 Sep 2005
3
3
# Parts rewritten by Reinier Heeres <reinier@heeres.eu>
4
4
5
+ import inspect
6
+
5
7
import numpy as np
6
8
7
- import matplotlib .transforms as mtransforms
8
9
from 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 )
10
12
from . import art3d , proj3d
11
13
12
14
@@ -51,14 +53,34 @@ class Axis(maxis.XAxis):
51
53
'color' : (0.925 , 0.925 , 0.925 , 0.5 )},
52
54
}
53
55
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
58
80
59
81
# This is a temporary member variable.
60
82
# Do not depend on this existing in future releases!
61
- self ._axinfo = self ._AXINFO [adir ].copy ()
83
+ self ._axinfo = self ._AXINFO [name ].copy ()
62
84
if rcParams ['_internal.classic_mode' ]:
63
85
self ._axinfo .update ({
64
86
'label' : {'va' : 'center' , 'ha' : 'center' },
@@ -85,10 +107,10 @@ def __init__(self, adir, v_intervalx, d_intervalx, axes, *args,
85
107
'outward_factor' : 0.1 ,
86
108
'linewidth' : {
87
109
True : ( # major
88
- rcParams ['xtick.major.width' ] if adir in 'xz' else
110
+ rcParams ['xtick.major.width' ] if name in 'xz' else
89
111
rcParams ['ytick.major.width' ]),
90
112
False : ( # minor
91
- rcParams ['xtick.minor.width' ] if adir in 'xz' else
113
+ rcParams ['xtick.minor.width' ] if name in 'xz' else
92
114
rcParams ['ytick.minor.width' ]),
93
115
}
94
116
},
@@ -106,11 +128,18 @@ def __init__(self, adir, v_intervalx, d_intervalx, axes, *args,
106
128
super ().__init__ (axes , * args , ** kwargs )
107
129
108
130
# 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" ])
111
135
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 ))
112
141
113
- def init3d (self ):
142
+ def _init3d (self ):
114
143
self .line = mlines .Line2D (
115
144
xdata = (0 , 0 ), ydata = (0 , 0 ),
116
145
linewidth = self ._axinfo ['axisline' ]['linewidth' ],
@@ -133,6 +162,10 @@ def init3d(self):
133
162
self .label ._transform = self .axes .transData
134
163
self .offsetText ._transform = self .axes .transData
135
164
165
+ @_api .deprecated ("3.6" , pending = True )
166
+ def init3d (self ): # After deprecation elapses, inline _init3d to __init__.
167
+ self ._init3d ()
168
+
136
169
def get_major_ticks (self , numticks = None ):
137
170
ticks = super ().get_major_ticks (numticks )
138
171
for t in ticks :
@@ -496,41 +529,34 @@ def get_tightbbox(self, renderer, *, for_layout_only=False):
496
529
497
530
return mtransforms .Bbox .union ([* bb_1 , * bb_2 , * other ])
498
531
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 )))
517
540
518
541
519
542
class XAxis (Axis ):
543
+ axis_name = "x"
520
544
get_view_interval , set_view_interval = maxis ._make_getset_interval (
521
545
"view" , "xy_viewLim" , "intervalx" )
522
546
get_data_interval , set_data_interval = maxis ._make_getset_interval (
523
547
"data" , "xy_dataLim" , "intervalx" )
524
548
525
549
526
550
class YAxis (Axis ):
551
+ axis_name = "y"
527
552
get_view_interval , set_view_interval = maxis ._make_getset_interval (
528
553
"view" , "xy_viewLim" , "intervaly" )
529
554
get_data_interval , set_data_interval = maxis ._make_getset_interval (
530
555
"data" , "xy_dataLim" , "intervaly" )
531
556
532
557
533
558
class ZAxis (Axis ):
559
+ axis_name = "z"
534
560
get_view_interval , set_view_interval = maxis ._make_getset_interval (
535
561
"view" , "zz_viewLim" , "intervalx" )
536
562
get_data_interval , set_data_interval = maxis ._make_getset_interval (
0 commit comments