@@ -323,11 +323,17 @@ def update_position(self, loc):
323323 self .tick2line ._marker ._transform = trans
324324
325325 if not _is_full_circle_deg (axes .get_thetamin (), axes .get_thetamax ()):
326- angle = np .rad2deg (angle ) + self ._labelrotation
327- if self .label1On :
328- self .label1 .set_rotation (angle )
329- if self .label2On :
330- self .label2 .set_rotation (angle )
326+ if angle > np .pi / 2 :
327+ angle -= np .pi
328+ elif angle < - np .pi / 2 :
329+ angle += np .pi
330+ else :
331+ angle = 0
332+ angle = np .rad2deg (angle ) + self ._labelrotation
333+ if self .label1On :
334+ self .label1 .set_rotation (angle )
335+ if self .label2On :
336+ self .label2 .set_rotation (angle )
331337
332338 # This extra padding helps preserve the look from previous releases but
333339 # is also needed because labels are anchored to their center.
@@ -495,6 +501,18 @@ def _get_text2(self):
495501 t .set_rotation_mode ('anchor' )
496502 return t
497503
504+ def _determine_anchor (self , angle , start ):
505+ if start :
506+ if - 90 <= angle <= 90 :
507+ return 'left' , 'center'
508+ else :
509+ return 'right' , 'center'
510+ else :
511+ if - 90 <= angle <= 90 :
512+ return 'right' , 'center'
513+ else :
514+ return 'left' , 'center'
515+
498516 def update_position (self , loc ):
499517 super (RadialTick , self ).update_position (loc )
500518 axes = self .axes
@@ -506,16 +524,31 @@ def update_position(self, loc):
506524 full = _is_full_circle_deg (thetamin , thetamax )
507525
508526 if full :
509- angle = 0
510- tick_angle = np .deg2rad (angle )
527+ angle = axes .get_rlabel_position ()
528+ tick_angle = 0
529+ text_angle = 0
511530 else :
512531 angle = thetamin * direction + offset - 90
513532 if direction > 0 :
514533 tick_angle = np .deg2rad (angle )
515534 else :
516535 tick_angle = np .deg2rad (angle + 180 )
536+ if angle > 90 :
537+ text_angle = angle - 180
538+ elif angle < - 90 :
539+ text_angle = angle + 180
540+ else :
541+ text_angle = angle
542+ text_angle += self ._labelrotation
517543 if self .label1On :
518- self .label1 .set_rotation (angle + self ._labelrotation )
544+ if full :
545+ ha = 'left'
546+ va = 'bottom'
547+ else :
548+ ha , va = self ._determine_anchor (angle , True )
549+ self .label1 .set_ha (ha )
550+ self .label1 .set_va (va )
551+ self .label1 .set_rotation (text_angle )
519552 if self .tick1On :
520553 marker = self .tick1line .get_marker ()
521554 if marker == mmarkers .TICKLEFT :
@@ -544,8 +577,18 @@ def update_position(self, loc):
544577 tick_angle = np .deg2rad (angle )
545578 else :
546579 tick_angle = np .deg2rad (angle + 180 )
580+ if angle > 90 :
581+ text_angle = angle - 180
582+ elif angle < - 90 :
583+ text_angle = angle + 180
584+ else :
585+ text_angle = angle
586+ text_angle += self ._labelrotation
547587 if self .label2On :
548- self .label2 .set_rotation (angle + self ._labelrotation )
588+ ha , va = self ._determine_anchor (angle , False )
589+ self .label2 .set_ha (ha )
590+ self .label2 .set_va (va )
591+ self .label2 .set_rotation (text_angle )
549592 if self .tick2On :
550593 marker = self .tick2line .get_marker ()
551594 if marker == mmarkers .TICKLEFT :
0 commit comments