@@ -505,17 +505,59 @@ def _get_text2(self):
505
505
t .set_rotation_mode ('anchor' )
506
506
return t
507
507
508
- def _determine_anchor (self , angle , start ):
509
- if start :
510
- if - 90 <= angle <= 90 :
511
- return 'left' , 'center'
508
+ def _determine_anchor (self , mode , angle , start ):
509
+ # Note: angle is the (spine angle - 90) because it's used for the tick
510
+ # & text setup, so all numbers below are -90 from (normed) spine angle.
511
+ if mode == 'auto' :
512
+ if start :
513
+ if - 90 <= angle <= 90 :
514
+ return 'left' , 'center'
515
+ else :
516
+ return 'right' , 'center'
512
517
else :
513
- return 'right' , 'center'
518
+ if - 90 <= angle <= 90 :
519
+ return 'right' , 'center'
520
+ else :
521
+ return 'left' , 'center'
514
522
else :
515
- if - 90 <= angle <= 90 :
516
- return 'right' , 'center'
523
+ if start :
524
+ if angle < - 68.5 :
525
+ return 'center' , 'top'
526
+ elif angle < - 23.5 :
527
+ return 'left' , 'top'
528
+ elif angle < 22.5 :
529
+ return 'left' , 'center'
530
+ elif angle < 67.5 :
531
+ return 'left' , 'bottom'
532
+ elif angle < 112.5 :
533
+ return 'center' , 'bottom'
534
+ elif angle < 157.5 :
535
+ return 'right' , 'bottom'
536
+ elif angle < 202.5 :
537
+ return 'right' , 'center'
538
+ elif angle < 247.5 :
539
+ return 'right' , 'top'
540
+ else :
541
+ return 'center' , 'top'
517
542
else :
518
- return 'left' , 'center'
543
+ if angle < - 68.5 :
544
+ return 'center' , 'bottom'
545
+ elif angle < - 23.5 :
546
+ return 'right' , 'bottom'
547
+ elif angle < 22.5 :
548
+ return 'right' , 'center'
549
+ elif angle < 67.5 :
550
+ return 'right' , 'top'
551
+ elif angle < 112.5 :
552
+ return 'center' , 'top'
553
+ elif angle < 157.5 :
554
+ return 'left' , 'top'
555
+ elif angle < 202.5 :
556
+ return 'left' , 'center'
557
+ elif angle < 247.5 :
558
+ return 'left' , 'bottom'
559
+ else :
560
+ return 'center' , 'bottom'
519
561
520
562
def update_position (self , loc ):
521
563
super (RadialTick , self ).update_position (loc )
@@ -559,7 +601,7 @@ def update_position(self, loc):
559
601
ha = 'left'
560
602
va = 'bottom'
561
603
else :
562
- ha , va = self ._determine_anchor (angle , direction > 0 )
604
+ ha , va = self ._determine_anchor (mode , angle , direction > 0 )
563
605
self .label1 .set_ha (ha )
564
606
self .label1 .set_va (va )
565
607
self .label1 .set_rotation (text_angle )
@@ -603,7 +645,7 @@ def update_position(self, loc):
603
645
else :
604
646
text_angle = user_angle
605
647
if self .label2On :
606
- ha , va = self ._determine_anchor (angle , direction < 0 )
648
+ ha , va = self ._determine_anchor (mode , angle , direction < 0 )
607
649
self .label2 .set_ha (ha )
608
650
self .label2 .set_va (va )
609
651
self .label2 .set_rotation (text_angle )
0 commit comments