@@ -323,11 +323,17 @@ def update_position(self, loc):
323
323
self .tick2line ._marker ._transform = trans
324
324
325
325
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 )
331
337
332
338
# This extra padding helps preserve the look from previous releases but
333
339
# is also needed because labels are anchored to their center.
@@ -495,6 +501,18 @@ def _get_text2(self):
495
501
t .set_rotation_mode ('anchor' )
496
502
return t
497
503
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
+
498
516
def update_position (self , loc ):
499
517
super (RadialTick , self ).update_position (loc )
500
518
axes = self .axes
@@ -506,16 +524,31 @@ def update_position(self, loc):
506
524
full = _is_full_circle_deg (thetamin , thetamax )
507
525
508
526
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
511
530
else :
512
531
angle = thetamin * direction + offset - 90
513
532
if direction > 0 :
514
533
tick_angle = np .deg2rad (angle )
515
534
else :
516
535
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
517
543
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 )
519
552
if self .tick1On :
520
553
marker = self .tick1line .get_marker ()
521
554
if marker == mmarkers .TICKLEFT :
@@ -544,8 +577,18 @@ def update_position(self, loc):
544
577
tick_angle = np .deg2rad (angle )
545
578
else :
546
579
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
547
587
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 )
549
592
if self .tick2On :
550
593
marker = self .tick2line .get_marker ()
551
594
if marker == mmarkers .TICKLEFT :
0 commit comments