Skip to content

Commit 5df279d

Browse files
committed
Support for transform in contour, and an external _as_mpl_transform api.
1 parent 267b0cf commit 5df279d

File tree

4 files changed

+19
-6
lines changed

4 files changed

+19
-6
lines changed

lib/matplotlib/artist.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import matplotlib
44
import matplotlib.cbook as cbook
55
from matplotlib import docstring, rcParams
6-
from transforms import Bbox, IdentityTransform, TransformedBbox, TransformedPath
6+
from transforms import Bbox, IdentityTransform, TransformedBbox,
7+
TransformedPath, Transform
78
from path import Path
89

910
## Note, matplotlib artists use the doc strings for set and get
@@ -223,7 +224,7 @@ def set_transform(self, t):
223224
ACCEPTS: :class:`~matplotlib.transforms.Transform` instance
224225
"""
225226
self._transform = t
226-
self._transformSet = True
227+
self._transformSet = t is not None
227228
self.pchanged()
228229

229230
def get_transform(self):
@@ -233,6 +234,8 @@ def get_transform(self):
233234
"""
234235
if self._transform is None:
235236
self._transform = IdentityTransform()
237+
elif not isinstance(self._transform, Transform) and hasattr(self._transform, '_as_mpl_transform'):
238+
self._transform = self._transform._as_mpl_transform(self.axes)
236239
return self._transform
237240

238241
def hitlist(self, event):

lib/matplotlib/axes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5965,7 +5965,7 @@ def scatter(self, x, y, s=20, c='b', marker='o', cmap=None, norm=None,
59655965
edgecolors = edgecolors,
59665966
linewidths = linewidths,
59675967
offsets = zip(x,y),
5968-
transOffset = self.transData,
5968+
transOffset = kwargs.pop('transform', self.transData),
59695969
)
59705970
collection.set_transform(mtransforms.IdentityTransform())
59715971
collection.set_alpha(alpha)

lib/matplotlib/collections.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,15 @@ def set_paths(self):
156156
def get_transforms(self):
157157
return self._transforms
158158

159+
def get_offset_transform(self):
160+
t = self._transOffset
161+
if not isinstance(t, transforms.Transform) and hasattr(t, '_as_mpl_transform'):
162+
t = t._as_mpl_transform(self.axes)
163+
return t
164+
159165
def get_datalim(self, transData):
160166
transform = self.get_transform()
161-
transOffset = self._transOffset
167+
transOffset = self.get_offset_transform()
162168
offsets = self._offsets
163169
paths = self.get_paths()
164170

@@ -192,7 +198,7 @@ def _prepare_points(self):
192198
"""Point prep for drawing and hit testing"""
193199

194200
transform = self.get_transform()
195-
transOffset = self._transOffset
201+
transOffset = self.get_offset_transform()
196202
offsets = self._offsets
197203
paths = self.get_paths()
198204

@@ -1407,7 +1413,7 @@ def draw(self, renderer):
14071413
if not self.get_visible(): return
14081414
renderer.open_group(self.__class__.__name__, self.get_gid())
14091415
transform = self.get_transform()
1410-
transOffset = self._transOffset
1416+
transOffset = self.get_offset_transform()
14111417
offsets = self._offsets
14121418

14131419
if self.have_units():

lib/matplotlib/contour.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,8 @@ def __init__(self, ax, *args, **kwargs):
772772
raise ValueError('Either colors or cmap must be None')
773773
if self.origin == 'image': self.origin = mpl.rcParams['image.origin']
774774

775+
self.transform = kwargs.get('transform', None)
776+
775777
self._process_args(*args, **kwargs)
776778
self._process_levels()
777779

@@ -820,6 +822,7 @@ def __init__(self, ax, *args, **kwargs):
820822
antialiaseds = (self.antialiased,),
821823
edgecolors= 'none',
822824
alpha=self.alpha,
825+
transform=self.transform,
823826
zorder=zorder)
824827
self.ax.add_collection(col)
825828
self.collections.append(col)
@@ -839,6 +842,7 @@ def __init__(self, ax, *args, **kwargs):
839842
linewidths = width,
840843
linestyle = lstyle,
841844
alpha=self.alpha,
845+
transform=self.transform,
842846
zorder=zorder)
843847
col.set_label('_nolegend_')
844848
self.ax.add_collection(col, False)

0 commit comments

Comments
 (0)