Revision: 4189
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4189&view=rev
Author:   mdboom
Date:     2007-11-09 11:09:42 -0800 (Fri, 09 Nov 2007)

Log Message:
-----------
Add support for nonuniform grids to imshow.

Modified Paths:
--------------
    branches/transforms/lib/matplotlib/axes.py
    branches/transforms/lib/matplotlib/image.py

Modified: branches/transforms/lib/matplotlib/axes.py
===================================================================
--- branches/transforms/lib/matplotlib/axes.py  2007-11-09 16:43:38 UTC (rev 
4188)
+++ branches/transforms/lib/matplotlib/axes.py  2007-11-09 19:09:42 UTC (rev 
4189)
@@ -4385,7 +4385,9 @@
     #### plotting z(x,y): imshow, pcolor and relatives, contour
 
 
-    def imshow(self, X,
+    def imshow(self, I,
+               X = None,
+               Y = None,
                cmap = None,
                norm = None,
                aspect=None,
@@ -4402,18 +4404,24 @@
                **kwargs):
         """
 
-        IMSHOW(X, cmap=None, norm=None, aspect=None, interpolation=None,
-               alpha=1.0, vmin=None, vmax=None, origin=None, extent=None)
+        IMSHOW(I, X=None, Y=None, cmap=None, norm=None, aspect=None,
+               interpolation=None, alpha=1.0, vmin=None, vmax=None,
+               origin=None, extent=None)
 
-        IMSHOW(X) - plot image X to current axes, resampling to scale to axes
-                    size (X may be numarray/Numeric array or PIL image)
+        IMSHOW(I) - plot image I to current axes, resampling to scale to axes
+                    size (I may be numarray/Numeric array or PIL image)
 
-        IMSHOW(X, **kwargs) - Use keyword args to control image scaling,
-        colormapping etc. See below for details
+        IMSHOW(I, X, Y) - plot image I to current axes, with
+                          nonuniform X and Y axes.  (I, X and Y may be
+                          numarray/Numeric array or PIL image)
+                    
+        IMSHOW(I, X, Y, **kwargs) - Use keyword args to control image
+                                    scaling, colormapping etc. See
+                                    below for details
 
 
-        Display the image in X to current axes.  X may be a float array, a
-        uint8 array or a PIL image. If X is an array, X can have the following
+        Display the image in I to current axes.  I may be a float array, a
+        uint8 array or a PIL image. If I is an array, I can have the following
         shapes:
 
             MxN    : luminance (grayscale, float array only)
@@ -4425,6 +4433,10 @@
         The value for each component of MxNx3 and MxNx4 float arrays should be
         in the range 0.0 to 1.0; MxN float arrays may be normalised.
 
+        X and/or Y may be provided to specify a non-uniform image
+        grid. Each element of the X or Y arrays is the width or height
+        of the corresponding pixel in the given image.
+        
         A image.AxesImage instance is returned
 
         The following kwargs are allowed:
@@ -4488,12 +4500,25 @@
         if norm is not None: assert(isinstance(norm, mcolors.Normalize))
         if cmap is not None: assert(isinstance(cmap, mcolors.Colormap))
         if aspect is None: aspect = rcParams['image.aspect']
-        self.set_aspect(aspect)
-        im = mimage.AxesImage(self, cmap, norm, interpolation, origin, extent,
-                       filternorm=filternorm,
-                       filterrad=filterrad, **kwargs)
-
-        im.set_data(X)
+        # self.set_aspect(aspect)
+        
+        if X is None and Y is None:
+            im = mimage.AxesImage(self, cmap, norm, interpolation, origin, 
extent,
+                                  filternorm=filternorm,
+                                  filterrad=filterrad, **kwargs)
+            
+            im.set_data(I)
+        else:
+            if X is None:
+                X = npy.arange(I.shape[1])
+            if Y is None:
+                Y = npy.arange(I.shape[0])
+            im = mimage.NonUniformImage(self, cmap=cmap, norm=norm,
+                                        interpolation=interpolation,
+                                        origin=origin, extent=extent,
+                                        filternorm=filternorm,
+                                        filterrad=filterrad, **kwargs)
+            im.set_data(X, Y, I)
         im.set_alpha(alpha)
         self._set_artist_props(im)
         im.set_clip_path(self.axesPatch)
@@ -4515,7 +4540,7 @@
 
         return im
 
-
+    
     def _pcolorargs(self, funcname, *args):
         if len(args)==1:
             C = args[0]

Modified: branches/transforms/lib/matplotlib/image.py
===================================================================
--- branches/transforms/lib/matplotlib/image.py 2007-11-09 16:43:38 UTC (rev 
4188)
+++ branches/transforms/lib/matplotlib/image.py 2007-11-09 19:09:42 UTC (rev 
4189)
@@ -77,8 +77,6 @@
         # reverse interp dict
         self._interpdr = dict([ (v,k) for k,v in self._interpd.items()])
 
-        if interpolation is None: interpolation = 
rcParams['image.interpolation']
-
         self.set_interpolation(interpolation)
         self.axes = ax
 
@@ -267,7 +265,7 @@
 
         ACCEPTS: ['bicubic' | 'bilinear' | 'blackman100' | 'blackman256' | 
'blackman64', 'nearest' | 'sinc144' | 'sinc256' | 'sinc64' | 'spline16' | 
'spline36']
         """
-
+        if s is None: s = rcParams['image.interpolation']
         s = s.lower()
         if not self._interpd.has_key(s):
             raise ValueError('Illegal interpolation string')
@@ -317,17 +315,10 @@
 
 class NonUniformImage(AxesImage):
     def __init__(self, ax,
-                 cmap = None,
-                 norm = None,
-                 extent=None,
+                 **kwargs
                 ):
         AxesImage.__init__(self, ax,
-                           cmap = cmap,
-                           norm = norm,
-                           extent=extent,
-                           interpolation = 'nearest',
-                           origin = 'lower',
-                          )
+                           **kwargs)
 
     def make_image(self, magnification=1.0):
         if self._A is None:
@@ -382,9 +373,11 @@
         raise NotImplementedError('Method not supported')
 
     def set_interpolation(self, s):
-        if s != 'nearest':
+        print s
+        if s != None and s != 'nearest':
             raise NotImplementedError('Only nearest neighbor supported')
-
+        AxesImage.set_interpolation(self, s)
+        
     def get_extent(self):
         if self._A is None:
             raise RuntimeError('Must set data first')


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to