@@ -473,6 +473,7 @@ def draw(self, renderer, *args, **kwargs):
473473 if not self .get_visible (): return
474474 renderer .open_group (__name__ )
475475 ticklabelBoxes = []
476+ ticklabelBoxes2 = []
476477
477478 majorTicks = self .get_major_ticks ()
478479 majorLocs = self ._majorLocator ()
@@ -491,8 +492,12 @@ def draw(self, renderer, *args, **kwargs):
491492 tick .set_label1 (label )
492493 tick .set_label2 (label )
493494 tick .draw (renderer )
494- extent = tick .label1 .get_window_extent (renderer )
495- ticklabelBoxes .append (extent )
495+ if tick .label1On :
496+ extent = tick .label1 .get_window_extent (renderer )
497+ ticklabelBoxes .append (extent )
498+ if tick .label2On :
499+ extent = tick .label2 .get_window_extent (renderer )
500+ ticklabelBoxes2 .append (extent )
496501
497502 minorTicks = self .get_minor_ticks ()
498503 minorLocs = self ._minorLocator ()
@@ -508,8 +513,12 @@ def draw(self, renderer, *args, **kwargs):
508513 tick .set_label (label )
509514
510515 tick .draw (renderer )
511- extent = tick .label1 .get_window_extent (renderer )
512- ticklabelBoxes .append (extent )
516+ if tick .label1On :
517+ extent = tick .label1 .get_window_extent (renderer )
518+ ticklabelBoxes .append (extent )
519+ if tick .label2On :
520+ extent = tick .label2 .get_window_extent (renderer )
521+ ticklabelBoxes2 .append (extent )
513522
514523
515524
@@ -519,7 +528,7 @@ def draw(self, renderer, *args, **kwargs):
519528 # the actual bbox
520529
521530
522- self ._update_label_postion (ticklabelBoxes )
531+ self ._update_label_postion (ticklabelBoxes , ticklabelBoxes2 )
523532
524533 self .label .draw (renderer ) # memory leak here, vertical text
525534
@@ -750,25 +759,54 @@ def _get_label(self):
750759 identity_transform () ))
751760
752761 self ._set_artist_props (label )
762+ self .label_position = 'bottom'
753763 return label
754764
765+ def get_label_position (self ):
766+ """
767+ Return the label position (top or bottom)
768+ """
769+ return self .label_position
755770
756- def _update_label_postion (self , bboxes ):
771+ def set_label_position (self , position ):
772+ """
773+ Set the label position (top or bottom)
774+
775+ ACCEPTS: [ 'top' | 'bottom' ]
776+ """
777+ assert position == 'top' or position == 'bottom'
778+ if position == 'top' :
779+ self .label .set_verticalalignment ('bottom' )
780+ else :
781+ self .label .set_verticalalignment ('top' )
782+ self .label_position = position
783+
784+ def _update_label_postion (self , bboxes , bboxes2 ):
757785 """
758786 Update the label position based on the sequence of bounding
759787 boxes of all the ticklabels
760788 """
761789
762790 x ,y = self .label .get_position ()
763- if not len (bboxes ):
764- bottom = self .axes .bbox .ymin ()
791+ if self .label_position == 'bottom' :
792+ if not len (bboxes ):
793+ bottom = self .axes .bbox .ymin ()
794+ else :
795+
796+ bbox = bbox_all (bboxes )
797+ bottom = bbox .ymin ()
798+
799+ self .label .set_position ( (x , bottom - self .LABELPAD * self .figure .dpi .get ()/ 72.0 ))
800+
765801 else :
802+ if not len (bboxes2 ):
803+ top = self .axes .bbox .ymax ()
804+ else :
766805
767- bbox = bbox_all (bboxes )
768- bottom = bbox .ymin ()
806+ bbox = bbox_all (bboxes2 )
807+ top = bbox .ymax ()
769808
770- self .label .set_position ( (x , bottom - self .LABELPAD * self .figure .dpi .get ()/ 72.0 ))
771-
809+ self .label .set_position ( (x , top + self .LABELPAD * self .figure .dpi .get ()/ 72.0 ))
772810
773811 def tick_top (self ):
774812 'use ticks only on top'
@@ -822,24 +860,54 @@ def _get_label(self):
822860 self .axes .transAxes ) )
823861
824862 self ._set_artist_props (label )
863+ self .label_position = 'left'
825864 return label
826865
827- def _update_label_postion (self , bboxes ):
866+ def get_label_position (self ):
867+ """
868+ Return the label position (left or right)
869+ """
870+ return self .label_position
871+
872+ def set_label_position (self , position ):
873+ """
874+ Set the label position (left or right)
875+
876+ ACCEPTS: [ 'left' | 'right' ]
877+ """
878+ assert position == 'left' or position == 'right'
879+ if position == 'right' :
880+ self .label .set_horizontalalignment ('left' )
881+ else :
882+ self .label .set_horizontalalignment ('right' )
883+ self .label_position = position
884+
885+ def _update_label_postion (self , bboxes , bboxes2 ):
828886 """
829887 Update the label position based on the sequence of bounding
830- boxes overlaps of all the ticklabels that overlap the current
831- ticklabel. overlaps are the bounding boxes of the ticklabels
888+ boxes of all the ticklabels
832889 """
833890
834891 x ,y = self .label .get_position ()
835- if not len (bboxes ):
836- left = self .axes .bbox .xmin ()
837- else :
838- bbox = bbox_all (bboxes )
839- left = bbox .xmin ()
840- self .label .set_position ((left - self .figure .dpi .get ()* self .LABELPAD / 72.0 ,y ))
892+ if self .label_position == 'left' :
893+ if not len (bboxes ):
894+ left = self .axes .bbox .xmin ()
895+ else :
841896
897+ bbox = bbox_all (bboxes )
898+ left = bbox .xmin ()
899+
900+ self .label .set_position ( (left - self .LABELPAD * self .figure .dpi .get ()/ 72.0 , y ))
842901
902+ else :
903+ if not len (bboxes2 ):
904+ right = self .axes .bbox .xmax ()
905+ else :
906+
907+ bbox = bbox_all (bboxes2 )
908+ right = bbox .xmax ()
909+
910+ self .label .set_position ( (right + self .LABELPAD * self .figure .dpi .get ()/ 72.0 , y ))
843911
844912 def tick_right (self ):
845913 'use ticks only on right'
0 commit comments