Skip to content

Commit 4341f00

Browse files
committed
Add better text anchors for default polar radial ticks.
1 parent 3b93255 commit 4341f00

File tree

1 file changed

+52
-10
lines changed

1 file changed

+52
-10
lines changed

lib/matplotlib/projections/polar.py

Lines changed: 52 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -505,17 +505,59 @@ def _get_text2(self):
505505
t.set_rotation_mode('anchor')
506506
return t
507507

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'
512517
else:
513-
return 'right', 'center'
518+
if -90 <= angle <= 90:
519+
return 'right', 'center'
520+
else:
521+
return 'left', 'center'
514522
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'
517542
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'
519561

520562
def update_position(self, loc):
521563
super(RadialTick, self).update_position(loc)
@@ -559,7 +601,7 @@ def update_position(self, loc):
559601
ha = 'left'
560602
va = 'bottom'
561603
else:
562-
ha, va = self._determine_anchor(angle, direction > 0)
604+
ha, va = self._determine_anchor(mode, angle, direction > 0)
563605
self.label1.set_ha(ha)
564606
self.label1.set_va(va)
565607
self.label1.set_rotation(text_angle)
@@ -603,7 +645,7 @@ def update_position(self, loc):
603645
else:
604646
text_angle = user_angle
605647
if self.label2On:
606-
ha, va = self._determine_anchor(angle, direction < 0)
648+
ha, va = self._determine_anchor(mode, angle, direction < 0)
607649
self.label2.set_ha(ha)
608650
self.label2.set_va(va)
609651
self.label2.set_rotation(text_angle)

0 commit comments

Comments
 (0)