@@ -130,11 +130,11 @@ def set_pad(self, val):
130
130
131
131
ACCEPTS: float
132
132
"""
133
- self ._pad . set ( val )
133
+ self ._pad = val
134
134
135
135
def get_pad (self , val ):
136
136
'Get the value of the tick label pad in points'
137
- return self ._pad . get ()
137
+ return self ._pad
138
138
139
139
def _get_text1 (self ):
140
140
'Get the default Text 1 instance'
@@ -578,50 +578,74 @@ def _set_artist_props(self, a):
578
578
if a is None : return
579
579
a .set_figure (self .figure )
580
580
581
- def draw (self , renderer , * args , ** kwargs ):
582
- 'Draw the axis lines, grid lines, tick lines and labels'
583
- if not self .get_visible (): return
584
- renderer .open_group (__name__ )
585
- ticklabelBoxes = []
586
- ticklabelBoxes2 = []
587
-
581
+ def iter_ticks (self ):
582
+ """
583
+ Iterate through all of the major and minor ticks.
584
+ """
588
585
majorLocs = self .major .locator ()
589
586
majorTicks = self .get_major_ticks (len (majorLocs ))
590
587
self .major .formatter .set_locs (majorLocs )
591
588
majorLabels = [self .major .formatter (val , i ) for i , val in enumerate (majorLocs )]
592
589
590
+ minorLocs = self .minor .locator ()
591
+ minorTicks = self .get_minor_ticks (len (minorLocs ))
592
+ self .minor .formatter .set_locs (minorLocs )
593
+ minorLabels = [self .minor .formatter (val , i ) for i , val in enumerate (minorLocs )]
594
+
595
+ major_minor = [
596
+ (majorTicks , majorLocs , majorLabels ),
597
+ (minorTicks , minorLocs , minorLabels )]
593
598
594
- seen = {}
599
+ for group in major_minor :
600
+ for tick in zip (* group ):
601
+ yield tick
602
+
603
+ def get_ticklabel_extents (self , renderer ):
604
+ """
605
+ Get the extents of the tick labels on either side
606
+ of the axes.
607
+ """
608
+ ticklabelBoxes = []
609
+ ticklabelBoxes2 = []
595
610
596
611
interval = self .get_view_interval ()
597
- for tick , loc , label in zip ( majorTicks , majorLocs , majorLabels ):
612
+ for tick , loc , label in self . iter_ticks ( ):
598
613
if tick is None : continue
599
614
if not interval_contains (interval , loc ): continue
600
- seen [loc ] = 1
601
615
tick .update_position (loc )
602
616
tick .set_label1 (label )
603
617
tick .set_label2 (label )
604
- tick .draw (renderer )
605
618
if tick .label1On and tick .label1 .get_visible ():
606
619
extent = tick .label1 .get_window_extent (renderer )
607
620
ticklabelBoxes .append (extent )
608
621
if tick .label2On and tick .label2 .get_visible ():
609
622
extent = tick .label2 .get_window_extent (renderer )
610
623
ticklabelBoxes2 .append (extent )
611
624
612
- minorLocs = self .minor .locator ()
613
- minorTicks = self .get_minor_ticks (len (minorLocs ))
614
- self .minor .formatter .set_locs (minorLocs )
615
- minorLabels = [self .minor .formatter (val , i ) for i , val in enumerate (minorLocs )]
625
+ if len (ticklabelBoxes ):
626
+ bbox = Bbox .union (ticklabelBoxes )
627
+ else :
628
+ bbox = Bbox .from_extents (0 , 0 , 0 , 0 )
629
+ if len (ticklabelBoxes2 ):
630
+ bbox2 = Bbox .union (ticklabelBoxes2 )
631
+ else :
632
+ bbox2 = Bbox .from_extents (0 , 0 , 0 , 0 )
633
+ return bbox , bbox2
616
634
617
- for tick , loc , label in zip (minorTicks , minorLocs , minorLabels ):
635
+ def draw (self , renderer , * args , ** kwargs ):
636
+ 'Draw the axis lines, grid lines, tick lines and labels'
637
+ ticklabelBoxes = []
638
+ ticklabelBoxes2 = []
639
+
640
+ if not self .get_visible (): return
641
+ renderer .open_group (__name__ )
642
+ interval = self .get_view_interval ()
643
+ for tick , loc , label in self .iter_ticks ():
618
644
if tick is None : continue
619
645
if not interval_contains (interval , loc ): continue
620
- #if seen.has_key(loc): continue
621
646
tick .update_position (loc )
622
647
tick .set_label1 (label )
623
648
tick .set_label2 (label )
624
-
625
649
tick .draw (renderer )
626
650
if tick .label1On and tick .label1 .get_visible ():
627
651
extent = tick .label1 .get_window_extent (renderer )
@@ -1142,6 +1166,28 @@ def _update_offset_text_position(self, bboxes, bboxes2):
1142
1166
bottom = bbox .y0
1143
1167
self .offsetText .set_position ((x , bottom - self .OFFSETTEXTPAD * self .figure .dpi / 72.0 ))
1144
1168
1169
+ def get_text_heights (self , renderer ):
1170
+ """
1171
+ Returns the amount of space one should reserve for text
1172
+ above and below the axes. Returns a tuple (above, below)
1173
+ """
1174
+ bbox , bbox2 = self .get_ticklabel_extents (renderer )
1175
+ # MGDTODO: Need a better way to get the pad
1176
+ padPixels = self .majorTicks [0 ]._padPixels
1177
+
1178
+ above = 0.0
1179
+ if bbox2 .height :
1180
+ above += bbox2 .height + padPixels
1181
+ below = 0.0
1182
+ if bbox .height :
1183
+ below += bbox .height + padPixels
1184
+
1185
+ if self .get_label_position () == 'top' :
1186
+ above += self .label .get_window_extent (renderer ).height + padPixels
1187
+ else :
1188
+ below += self .label .get_window_extent (renderer ).height + padPixels
1189
+ return above , below
1190
+
1145
1191
def set_ticks_position (self , position ):
1146
1192
"""
1147
1193
Set the ticks position (top, bottom, both, default or none)
@@ -1360,6 +1406,24 @@ def set_offset_position(self, position):
1360
1406
self .offsetText .set_ha (position )
1361
1407
self .offsetText .set_position ((x ,y ))
1362
1408
1409
+ def get_text_widths (self , renderer ):
1410
+ bbox , bbox2 = self .get_ticklabel_extents (renderer )
1411
+ # MGDTODO: Need a better way to get the pad
1412
+ padPixels = self .majorTicks [0 ]._padPixels
1413
+
1414
+ left = 0.0
1415
+ if bbox .width :
1416
+ left += bbox .width + padPixels
1417
+ right = 0.0
1418
+ if bbox2 .width :
1419
+ right += bbox2 .width + padPixels
1420
+
1421
+ if self .get_label_position () == 'left' :
1422
+ left += self .label .get_window_extent (renderer ).width + padPixels
1423
+ else :
1424
+ right += self .label .get_window_extent (renderer ).width + padPixels
1425
+ return left , right
1426
+
1363
1427
def set_ticks_position (self , position ):
1364
1428
"""
1365
1429
Set the ticks position (left, right, both or default)
0 commit comments