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

Skip to content

Commit 634c7bc

Browse files
committed
Second pass, using a stateful transform tree.
svn path=/branches/transforms/; revision=3835
1 parent 0216dd2 commit 634c7bc

13 files changed

Lines changed: 511 additions & 341 deletions

File tree

lib/matplotlib/affine.py

Lines changed: 421 additions & 84 deletions
Large diffs are not rendered by default.

lib/matplotlib/artist.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,6 @@ def set_transform(self, t):
138138
139139
ACCEPTS: a matplotlib.transform transformation instance
140140
"""
141-
print "set_transform", t
142141
self._transform = t
143142
self._transformSet = True
144143
self.pchanged()

lib/matplotlib/axes.py

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from matplotlib import affine as maffine
1313
from matplotlib import agg
1414
from matplotlib import axis as maxis
15-
from matplotlib import bbox as mbbox
1615
from matplotlib import cbook
1716
from matplotlib import collections as mcoll
1817
from matplotlib import colors as mcolors
@@ -33,7 +32,6 @@
3332

3433
iterable = cbook.iterable
3534
is_string_like = cbook.is_string_like
36-
Wrapper = cbook.Wrapper
3735

3836

3937
def delete_masked_points(*args):
@@ -484,8 +482,8 @@ def __init__(self, fig, rect,
484482
485483
"""
486484
martist.Artist.__init__(self)
487-
self._position = rect
488-
self._originalPosition = rect
485+
self._position = maffine.Bbox.from_lbwh(*rect)
486+
self._originalPosition = self._position.copy()
489487
self.set_axes(self)
490488
self.set_aspect('auto')
491489
self.set_adjustable('box')
@@ -615,19 +613,19 @@ def set_figure(self, fig):
615613
"""
616614
martist.Artist.set_figure(self, fig)
617615

618-
l, b, w, h = self._position
619-
xmin = fig.bbox.xmin()
620-
xmax = fig.bbox.xmax()
621-
ymin = fig.bbox.ymin()
622-
ymax = fig.bbox.ymax()
616+
l, b, w, h = self._position.get_bounds()
617+
xmin = fig.bbox.xmin
618+
xmax = fig.bbox.xmax
619+
ymin = fig.bbox.ymin
620+
ymax = fig.bbox.ymax
623621
figw = xmax-xmin
624622
figh = ymax-ymin
625623
self.left = l*figw
626624
self.bottom = b*figh
627625
self.right = (l+w)*figw
628626
self.top = (b+h)*figh
629627

630-
self.bbox = mbbox.Bbox.from_lbrt(
628+
self.bbox = maffine.Bbox.from_lbrt(
631629
self.left, self.bottom,
632630
self.right, self.top,
633631
)
@@ -639,7 +637,7 @@ def _set_lim_and_transforms(self):
639637
set the dataLim and viewLim BBox attributes and the
640638
transData and transAxes Transformation attributes
641639
"""
642-
Bbox = mbbox.Bbox
640+
Bbox = maffine.Bbox
643641
if self._sharex is not None:
644642
left = self._sharex.viewLim.xmin()
645643
right = self._sharex.viewLim.xmax()
@@ -655,11 +653,12 @@ def _set_lim_and_transforms(self):
655653

656654
self.viewLim = Bbox.from_lbrt(left, bottom, right, top)
657655
self.dataLim = Bbox.unit()
656+
self.dataLim.track = True
658657

659-
self.transData = maffine.get_bbox_transform(
658+
self.transData = maffine.BboxTransform(
660659
self.viewLim, self.bbox)
661-
self.transAxes = maffine.get_bbox_transform(
662-
self.dataLim, self.bbox)
660+
self.transAxes = maffine.BboxTransform(
661+
Bbox.unit(), self.bbox)
663662

664663
print "_set_lim_and_transforms", self.viewLim, self.transData, self.dataLim, self.transAxes, self.bbox
665664

@@ -1184,9 +1183,8 @@ def update_datalim_numerix(self, x, y):
11841183
# MGDTODO
11851184
## self.dataLim.update_numerix(x, y, -1)
11861185
print "update_datalim_numerix", self.dataLim,
1187-
self.dataLim = mbbox.Bbox.from_data(x, y)
1186+
self.dataLim.update_from_data(x, y)
11881187
print self.dataLim
1189-
# MGDTODO side-effects
11901188

11911189
def _get_verts_in_data_coords(self, trans, xys):
11921190
if trans == self.transData:
@@ -1247,7 +1245,7 @@ def autoscale_view(self, tight=False, scalex=True, scaley=True):
12471245
axis direction reversal that has already been done.
12481246
"""
12491247
# if image data only just use the datalim
1250-
print "autoscale_view"
1248+
print "autoscale_view", self._autoscaleon, scalex, scaley
12511249

12521250
if not self._autoscaleon: return
12531251
if (tight or (len(self.images)>0 and
@@ -1504,7 +1502,7 @@ def set_axis_bgcolor(self, color):
15041502

15051503
def get_xlim(self):
15061504
'Get the x axis range [xmin, xmax]'
1507-
return self.viewLim.intervalx().get_bounds()
1505+
return self.viewLim.intervalx
15081506

15091507

15101508
def set_xlim(self, xmin=None, xmax=None, emit=True, **kwargs):
@@ -1549,12 +1547,10 @@ def set_xlim(self, xmin=None, xmax=None, emit=True, **kwargs):
15491547
# and min(xmin, xmax)<=0):
15501548
# raise ValueError('Cannot set nonpositive limits with log transform')
15511549

1552-
xmin, xmax = mbbox.nonsingular(xmin, xmax, increasing=False)
1550+
xmin, xmax = maffine.nonsingular(xmin, xmax, increasing=False)
15531551

1554-
# MGDTODO: This is fairly cumbersome
1555-
# MGDTODO: side-effects on x-bounds should propagate
1556-
self.viewLim = mbbox.Bbox.from_lbrt(xmin, self.viewLim.ymin(), xmax, self.viewLim.ymax())
1557-
print 'set_xlim', self.viewLim
1552+
self.viewLim.intervalx = (xmin, xmax)
1553+
print 'set_xlim', self.viewLim, xmin, xmax
15581554

15591555
return xmin, xmax
15601556

@@ -1634,7 +1630,7 @@ def set_xticklabels(self, labels, fontdict=None, **kwargs):
16341630

16351631
def get_ylim(self):
16361632
'Get the y axis range [ymin, ymax]'
1637-
return self.viewLim.intervaly().get_bounds()
1633+
return self.viewLim.intervaly
16381634

16391635
def set_ylim(self, ymin=None, ymax=None, emit=True, **kwargs):
16401636
"""
@@ -1677,9 +1673,8 @@ def set_ylim(self, ymin=None, ymax=None, emit=True, **kwargs):
16771673
# and min(ymin, ymax)<=0):
16781674
# raise ValueError('Cannot set nonpositive limits with log transform')
16791675

1680-
ymin, ymax = mbbox.nonsingular(ymin, ymax, increasing=False)
1681-
# MGDTODO: side-effects on y-bounds should propagate
1682-
self.viewLim = mbbox.Bbox.from_lbrt(self.viewLim.xmin(), ymin, self.viewLim.xmax(), ymax)
1676+
ymin, ymax = maffine.nonsingular(ymin, ymax, increasing=False)
1677+
self.viewLim.intervaly = (ymin, ymax)
16831678
if emit: self.callbacks.process('ylim_changed', self)
16841679
print "set_ylim", self.viewLim
16851680

lib/matplotlib/axis.py

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
from ticker import NullFormatter, FixedFormatter, ScalarFormatter, LogFormatter
1616
from ticker import NullLocator, FixedLocator, LinearLocator, LogLocator, AutoLocator
1717

18-
from affine import Affine2D, blend_xy_sep_transform
19-
from bbox import bbox_union
18+
from affine import Affine2D, Bbox, blend_xy_sep_transform, interval_contains, \
19+
interval_contains_open
2020
from font_manager import FontProperties
2121
from text import Text, TextWithDash, _process_text_args
2222
from patches import bbox_artist
@@ -160,7 +160,7 @@ def get_loc(self):
160160
def draw(self, renderer):
161161
if not self.get_visible(): return
162162
renderer.open_group(self.__name__)
163-
midPoint = self.get_view_interval().contains_open( self.get_loc() )
163+
midPoint = interval_contains_open(self.get_view_interval(), self.get_loc() )
164164

165165
if midPoint:
166166
if self.gridOn: self.gridline.draw(renderer)
@@ -239,7 +239,7 @@ def _get_text1(self, loc):
239239
trans = blend_xy_sep_transform(
240240
self.axes.transData, self.axes.transAxes)
241241
#offset the text downward with a post transformation
242-
trans = trans + Affine2D().translated(0, -1 * self._padPixels)
242+
trans = trans + Affine2D().translate(0, -1 * self._padPixels)
243243
t.set_transform(trans)
244244

245245
self._set_artist_props(t)
@@ -264,7 +264,7 @@ def _get_text2(self, loc):
264264
trans = blend_xy_sep_transform(
265265
self.axes.transData, self.axes.transAxes)
266266
# offset the text upward with a post transformation
267-
trans = trans + Affine2D().translated(0, self._padPixels)
267+
trans = trans + Affine2D().translate(0, self._padPixels)
268268
t.set_transform( trans )
269269
self._set_artist_props(t)
270270
return t
@@ -331,11 +331,11 @@ def update_position(self, loc):
331331

332332
def get_view_interval(self):
333333
'return the Interval instance for this axis view limits'
334-
return self.axes.viewLim.intervalx()
334+
return self.axes.viewLim.intervalx
335335

336336
def get_data_interval(self):
337337
'return the Interval instance for this axis data limits'
338-
return self.axes.dataLim.intervalx()
338+
return self.axes.dataLim.intervalx
339339

340340

341341
class YTick(Tick):
@@ -362,7 +362,7 @@ def _get_text1(self, loc):
362362
trans = blend_xy_sep_transform(
363363
self.axes.transAxes, self.axes.transData)
364364
# offset the text leftward with a post transformation
365-
trans = trans + Affine2D().translated(-1 * self._padPixels, 0)
365+
trans = trans + Affine2D().translate(-1 * self._padPixels, 0)
366366

367367
t.set_transform( trans )
368368
#t.set_transform( self.axes.transData )
@@ -385,7 +385,7 @@ def _get_text2(self, loc):
385385
trans = blend_xy_sep_transform(
386386
self.axes.transAxes, self.axes.transData)
387387
# offset the text rightward with a post transformation
388-
trans = trans + Affine2D().translated(self._padPixels, 0)
388+
trans = trans + Affine2D().translate(self._padPixels, 0)
389389
t.set_transform( trans )
390390
self._set_artist_props(t)
391391
return t
@@ -455,11 +455,11 @@ def update_position(self, loc):
455455

456456
def get_view_interval(self):
457457
'return the Interval instance for this axis view limits'
458-
return self.axes.viewLim.intervaly()
458+
return self.axes.viewLim.intervaly
459459

460460
def get_data_interval(self):
461461
'return the Interval instance for this axis data limits'
462-
return self.axes.dataLim.intervaly()
462+
return self.axes.dataLim.intervaly
463463

464464

465465
class Ticker:
@@ -575,7 +575,7 @@ def draw(self, renderer, *args, **kwargs):
575575
interval = self.get_view_interval()
576576
for tick, loc, label in zip(majorTicks, majorLocs, majorLabels):
577577
if tick is None: continue
578-
if not interval.contains(loc): continue
578+
if not interval_contains(interval, loc): continue
579579
seen[loc] = 1
580580
tick.update_position(loc)
581581
tick.set_label1(label)
@@ -1034,19 +1034,19 @@ def _update_label_position(self, bboxes, bboxes2):
10341034
bottom = self.axes.bbox.ymin()
10351035
else:
10361036

1037-
bbox = bbox_union(bboxes)
1038-
bottom = bbox.ymin()
1037+
bbox = Bbox.union(bboxes)
1038+
bottom = bbox.ymin
10391039

10401040
self.label.set_position( (x, bottom-self.LABELPAD*self.figure.dpi/72.0))
10411041
# self.label.set_position( (x, bottom-self.LABELPAD*self.figure.dpi.get()/72.0)) MGDTODO
10421042

10431043
else:
10441044
if not len(bboxes2):
1045-
top = self.axes.bbox.ymax()
1045+
top = self.axes.bbox.ymax
10461046
else:
10471047

10481048
bbox = bbox_union(bboxes2)
1049-
top = bbox.ymax()
1049+
top = bbox.ymax
10501050

10511051
self.label.set_position( (x, top+self.LABELPAD*self.figure.dpi.get()/72.0))
10521052

@@ -1059,8 +1059,8 @@ def _update_offset_text_position(self, bboxes, bboxes2):
10591059
if not len(bboxes):
10601060
bottom = self.axes.bbox.ymin()
10611061
else:
1062-
bbox = bbox_union(bboxes)
1063-
bottom = bbox.ymin()
1062+
bbox = Bbox.union(bboxes)
1063+
bottom = bbox.ymin
10641064
self.offsetText.set_position((x, bottom-self.OFFSETTEXTPAD*self.figure.dpi/72.0))
10651065
# self.offsetText.set_position((x, bottom-self.OFFSETTEXTPAD*self.figure.dpi.get()/72.0)) MGDTODO
10661066

@@ -1133,11 +1133,11 @@ def get_ticks_position(self):
11331133

11341134
def get_view_interval(self):
11351135
'return the Interval instance for this axis view limits'
1136-
return self.axes.viewLim.intervalx()
1136+
return self.axes.viewLim.intervalx
11371137

11381138
def get_data_interval(self):
11391139
'return the Interval instance for this axis data limits'
1140-
return self.axes.dataLim.intervalx()
1140+
return self.axes.dataLim.intervalx
11411141

11421142

11431143
class YAxis(Axis):
@@ -1223,11 +1223,11 @@ def _update_label_position(self, bboxes, bboxes2):
12231223
x,y = self.label.get_position()
12241224
if self.label_position == 'left':
12251225
if not len(bboxes):
1226-
left = self.axes.bbox.xmin()
1226+
left = self.axes.bbox.xmin
12271227
else:
12281228

1229-
bbox = bbox_union(bboxes)
1230-
left = bbox.xmin()
1229+
bbox = Bbox.union(bboxes)
1230+
left = bbox.xmin
12311231

12321232
self.label.set_position( (left-self.LABELPAD*self.figure.dpi/72.0, y))
12331233
# self.label.set_position( (left-self.LABELPAD*self.figure.dpi.get()/72.0, y)) MGDTODO
@@ -1248,7 +1248,7 @@ def _update_offset_text_position(self, bboxes, bboxes2):
12481248
boxes of all the ticklabels
12491249
"""
12501250
x,y = self.offsetText.get_position()
1251-
top = self.axes.bbox.ymax()
1251+
top = self.axes.bbox.ymax
12521252
self.offsetText.set_position((x, top+self.OFFSETTEXTPAD*self.figure.dpi/72.0))
12531253
# self.offsetText.set_position((x, top+self.OFFSETTEXTPAD*self.figure.dpi.get()/72.0)) MGDTODO
12541254

@@ -1335,11 +1335,11 @@ def get_ticks_position(self):
13351335

13361336
def get_view_interval(self):
13371337
'return the Interval instance for this axis view limits'
1338-
return self.axes.viewLim.intervaly()
1338+
return self.axes.viewLim.intervaly
13391339

13401340
def get_data_interval(self):
13411341
'return the Interval instance for this axis data limits'
1342-
return self.axes.dataLim.intervaly()
1342+
return self.axes.dataLim.intervaly
13431343

13441344

13451345

lib/matplotlib/backends/backend_agg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
from matplotlib.font_manager import findfont
8585
from matplotlib.ft2font import FT2Font, LOAD_DEFAULT
8686
from matplotlib.mathtext import MathTextParser
87-
from matplotlib.bbox import Bbox
87+
from matplotlib.affine import Bbox
8888

8989
from _backend_agg import RendererAgg as _RendererAgg
9090

lib/matplotlib/backends/backend_tkagg.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -219,13 +219,13 @@ def get_tk_widget(self):
219219
def motion_notify_event(self, event):
220220
x = event.x
221221
# flipy so y=0 is bottom of canvas
222-
y = self.figure.bbox.height() - event.y
222+
y = self.figure.bbox.height - event.y
223223
FigureCanvasBase.motion_notify_event(self, x, y, guiEvent=event)
224224

225225
def button_press_event(self, event):
226226
x = event.x
227227
# flipy so y=0 is bottom of canvas
228-
y = self.figure.bbox.height() - event.y
228+
y = self.figure.bbox.height - event.y
229229
num = getattr(event, 'num', None)
230230

231231
if sys.platform=='darwin':
@@ -239,7 +239,7 @@ def button_press_event(self, event):
239239
def button_release_event(self, event):
240240
x = event.x
241241
# flipy so y=0 is bottom of canvas
242-
y = self.figure.bbox.height() - event.y
242+
y = self.figure.bbox.height - event.y
243243

244244
num = getattr(event, 'num', None)
245245

@@ -609,7 +609,7 @@ def _Button(self, text, file, command):
609609
return b
610610

611611
def _init_toolbar(self):
612-
xmin, xmax = self.canvas.figure.bbox.intervalx().get_bounds()
612+
xmin, xmax = self.canvas.figure.bbox.intervalx
613613
height, width = 50, xmax-xmin
614614
Tk.Frame.__init__(self, master=self.window,
615615
width=width, height=height,

0 commit comments

Comments
 (0)