From: <ry...@us...> - 2009-08-31 17:29:49
|
Revision: 7617 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7617&view=rev Author: ryanmay Date: 2009-08-31 17:29:41 +0000 (Mon, 31 Aug 2009) Log Message: ----------- Pull _parse_args out of Quiver and Barbs classes, as we have multiple, diverging copies of the same code. Now the shared code will actually be shared. Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/quiver.py Modified: branches/v0_99_maint/lib/matplotlib/quiver.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/quiver.py 2009-08-31 17:27:12 UTC (rev 7616) +++ branches/v0_99_maint/lib/matplotlib/quiver.py 2009-08-31 17:29:41 UTC (rev 7617) @@ -323,7 +323,30 @@ quiverkey_doc = _quiverkey_doc +# This is a helper function that parses out the various combination of +# arguments for doing colored vector plots. Pulling it out here +# allows both Quiver and Barbs to use it +def _parse_args(*args): + X, Y, U, V, C = [None]*5 + args = list(args) + if len(args) == 3 or len(args) == 5: + C = np.asanyarray(args.pop(-1)) + V = np.asanyarray(args.pop(-1)) + U = np.asanyarray(args.pop(-1)) + if U.ndim == 1: + nr, nc = 1, U.shape[0] + else: + nr, nc = U.shape + if len(args) == 2: # remaining after removing U,V,C + X, Y = [np.array(a).ravel() for a in args] + if len(X) == nc and len(Y) == nr: + X, Y = [a.ravel() for a in np.meshgrid(X, Y)] + else: + indexgrid = np.meshgrid(np.arange(nc), np.arange(nr)) + X, Y = [np.ravel(a) for a in indexgrid] + return X, Y, U, V, C + class Quiver(collections.PolyCollection): """ Specialized PolyCollection for arrows. @@ -343,7 +366,7 @@ """ def __init__(self, ax, *args, **kw): self.ax = ax - X, Y, U, V, C = self._parse_args(*args) + X, Y, U, V, C = _parse_args(*args) self.X = X self.Y = Y self.XY = np.hstack((X[:,np.newaxis], Y[:,np.newaxis])) @@ -388,26 +411,6 @@ by the following pylab interface documentation: %s""" % _quiver_doc - def _parse_args(self, *args): - X, Y, U, V, C = [None]*5 - args = list(args) - if len(args) == 3 or len(args) == 5: - C = np.asanyarray(args.pop(-1)) - V = np.asanyarray(args.pop(-1)) - U = np.asanyarray(args.pop(-1)) - if U.ndim == 1: - nr, nc = 1, U.shape[0] - else: - nr, nc = U.shape - if len(args) == 2: # remaining after removing U,V,C - X, Y = [np.array(a).ravel() for a in args] - if len(X) == nc and len(Y) == nr: - X, Y = [a.ravel() for a in np.meshgrid(X, Y)] - else: - indexgrid = np.meshgrid(np.arange(nc), np.arange(nr)) - X, Y = [np.ravel(a) for a in indexgrid] - return X, Y, U, V, C - def _init(self): """initialization delayed until first draw; allow time for axes setup. @@ -752,7 +755,7 @@ kw['facecolors'] = flagcolor #Parse out the data arrays from the various configurations supported - x, y, u, v, c = self._parse_args(*args) + x, y, u, v, c = _parse_args(*args) self.x = x self.y = y xy = np.hstack((x[:,np.newaxis], y[:,np.newaxis])) @@ -938,28 +941,6 @@ return barb_list - #Taken shamelessly from Quiver - def _parse_args(self, *args): - X, Y, U, V, C = [None]*5 - args = list(args) - if len(args) == 3 or len(args) == 5: - C = ma.masked_invalid(args.pop(-1), copy=False).ravel() - V = ma.masked_invalid(args.pop(-1), copy=False) - U = ma.masked_invalid(args.pop(-1), copy=False) - nn = np.shape(U) - nc = nn[0] - nr = 1 - if len(nn) > 1: - nr = nn[1] - if len(args) == 2: # remaining after removing U,V,C - X, Y = [np.array(a).ravel() for a in args] - if len(X) == nc and len(Y) == nr: - X, Y = [a.ravel() for a in np.meshgrid(X, Y)] - else: - indexgrid = np.meshgrid(np.arange(nc), np.arange(nr)) - X, Y = [np.ravel(a) for a in indexgrid] - return X, Y, U, V, C - def set_UVC(self, U, V, C=None): self.u = ma.masked_invalid(U, copy=False).ravel() self.v = ma.masked_invalid(V, copy=False).ravel() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ry...@us...> - 2009-08-31 17:34:58
|
Revision: 7618 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7618&view=rev Author: ryanmay Date: 2009-08-31 17:34:50 +0000 (Mon, 31 Aug 2009) Log Message: ----------- Use atleast_1d instead of asanyarray. This allows passing in scalars to quiver/barbs. Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/quiver.py Modified: branches/v0_99_maint/lib/matplotlib/quiver.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/quiver.py 2009-08-31 17:29:41 UTC (rev 7617) +++ branches/v0_99_maint/lib/matplotlib/quiver.py 2009-08-31 17:34:50 UTC (rev 7618) @@ -323,16 +323,20 @@ quiverkey_doc = _quiverkey_doc + # This is a helper function that parses out the various combination of # arguments for doing colored vector plots. Pulling it out here # allows both Quiver and Barbs to use it def _parse_args(*args): X, Y, U, V, C = [None]*5 args = list(args) + + # The use of atleast_1d allows for handling scalar arguments while also + # keeping masked arrays if len(args) == 3 or len(args) == 5: - C = np.asanyarray(args.pop(-1)) - V = np.asanyarray(args.pop(-1)) - U = np.asanyarray(args.pop(-1)) + C = np.atleast_1d(args.pop(-1)) + V = np.atleast_1d(args.pop(-1)) + U = np.atleast_1d(args.pop(-1)) if U.ndim == 1: nr, nc = 1, U.shape[0] else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2009-09-11 20:48:17
|
Revision: 7745 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7745&view=rev Author: efiring Date: 2009-09-11 20:48:10 +0000 (Fri, 11 Sep 2009) Log Message: ----------- Fix bug in quiver angle kwarg, found when input angle array is not 1-D Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/quiver.py Modified: branches/v0_99_maint/lib/matplotlib/quiver.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/quiver.py 2009-09-11 15:07:22 UTC (rev 7744) +++ branches/v0_99_maint/lib/matplotlib/quiver.py 2009-09-11 20:48:10 UTC (rev 7745) @@ -506,6 +506,7 @@ theta = np.angle(uv) else: theta = ma.masked_invalid(self.angles, copy=False).filled(0) + theta = theta.ravel() theta *= (np.pi/180.0) theta.shape = (theta.shape[0], 1) # for broadcasting xy = (X+Y*1j) * np.exp(1j*theta)*self.width This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2009-09-11 21:14:34
|
Revision: 7749 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7749&view=rev Author: efiring Date: 2009-09-11 21:14:15 +0000 (Fri, 11 Sep 2009) Log Message: ----------- Backported quiver bug fix from trunk Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/quiver.py Modified: branches/v0_99_maint/lib/matplotlib/quiver.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/quiver.py 2009-09-11 21:04:33 UTC (rev 7748) +++ branches/v0_99_maint/lib/matplotlib/quiver.py 2009-09-11 21:14:15 UTC (rev 7749) @@ -496,7 +496,11 @@ a = np.absolute(uv) if self.scale is None: sn = max(10, math.sqrt(self.N)) - scale = 1.8 * a[~self.Umask].mean() * sn / self.span # crude auto-scaling + if self.Umask is not ma.nomask: + amean = a[~self.Umask].mean() + else: + amean = a.mean() + scale = 1.8 * amean * sn / self.span # crude auto-scaling self.scale = scale length = a/(self.scale*self.width) X, Y = self._h_arrows(length) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ef...@us...> - 2009-09-25 23:56:22
|
Revision: 7827 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7827&view=rev Author: efiring Date: 2009-09-25 23:56:14 +0000 (Fri, 25 Sep 2009) Log Message: ----------- Fix bug in quiver handling of masked U, V Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/quiver.py Modified: branches/v0_99_maint/lib/matplotlib/quiver.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/quiver.py 2009-09-25 18:54:43 UTC (rev 7826) +++ branches/v0_99_maint/lib/matplotlib/quiver.py 2009-09-25 23:56:14 UTC (rev 7827) @@ -516,6 +516,11 @@ xy = (X+Y*1j) * np.exp(1j*theta)*self.width xy = xy[:,:,np.newaxis] XY = np.concatenate((xy.real, xy.imag), axis=2) + if self.Umask is not ma.nomask: + XY = ma.array(XY) + XY[self.Umask] = ma.masked + # This might be handled more efficiently with nans, given + # that nans will end up in the paths anyway. return XY @@ -573,10 +578,7 @@ tooshort = np.repeat(tooshort, 8, 1) np.putmask(X, tooshort, X1) np.putmask(Y, tooshort, Y1) - if self.Umask is not ma.nomask: - mask = np.repeat(self.Umask[:,np.newaxis], 8, 1) - X = ma.array(X, mask=mask, copy=False) - Y = ma.array(Y, mask=mask, copy=False) + # Mask handling is deferred to the caller, _make_verts. return X, Y quiver_doc = _quiver_doc This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |