10000 Merge pull request #4904 from jrevans/issue03 · matplotlib/matplotlib@72b0a92 · GitHub
[go: up one dir, main page]

Skip to content

Commit 72b0a92

Browse files
committed
Merge pull request #4904 from jrevans/issue03
API : Text.get_position now preserves units
2 parents 6858a9f + 9cb2946 commit 72b0a92

File tree

2 files changed

+37
-10
lines changed

2 files changed

+37
-10
lines changed
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Preserve units with Text position
2+
`````````````````````````````````
3+
4+
Previously the 'get_position' method on Text would strip away unit information
5+
even though the units were still present. There was no inherent need to do
6+
this, so it has been changed so that unit data (if present) will be preserved.
7+
Essentially a call to 'get_position' will return the exact value from a call to
8+
'set_position'.
9+
10+
If you wish to get the old behaviour, then you can use the new method called
11+
'get_unitless_position'.

lib/matplotlib/text.py

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def contains(self, mouseevent):
280280

281281
def _get_xy_display(self):
282282
'get the (possibly unit converted) transformed x, y in display coords'
283-
x, y = self.get_position()
283+
x, y = self.get_unitless_position()
284284
return self.get_transform().transform_point((x, y))
285285

286286
def _get_multialignment(self):
@@ -536,8 +536,8 @@ def update_bbox_position_size(self, renderer):
536536

537537
trans = self.get_transform()
538538

539-
# don't use self.get_position here, which refers to text position
540-
# in Text, and dash position in TextWithDash:
539+
# don't use self.get_unitless_position here, which refers to text
540+
# position in Text, and dash position in TextWithDash:
541541
posx = float(self.convert_xunits(self._x))
542542
posy = float(self.convert_yunits(self._y))
543543

@@ -877,12 +877,20 @@ def get_horizontalalignment(self):
877877
"""
878878
return self._horizontalalignment
879879

880-
def get_position(self):
881-
"Return the position of the text as a tuple (*x*, *y*)"
880+
def get_unitless_position(self):
881+
"Return the unitless position of the text as a tuple (*x*, *y*)"
882+
# This will get the position with all unit information stripped away.
883+
# This is here for convienience since it is done in several locations.
882884
x = float(self.convert_xunits(self._x))
883885
y = float(self.convert_yunits(self._y))
884886
return x, y
885887

888+
def get_position(self):
889+
"Return the position of the text as a tuple (*x*, *y*)"
890+
# This should return the same data (possible unitized) as was
891+
# specified with 'set_x' and 'set_y'.
892+
return self._x, self._y
893+
886894
def get_prop_tup(self):
887895
"""
888896
Return a hashable tuple of properties.
@@ -891,7 +899,7 @@ def get_prop_tup(self):
891899
want to cache derived information about text (e.g., layouts) and
892900
need to know if the text has changed.
893901
"""
894-
x, y = self.get_position()
902+
x, y = self.get_unitless_position()
895903
return (x, y, self.get_text(), self._color,
896904
self._verticalalignment, self._horizontalalignment,
897905
hash(self._fontproperties),
@@ -950,7 +958,7 @@ def get_window_extent(self, renderer=None, dpi=None):
950958
raise RuntimeError('Cannot get window extent w/o renderer')
951959

952960
bbox, info, descent = self._get_layout(self._renderer)
953-
x, y = self.get_position()
961+
x, y = self.get_unitless_position()
954962
x, y = self.get_transform().transform_point((x, y))
955963
bbox = bbox.translated(x, y)
956964
if dpi is not None:
@@ -1365,12 +1373,20 @@ def __init__(self,
13651373

13661374
#self.set_bbox(dict(pad=0))
13671375

1368-
def get_position(self):
1369-
"Return the position of the text as a tuple (*x*, *y*)"
1376+
def get_unitless_position(self):
1377+
"Return the unitless position of the text as a tuple (*x*, *y*)"
1378+
# This will get the position with all unit information stripped away.
1379+
# This is here for convienience since it is done in several locations.
13701380
x = float(self.convert_xunits(self._dashx))
13711381
y = float(self.convert_yunits(self._dashy))
13721382
return x, y
13731383

1384+
def get_position(self):
1385+
"Return the position of the text as a tuple (*x*, *y*)"
1386+
# This should return the same data (possibly unitized) as was
1387+
# specified with set_x and set_y
1388+
return self._dashx, self._dashy
1389+
13741390
def get_prop_tup(self):
13751391
"""
13761392
Return a hashable tuple of properties.
@@ -1402,7 +1418,7 @@ def update_coords(self, renderer):
14021418
with respect to the actual canvas's coordinates we need to map
14031419
back and forth.
14041420
"""
1405-
dashx, dashy = self.get_position()
1421+
dashx, dashy = self.get_unitless_position()
14061422
dashlength = self.get_dashlength()
14071423
# Shortcircuit this process if we don't have a dash
14081424
if dashlength == 0.0:

0 commit comments

Comments
 (0)
0