@@ -662,6 +662,29 @@ class Ticker(object):
662
662
formatter = None
663
663
664
664
665
+ class _LazyTickList (object ):
666
+ """
667
+ A descriptor for lazy instantiation of tick lists.
668
+
669
+ See comment above definition of the ``majorTicks`` and ``minorTicks``
670
+ attributes.
671
+ """
672
+
673
+ def __init__ (self , major ):
674
+ self ._major = major
675
+
676
+ def __get__ (self , instance , cls ):
677
+ if instance is None :
678
+ return self
679
+ else :
680
+ if self ._major :
681
+ instance .majorTicks = [instance ._get_tick (major = True )]
682
+ return instance .majorTicks
683
+ else :
684
+ instance .minorTicks = [instance ._get_tick (major = False )]
685
+ return instance .minorTicks
686
+
687
+
665
688
class Axis (artist .Artist ):
666
689
"""
667
690
Public attributes
@@ -696,8 +719,6 @@ def __init__(self, axes, pickradius=15):
696
719
self .label = self ._get_label ()
697
720
self .labelpad = rcParams ['axes.labelpad' ]
698
721
self .offsetText = self ._get_offset_text ()
699
- self .majorTicks = []
700
- self .minorTicks = []
701
722
self .unit_data = None
702
723
self .pickradius = pickradius
703
724
@@ -708,6 +729,12 @@ def __init__(self, axes, pickradius=15):
708
729
self .cla ()
709
730
self ._set_scale ('linear' )
710
731
732
+ # During initialization, Axis objects often create ticks that are later
733
+ # unused; this turns out to be a very slow step. Instead, use a custom
734
+ # descriptor to make the tick lists lazy and instantiate them as needed.
735
+ majorTicks = _LazyTickList (major = True )
736
+ minorTicks = _LazyTickList (major = False )
737
+
711
738
def set_label_coords (self , x , y , transform = None ):
712
739
"""
713
740
Set the coordinates of the label. By default, the x
@@ -798,12 +825,15 @@ def reset_ticks(self):
798
825
799
826
Each list starts with a single fresh Tick.
800
827
"""
801
- del self .majorTicks [:]
802
- del self .minorTicks [:]
803
-
804
- self .majorTicks .extend ([self ._get_tick (major = True )])
805
- self .minorTicks .extend ([self ._get_tick (major = False )])
806
-
828
+ # Restore the lazy tick lists.
829
+ try :
830
+ del self .majorTicks
831
+ except AttributeError :
832
+ pass
833
+ try :
834
+ del self .minorTicks
835
+ except AttributeError :
836
+ pass
807
837
try :
808
838
self .set_clip_path (self .axes .patch )
809
839
except AttributeError :
0 commit comments