Skip to content

Commit

Permalink
Add better text anchors for default polar radial ticks.
Browse files Browse the repository at this point in the history
  • Loading branch information
QuLogic committed Nov 29, 2017
1 parent 3b93255 commit 4341f00
Showing 1 changed file with 52 additions and 10 deletions.
62 changes: 52 additions & 10 deletions lib/matplotlib/projections/polar.py
Original file line number Diff line number Diff line change
Expand Up @@ -505,17 +505,59 @@ def _get_text2(self):
t.set_rotation_mode('anchor')
return t

def _determine_anchor(self, angle, start):
if start:
if -90 <= angle <= 90:
return 'left', 'center'
def _determine_anchor(self, mode, angle, start):
# Note: angle is the (spine angle - 90) because it's used for the tick
# & text setup, so all numbers below are -90 from (normed) spine angle.
if mode == 'auto':
if start:
if -90 <= angle <= 90:
return 'left', 'center'
else:
return 'right', 'center'
else:
return 'right', 'center'
if -90 <= angle <= 90:
return 'right', 'center'
else:
return 'left', 'center'
else:
if -90 <= angle <= 90:
return 'right', 'center'
if start:
if angle < -68.5:
return 'center', 'top'
elif angle < -23.5:
return 'left', 'top'
elif angle < 22.5:
return 'left', 'center'
elif angle < 67.5:
return 'left', 'bottom'
elif angle < 112.5:
return 'center', 'bottom'
elif angle < 157.5:
return 'right', 'bottom'
elif angle < 202.5:
return 'right', 'center'
elif angle < 247.5:
return 'right', 'top'
else:
return 'center', 'top'
else:
return 'left', 'center'
if angle < -68.5:
return 'center', 'bottom'
elif angle < -23.5:
return 'right', 'bottom'
elif angle < 22.5:
return 'right', 'center'
elif angle < 67.5:
return 'right', 'top'
elif angle < 112.5:
return 'center', 'top'
elif angle < 157.5:
return 'left', 'top'
elif angle < 202.5:
return 'left', 'center'
elif angle < 247.5:
return 'left', 'bottom'
else:
return 'center', 'bottom'

def update_position(self, loc):
super(RadialTick, self).update_position(loc)
Expand Down Expand Up @@ -559,7 +601,7 @@ def update_position(self, loc):
ha = 'left'
va = 'bottom'
else:
ha, va = self._determine_anchor(angle, direction > 0)
ha, va = self._determine_anchor(mode, angle, direction > 0)
self.label1.set_ha(ha)
self.label1.set_va(va)
self.label1.set_rotation(text_angle)
Expand Down Expand Up @@ -603,7 +645,7 @@ def update_position(self, loc):
else:
text_angle = user_angle
if self.label2On:
ha, va = self._determine_anchor(angle, direction < 0)
ha, va = self._determine_anchor(mode, angle, direction < 0)
self.label2.set_ha(ha)
self.label2.set_va(va)
self.label2.set_rotation(text_angle)
Expand Down

0 comments on commit 4341f00

Please sign in to comment.