Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 432d9d8

Browse files
committed
Merge pull request #2549 from joferkington/add-rlabel-position
Add methods to control theta position of r-ticklabels on polar plots
2 parents 5b082a5 + d3be7d9 commit 432d9d8

File tree

6 files changed

+1310
-11
lines changed

6 files changed

+1310
-11
lines changed

CHANGELOG

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2013-10-27 Added get_rlabel_position and set_rlabel_position methods to
2+
PolarAxes to control angular position of radial tick labels.
3+
14
2013-10-06 Add stride-based functions to mlab for easy creation of 2D arrays
25
with less memory.
36

lib/matplotlib/projections/polar.py

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ def __init__(self, *args, **kwargs):
234234
self.resolution = kwargs.pop('resolution', 1)
235235
self._default_theta_offset = kwargs.pop('theta_offset', 0)
236236
self._default_theta_direction = kwargs.pop('theta_direction', 1)
237+
self._default_rlabel_position = kwargs.pop('rlabel_position', 22.5)
237238

238239
if self.resolution not in (None, 1):
239240
warnings.warn(
@@ -324,7 +325,7 @@ def _set_lim_and_transforms(self):
324325
self.transData)
325326
# The r-axis labels are put at an angle and padded in the r-direction
326327
self._r_label_position = ScaledTranslation(
327-
22.5, 0.0, Affine2D())
328+
self._default_rlabel_position, 0.0, Affine2D())
328329
self._yaxis_text_transform = (
329330
self._r_label_position +
330331
Affine2D().scale(1.0 / 360.0, 1.0) +
@@ -346,7 +347,7 @@ def get_yaxis_transform(self,which='grid'):
346347
return self._yaxis_transform
347348

348349
def get_yaxis_text1_transform(self, pad):
349-
angle = self._r_label_position.to_values()[4]
350+
angle = self.get_rlabel_position()
350351
if angle < 90.:
351352
return self._yaxis_text_transform, 'bottom', 'left'
352353
elif angle < 180.:
@@ -357,7 +358,7 @@ def get_yaxis_text1_transform(self, pad):
357358
return self._yaxis_text_transform, 'top', 'left'
358359

359360
def get_yaxis_text2_transform(self, pad):
360-
angle = self._r_label_position.to_values()[4]
361+
angle = self.get_rlabel_position()
361362
if angle < 90.:
362363
return self._yaxis_text_transform, 'top', 'right'
363364
elif angle < 180.:
@@ -454,6 +455,26 @@ def set_rlim(self, *args, **kwargs):
454455
kwargs['ymax'] = kwargs.pop('rmax')
455456
return self.set_ylim(*args, **kwargs)
456457

458+
def get_rlabel_position(self):
459+
"""
460+
Returns
461+
-------
462+
float
463+
The theta position of the radius labels in degrees.
464+
"""
465+
return self._r_label_position.to_values()[4]
466+
467+
def set_rlabel_position(self, value):
468+
"""Updates the theta position of the radius labels.
469+
470+
Parameters
471+
----------
472+
value : number
473+
The angular position of the radius labels in degrees.
474+
"""
475+
self._r_label_position._t = (value, 0.0)
476+
self._r_label_position.invalidate()
477+
457478
def set_yscale(self, *args, **kwargs):
458479
Axes.set_yscale(self, *args, **kwargs)
459480
self.yaxis.set_major_locator(
@@ -543,9 +564,8 @@ def set_rgrids(self, radii, labels=None, angle=None, fmt=None,
543564
elif fmt is not None:
544565
self.yaxis.set_major_formatter(FormatStrFormatter(fmt))
545566
if angle is None:
546-
angle = self._r_label_position.to_values()[4]
547-
self._r_label_position._t = (angle, 0.0)
548-
self._r_label_position.invalidate()
567+
angle = self.get_rlabel_position()
568+
self.set_rlabel_position(angle)
549569
for t in self.yaxis.get_ticklabels():
550570
t.update(kwargs)
551571
return self.yaxis.get_gridlines(), self.yaxis.get_ticklabels()
@@ -597,7 +617,7 @@ def can_pan(self) :
597617
return True
598618

599619
def start_pan(self, x, y, button):
600-
angle = np.deg2rad(self._r_label_position.to_values()[4])
620+
angle = np.deg2rad(self.get_rlabel_position())
601621
mode = ''
602622
if button == 1:
603623
epsilon = np.pi / 45.0
@@ -611,7 +631,7 @@ def start_pan(self, x, y, button):
611631
rmax = self.get_rmax(),
612632
trans = self.transData.frozen(),
613633
trans_inverse = self.transData.inverted().frozen(),
614-
r_label_angle = self._r_label_position.to_values()[4],
634+
r_label_angle = self.get_rlabel_position(),
615635
x = x,
616636
y = y,
617637
mode = mode
@@ -635,9 +655,7 @@ def drag_pan(self, button, key, x, y):
635655
else:
636656
dt = dt0 * -1.0
637657
dt = (dt / np.pi) * 180.0
638-
639-
self._r_label_position._t = (p.r_label_angle - dt, 0.0)
640-
self._r_label_position.invalidate()
658+
self.set_rlabel_position(p.r_label_angle - dt)
641659

642660
trans, vert1, horiz1 = self.get_yaxis_text1_transform(0.0)
643661
trans, vert2, horiz2 = self.get_yaxis_text2_transform(0.0)
Binary file not shown.

0 commit comments

Comments
 (0)