SourceForge logo
SourceForge logo
Menu

matplotlib-checkins — Commit notification. DO NOT POST to this list, just subscribe to it.

You can subscribe to this list here.

2007 Jan
Feb
Mar
Apr
May
Jun
Jul
(115)
Aug
(120)
Sep
(137)
Oct
(170)
Nov
(461)
Dec
(263)
2008 Jan
(120)
Feb
(74)
Mar
(35)
Apr
(74)
May
(245)
Jun
(356)
Jul
(240)
Aug
(115)
Sep
(78)
Oct
(225)
Nov
(98)
Dec
(271)
2009 Jan
(132)
Feb
(84)
Mar
(74)
Apr
(56)
May
(90)
Jun
(79)
Jul
(83)
Aug
(296)
Sep
(214)
Oct
(76)
Nov
(82)
Dec
(66)
2010 Jan
(46)
Feb
(58)
Mar
(51)
Apr
(77)
May
(58)
Jun
(126)
Jul
(128)
Aug
(64)
Sep
(50)
Oct
(44)
Nov
(48)
Dec
(54)
2011 Jan
(68)
Feb
(52)
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
(1)
2018 Jan
Feb
Mar
Apr
May
(1)
Jun
Jul
Aug
Sep
Oct
Nov
Dec
S M T W T F S

1
(7)
2
(2)
3
(3)
4
5
(6)
6
(6)
7
(9)
8
(6)
9
(2)
10
(4)
11
12
(3)
13
(3)
14
(5)
15
16
(2)
17
(2)
18
19
(3)
20
21
(2)
22
23
(2)
24
(7)
25
(2)
26
(1)
27
(1)
28
29
(1)
30




Showing results of 79

<< < 1 2 3 4 > >> (Page 2 of 4)
From: <jd...@us...> - 2009年06月14日 17:24:47
Revision: 7219
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7219&view=rev
Author: jdh2358
Date: 2009年06月14日 17:24:45 +0000 (2009年6月14日)
Log Message:
-----------
added variant of sf patch 2805653 for specgram kwargs pass thru to imshow
Modified Paths:
--------------
 trunk/matplotlib/lib/matplotlib/axes.py
Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py	2009年06月14日 05:38:11 UTC (rev 7218)
+++ trunk/matplotlib/lib/matplotlib/axes.py	2009年06月14日 17:24:45 UTC (rev 7219)
@@ -7530,14 +7530,14 @@
 def specgram(self, x, NFFT=256, Fs=2, Fc=0, detrend=mlab.detrend_none,
 window=mlab.window_hanning, noverlap=128,
 cmap=None, xextent=None, pad_to=None, sides='default',
- scale_by_freq=None):
+ scale_by_freq=None, **kwargs):
 """
 call signature::
 
 specgram(x, NFFT=256, Fs=2, Fc=0, detrend=mlab.detrend_none,
 window=mlab.window_hanning, noverlap=128,
 cmap=None, xextent=None, pad_to=None, sides='default',
- scale_by_freq=None)
+ scale_by_freq=None, **kwargs)
 
 Compute a spectrogram of data in *x*. Data are split into
 *NFFT* length segments and the PSD of each section is
@@ -7562,8 +7562,13 @@
 The default is (0,max(bins)), where bins is the return
 value from :func:`mlab.specgram`
 
- Return value is (*Pxx*, *freqs*, *bins*, *im*):
+ *kwargs*:
 
+ Additional kwargs are passed on to imshow which makes the
+ specgram image
+
+ Return value is (*Pxx*, *freqs*, *bins*, *im*):
+
 - *bins* are the time points the spectrogram is calculated over
 - *freqs* is an array of frequencies
 - *Pxx* is a len(times) x len(freqs) array of power
@@ -7590,7 +7595,7 @@
 xmin, xmax = xextent
 freqs += Fc
 extent = xmin, xmax, freqs[0], freqs[-1]
- im = self.imshow(Z, cmap, extent=extent)
+ im = self.imshow(Z, cmap, extent=extent, **kwargs)
 self.axis('auto')
 
 return Pxx, freqs, bins, im
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jo...@us...> - 2009年06月14日 05:38:12
Revision: 7218
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7218&view=rev
Author: jouni
Date: 2009年06月14日 05:38:11 +0000 (2009年6月14日)
Log Message:
-----------
Extend backend_driver.py to support running only some test directories
Modified Paths:
--------------
 trunk/matplotlib/CHANGELOG
 trunk/matplotlib/examples/tests/backend_driver.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG	2009年06月14日 01:32:20 UTC (rev 7217)
+++ trunk/matplotlib/CHANGELOG	2009年06月14日 05:38:11 UTC (rev 7218)
@@ -1,3 +1,6 @@
+2009年06月14日 Add new command line options to backend_driver.py to support
+ running only some directories of tests - JKS
+
 2009年06月13日 partial cleanup of mlab and its importation in pylab - EF
 
 2009年06月13日 Introduce a rotation_mode property for the Text artist. See
Modified: trunk/matplotlib/examples/tests/backend_driver.py
===================================================================
--- trunk/matplotlib/examples/tests/backend_driver.py	2009年06月14日 01:32:20 UTC (rev 7217)
+++ trunk/matplotlib/examples/tests/backend_driver.py	2009年06月14日 05:38:11 UTC (rev 7218)
@@ -3,30 +3,40 @@
 This is used to drive many of the examples across the backends, for
 regression testing, and comparing backend efficiency.
 
-The script takes one or more arguments specifying backends
-to be tested, e.g.
+You can specify the backends to be tested either via the --backends
+switch, which takes a comma-separated list, or as separate arguments,
+e.g.
 
 python backend_driver.py agg ps cairo.png cairo.ps
 
-would test the agg and ps backends, and the cairo backend with
-output to png and ps files.
+would test the agg and ps backends, and the cairo backend with output
+to png and ps files. If no arguments are given, a default list of
+backends will be tested.
 
-If no arguments are given, a default list of backends will be
-tested.
+Interspersed with the backend arguments can be switches for the Python
+interpreter executing the tests. If entering such arguments causes an
+option parsing error with the driver script, separate them from driver
+switches with a --.
 """
 
 from __future__ import division
-import os, time, sys, glob
-
+import os, time, sys, glob, string
+from optparse import OptionParser
 import matplotlib.rcsetup as rcsetup
+from matplotlib.cbook import Bunch, dedent
 
 all_backends = list(rcsetup.all_backends) # to leave the original list alone
 all_backends.extend(['cairo.png', 'cairo.ps', 'cairo.pdf', 'cairo.svg'])
 
-pylab_dir = os.path.join('..', 'pylab_examples')
-pylab_files = [
+# actual physical directory for each dir
+dirs = dict(pylab = os.path.join('..', 'pylab_examples'),
+ api = os.path.join('..', 'api'),
+ units = os.path.join('..', 'units'),
+ mplot3d = os.path.join('..', 'mplot3d'))
 
-
+# files in each dir
+files = dict()
+files['pylab'] = [
 'accented_text.py',
 'alignment_test.py',
 'annotation_demo.py',
@@ -196,8 +206,7 @@
 ]
 
 
-api_dir = os.path.join('..', 'api')
-api_files = [
+files['api'] = [
 'agg_oo.py',
 'barchart_demo.py',
 'bbox_intersect.py',
@@ -228,8 +237,7 @@
 'watermark_text.py',
 ]
 
-units_dir = os.path.join('..', 'units')
-units_files = [
+files['units'] = [
 'annotate_with_units.py',
 #'artist_tests.py', # broken, fixme
 'bar_demo2.py',
@@ -241,8 +249,7 @@
 
 ]
 
-mplot3d_dir = os.path.join('..', 'mplot3d')
-mplot3d_files = [
+files['mplot3d'] = [
 '2dcollections3d_demo.py',
 'bars3d_demo.py',
 'contour3d_demo.py',
@@ -263,8 +270,8 @@
 # examples that generate multiple figures
 
 excluded = {
- pylab_dir : ['__init__.py', 'toggle_images.py',],
- units_dir : ['__init__.py', 'date_support.py',],
+ 'pylab' : ['__init__.py', 'toggle_images.py',],
+ 'units' : ['__init__.py', 'date_support.py',],
 }
 
 def report_missing(dir, flist):
@@ -278,24 +285,16 @@
 flist = set(flist)
 missing = list(pyfiles-flist-exclude)
 missing.sort()
- print '%s files not tested: %s'%(dir, ', '.join(missing))
+ if missing:
+ print '%s files not tested: %s'%(dir, ', '.join(missing))
 
+def report_all_missing(directories):
+ for f in directories:
+ report_missing(dirs[f], files[f])
 
-report_missing(pylab_dir, pylab_files)
-report_missing(api_dir, api_files)
-report_missing(units_dir, units_files)
-report_missing(mplot3d_dir, mplot3d_files)
 
-files = (
- [os.path.join(api_dir, fname) for fname in api_files] +
- [os.path.join(pylab_dir, fname) for fname in pylab_files] +
- [os.path.join(units_dir, fname) for fname in units_files] +
- [os.path.join(mplot3d_dir, fname) for fname in mplot3d_files]
- )
-
 # tests known to fail on a given backend
 
-
 failbackend = dict(
 svg = ('tex_demo.py', ),
 agg = ('hyperlinks.py', ),
@@ -317,7 +316,7 @@
 def run(arglist):
 os.system(' '.join(arglist))
 
-def drive(backend, python=['python'], switches = []):
+def drive(backend, directories, python=['python'], switches = []):
 exclude = failbackend.get(backend, [])
 
 # Clear the destination directory for the examples
@@ -329,8 +328,12 @@
 else:
 os.mkdir(backend)
 failures = []
- for fullpath in files:
 
+ testcases = [os.path.join(dirs[d], fname)
+ for d in directories
+ for fname in files[d]]
+
+ for fullpath in testcases:
 print ('\tdriving %-40s' % (fullpath)),
 sys.stdout.flush()
 
@@ -376,21 +379,64 @@
 tmpfile.close()
 start_time = time.time()
 program = [x % {'name': basename} for x in python]
- ret = run(program + [tmpfile_name, switchstring])
+ ret = run(program + [tmpfile_name] + switches)
 end_time = time.time()
 print (end_time - start_time), ret
- #os.system('%s %s %s' % (python, tmpfile_name, switchstring))
+ #os.system('%s %s %s' % (python, tmpfile_name, ' '.join(switches)))
 os.remove(tmpfile_name)
 if ret:
 failures.append(fullpath)
 return failures
 
+def parse_options():
+ doc = __doc__.split('\n\n')
+ op = OptionParser(description=doc[0].strip(),
+ usage='%prog [options] [--] [backends and switches]',
+ epilog='\n'.join(doc[1:]))
+ op.disable_interspersed_args()
+ op.set_defaults(dirs='pylab,api,units,mplot3d',
+ clean=False, coverage=False, valgrind=False)
+ op.add_option('-d', '--dirs', '--directories', type='string',
+ dest='dirs', help=dedent('''
+ Run only the tests in these directories; comma-separated list of
+ one or more of: pylab (or pylab_examples), api, units, mplot3d'''))
+ op.add_option('-b', '--backends', type='string', dest='backends',
+ help=dedent('''
+ Run tests only for these backends; comma-separated list of
+ one or more of: agg, ps, svg, pdf, template, cairo,
+ cairo.png, cairo.ps, cairo.pdf, cairo.svg. Default is everything
+ except cairo.'''))
+ op.add_option('--clean', action='store_true', dest='clean',
+ help='Remove result directories, run no tests')
+ op.add_option('-c', '--coverage', action='store_true', dest='coverage',
+ help='Run in coverage.py')
+ op.add_option('-v', '--valgrind', action='store_true', dest='valgrind',
+ help='Run in valgrind')
 
+ options, args = op.parse_args()
+ switches = [x for x in args if x.startswith('--')]
+ backends = [x.lower() for x in args if not x.startswith('--')]
+ if options.backends:
+ backends += map(string.lower, options.backends.split(','))
+
+ result = Bunch(
+ dirs = options.dirs.split(','),
+ backends = backends or ['agg', 'ps', 'svg', 'pdf', 'template'],
+ clean = options.clean,
+ coverage = options.coverage,
+ valgrind = options.valgrind,
+ switches = switches)
+ if 'pylab_examples' in result.dirs:
+ result.dirs[result.dirs.index('pylab_examples')] = 'pylab'
+ #print result
+ return result
+
 if __name__ == '__main__':
 times = {}
 failures = {}
- default_backends = ['agg', 'ps', 'svg', 'pdf', 'template']
- if len(sys.argv)==2 and sys.argv[1]=='--clean':
+ options = parse_options()
+
+ if options.clean:
 localdirs = [d for d in glob.glob('*') if os.path.isdir(d)]
 all_backends_set = set(all_backends)
 for d in localdirs:
@@ -405,38 +451,31 @@
 
 print 'all clean...'
 raise SystemExit
- if '--coverage' in sys.argv:
+ if options.coverage:
 python = ['coverage.py', '-x']
- sys.argv.remove('--coverage')
- elif '--valgrind' in sys.argv:
+ elif options.valgrind:
 python = ['valgrind', '--tool=memcheck', '--leak-check=yes',
 '--log-file=%(name)s', 'python']
- sys.argv.remove('--valgrind')
 elif sys.platform == 'win32':
 python = [r'c:\Python24\python.exe']
 else:
 python = ['python']
- backends = []
- switches = []
- if sys.argv[1:]:
- backends = [b.lower() for b in sys.argv[1:] if b.lower() in all_backends]
- switches = [s for s in sys.argv[1:] if s.startswith('--')]
- if not backends:
- backends = default_backends
- for backend in backends:
- switchstring = ' '.join(switches)
- print 'testing %s %s' % (backend, switchstring)
+
+ report_all_missing(options.dirs)
+ for backend in options.backends:
+ print 'testing %s %s' % (backend, ' '.join(options.switches))
 t0 = time.time()
- failures[backend] = drive(backend, python, switches)
+ failures[backend] = \
+ drive(backend, options.dirs, python, options.switches)
 t1 = time.time()
 times[backend] = (t1-t0)/60.0
 
 # print times
 for backend, elapsed in times.items():
- print 'Backend %s took %1.2f minutes to complete' % ( backend, elapsed)
+ print 'Backend %s took %1.2f minutes to complete' % (backend, elapsed)
 failed = failures[backend]
 if failed:
 print ' Failures: ', failed
- if 'Template' in times:
+ if 'template' in times:
 print '\ttemplate ratio %1.3f, template residual %1.3f' % (
- elapsed/times['Template'], elapsed-times['Template'])
+ elapsed/times['template'], elapsed-times['template'])
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2009年06月14日 02:14:34
Revision: 7217
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7217&view=rev
Author: efiring
Date: 2009年06月14日 01:32:20 +0000 (2009年6月14日)
Log Message:
-----------
partial cleanup of mlab and of the pylab imports from mlab
Modified Paths:
--------------
 trunk/matplotlib/CHANGELOG
 trunk/matplotlib/lib/matplotlib/cbook.py
 trunk/matplotlib/lib/matplotlib/mlab.py
 trunk/matplotlib/lib/matplotlib/pylab.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG	2009年06月13日 21:13:14 UTC (rev 7216)
+++ trunk/matplotlib/CHANGELOG	2009年06月14日 01:32:20 UTC (rev 7217)
@@ -1,3 +1,5 @@
+2009年06月13日 partial cleanup of mlab and its importation in pylab - EF
+
 2009年06月13日 Introduce a rotation_mode property for the Text artist. See
 examples/pylab_examples/demo_text_rotation_mode.py -JJL
 
Modified: trunk/matplotlib/lib/matplotlib/cbook.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/cbook.py	2009年06月13日 21:13:14 UTC (rev 7216)
+++ trunk/matplotlib/lib/matplotlib/cbook.py	2009年06月14日 01:32:20 UTC (rev 7217)
@@ -761,36 +761,6 @@
 
 
 
-
-# python 2.2 dicts don't have pop--but we don't support 2.2 any more
-def popd(d, *args):
- """
- Should behave like python2.3 :meth:`dict.pop` method; *d* is a
- :class:`dict`::
-
- # returns value for key and deletes item; raises a KeyError if key
- # is not in dict
- val = popd(d, key)
-
- # returns value for key if key exists, else default. Delete key,
- # val item if it exists. Will not raise a KeyError
- val = popd(d, key, default)
-
- """
- warnings.warn("Use native python dict.pop method", DeprecationWarning)
- # warning added 2008年07月22日
- if len(args)==1:
- key = args[0]
- val = d[key]
- del d[key]
- elif len(args)==2:
- key, default = args
- val = d.get(key, default)
- try: del d[key]
- except KeyError: pass
- return val
-
-
 class maxdict(dict):
 """
 A dictionary with a maximum size; this doesn't override all the
Modified: trunk/matplotlib/lib/matplotlib/mlab.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/mlab.py	2009年06月13日 21:13:14 UTC (rev 7216)
+++ trunk/matplotlib/lib/matplotlib/mlab.py	2009年06月14日 01:32:20 UTC (rev 7217)
@@ -130,39 +130,12 @@
 care--function signatures may differ):
 
 
-:meth:`conv`
- convolution (numpy.convolve)
-
-:meth:`corrcoef`
- The matrix of correlation coefficients
-
-:meth:`hist`
- Histogram (numpy.histogram)
-
-:meth:`linspace`
- Linear spaced array from min to max
-
 :meth:`load`
 load ASCII file - use numpy.loadtxt
 
-:meth:`meshgrid`
- Make a 2D grid from 2 1 arrays (numpy.meshgrid)
-
-:meth:`polyfit`
- least squares best polynomial fit of x to y (numpy.polyfit)
-
-:meth:`polyval`
- evaluate a vector for a vector of polynomial coeffs (numpy.polyval)
-
 :meth:`save`
 save ASCII file - use numpy.savetxt
 
-:meth:`trapz`
- trapeziodal integration (trapz(x,y) -> numpy.trapz(y,x))
-
-:meth:`vander`
- the Vandermonde matrix (numpy.vander)
-
 """
 
 from __future__ import division
@@ -176,20 +149,6 @@
 import matplotlib.cbook as cbook
 
 
-def linspace(*args, **kw):
- warnings.warn("use numpy.linspace", DeprecationWarning)
- return np.linspace(*args, **kw)
-
-def meshgrid(x,y):
- warnings.warn("use numpy.meshgrid", DeprecationWarning)
- return np.meshgrid(x,y)
-
-def mean(x, dim=None):
- warnings.warn("Use numpy.mean(x) or x.mean()", DeprecationWarning)
- if len(x)==0: return None
- return np.mean(x, axis=dim)
-
-
 def logspace(xmin,xmax,N):
 return np.exp(np.linspace(np.log(xmin), np.log(xmax), N))
 
@@ -205,12 +164,6 @@
 "No window function; simply return x"
 return x
 
-#from numpy import convolve as conv
-def conv(x, y, mode=2):
- 'convolve x with y'
- warnings.warn("Use numpy.convolve(x, y, mode='full')", DeprecationWarning)
- return np.convolve(x,y,mode)
-
 def detrend(x, key=None):
 if key is None or key=='constant':
 return detrend_mean(x)
@@ -537,111 +490,7 @@
 
 cohere.__doc__ = cohere.__doc__ % kwdocd
 
-def corrcoef(*args):
- """
- corrcoef(*X*) where *X* is a matrix returns a matrix of correlation
- coefficients for the columns of *X*
 
- corrcoef(*x*, *y*) where *x* and *y* are vectors returns the matrix of
- correlation coefficients for *x* and *y*.
-
- Numpy arrays can be real or complex.
-
- The correlation matrix is defined from the covariance matrix *C*
- as
-
- .. math::
-
- r_{ij} = \\frac{C_{ij}}{\\sqrt{C_{ii}C_{jj}}}
- """
- warnings.warn("Use numpy.corrcoef", DeprecationWarning)
- kw = dict(rowvar=False)
- return np.corrcoef(*args, **kw)
-
-
-def polyfit(*args, **kwargs):
- u"""
- polyfit(*x*, *y*, *N*)
-
- Do a best fit polynomial of order *N* of *y* to *x*. Return value
- is a vector of polynomial coefficients [pk ... p1 p0]. Eg, for
- *N* = 2::
-
- p2*x0^2 + p1*x0 + p0 = y1
- p2*x1^2 + p1*x1 + p0 = y1
- p2*x2^2 + p1*x2 + p0 = y2
- .....
- p2*xk^2 + p1*xk + p0 = yk
-
-
- Method: if *X* is a the Vandermonde Matrix computed from *x* (see
- `vandermonds
- <http://mathworld.wolfram.com/VandermondeMatrix.html>`_), then the
- polynomial least squares solution is given by the '*p*' in
-
- X*p = y
-
- where *X* is a (len(*x*) \N{MULTIPLICATION SIGN} *N* + 1) matrix,
- *p* is a *N*+1 length vector, and *y* is a (len(*x*)
- \N{MULTIPLICATION SIGN} 1) vector.
-
- This equation can be solved as
-
- .. math::
-
- p = (X_t X)^-1 X_t y
-
- where :math:`X_t` is the transpose of *X* and -1 denotes the
- inverse. Numerically, however, this is not a good method, so we
- use :func:`numpy.linalg.lstsq`.
-
- For more info, see `least squares fitting
- <http://mathworld.wolfram.com/LeastSquaresFittingPolynomial.html>`_,
- but note that the *k*'s and *n*'s in the superscripts and
- subscripts on that page. The linear algebra is correct, however.
-
- .. seealso::
-
- :func:`polyval`
- polyval function
- """
- warnings.warn("use numpy.polyfit", DeprecationWarning)
- return np.polyfit(*args, **kwargs)
-
-
-def polyval(*args, **kwargs):
- """
- *y* = polyval(*p*, *x*)
-
- *p* is a vector of polynomial coeffients and *y* is the polynomial
- evaluated at *x*.
-
- Example code to remove a polynomial (quadratic) trend from y::
-
- p = polyfit(x, y, 2)
- trend = polyval(p, x)
- resid = y - trend
-
- .. seealso::
-
- :func:`polyfit`
- polyfit function
- """
- warnings.warn("use numpy.polyval", DeprecationWarning)
- return np.polyval(*args, **kwargs)
-
-def vander(*args, **kwargs):
- """
- *X* = vander(*x*, *N* = *None*)
-
- The Vandermonde matrix of vector *x*. The *i*-th column of *X* is the
- the *i*-th power of *x*. *N* is the maximum power to compute; if *N* is
- *None* it defaults to len(*x*).
- """
- warnings.warn("Use numpy.vander()", DeprecationWarning)
- return np.vander(*args, **kwargs)
-
-
 def donothing_callback(*args):
 pass
 
@@ -826,24 +675,6 @@
 #S = -1.0*np.sum(p*log(p))
 return S
 
-def hist(y, bins=10, normed=0):
- """
- Return the histogram of *y* with *bins* equally sized bins. If
- bins is an array, use those bins. Return value is (*n*, *x*)
- where *n* is the count for each bin in *x*.
-
- If *normed* is *False*, return the counts in the first element of
- the returned tuple. If *normed* is *True*, return the probability
- density :math:`\\frac{n}{(len(y)\mathrm{dbin}}`.
-
- If *y* has rank > 1, it will be raveled. If *y* is masked, only the
- unmasked values will be used.
-
- Credits: the Numeric 22 documentation
- """
- warnings.warn("Use numpy.histogram()", DeprecationWarning)
- return np.histogram(y, bins=bins, range=None, normed=normed)
-
 def normpdf(x, *args):
 "Return the normal pdf evaluated at *x*; args provides *mu*, *sigma*"
 mu, sigma = args
@@ -879,14 +710,7 @@
 res, = np.nonzero(np.ravel(condition))
 return res
 
-def trapz(x, y):
- """
- Trapezoidal integral of *y*(*x*).
- """
- warnings.warn("Use numpy.trapz(y,x) instead of trapz(x,y)", DeprecationWarning)
- return np.trapz(y, x)
 
-
 def longest_contiguous_ones(x):
 """
 Return the indices of the longest stretch of contiguous ones in *x*,
@@ -1203,6 +1027,8 @@
 *x* is a very long trajectory from a map, and *fprime* returns the
 derivative of *x*.
 
+ This function will be removed from matplotlib.
+
 Returns :
 .. math::
 
@@ -1221,6 +1047,9 @@
 
 It also seems that this function's name is badly misspelled.
 """
+
+ warnings.warn("This does not belong in matplotlib and will be removed", DeprecationWarning) # 2009年06月13日
+
 return np.mean(np.log(np.absolute(fprime(x))))
 
 class FIFOBuffer:
@@ -1330,6 +1159,8 @@
 Save the data in *X* to file *fname* using *fmt* string to convert the
 data to strings.
 
+ Deprecated. Use numpy.savetxt.
+
 *fname* can be a filename or a file handle. If the filename ends
 in '.gz', the file is automatically saved in compressed gzip
 format. The :func:`load` function understands gzipped files
@@ -1346,6 +1177,8 @@
 for comma-separated values.
 """
 
+ warnings.warn("use numpy.savetxt", DeprecationWarning) # 2009年06月13日
+
 if cbook.is_string_like(fname):
 if fname.endswith('.gz'):
 import gzip
@@ -1377,6 +1210,8 @@
 """
 Load ASCII data from *fname* into an array and return the array.
 
+ Deprecated: use numpy.loadtxt.
+
 The data must be regular, same number of values in every row
 
 *fname* can be a filename or a file handle. Support for gzipped
@@ -1429,6 +1264,8 @@
 Exercises many of these options.
 """
 
+ warnings.warn("use numpy.loadtxt", DeprecationWarning) # 2009年06月13日
+
 if converters is None: converters = {}
 fh = cbook.to_filehandle(fname)
 X = []
@@ -1720,33 +1557,6 @@
 return np.array(map(fn,*args))
 
 
-#from numpy import zeros_like
-def zeros_like(a):
- """
- Return an array of zeros of the shape and typecode of *a*.
- """
- warnings.warn("Use numpy.zeros_like(a)", DeprecationWarning)
- return np.zeros_like(a)
-
-#from numpy import sum as sum_flat
-def sum_flat(a):
- """
- Return the sum of all the elements of *a*, flattened out.
-
- It uses ``a.flat``, and if *a* is not contiguous, a call to
- ``ravel(a)`` is made.
- """
- warnings.warn("Use numpy.sum(a) or a.sum()", DeprecationWarning)
- return np.sum(a)
-
-#from numpy import mean as mean_flat
-def mean_flat(a):
- """
- Return the mean of all the elements of *a*, flattened out.
- """
- warnings.warn("Use numpy.mean(a) or a.mean()", DeprecationWarning)
- return np.mean(a)
-
 def rms_flat(a):
 """
 Return the root mean square of all the elements of *a*, flattened out.
@@ -1852,14 +1662,6 @@
 return np.arange(npts)*delta+xini
 # end frange()
 
-#import numpy.diag as diagonal_matrix
-def diagonal_matrix(diag):
- """
- Return square diagonal matrix whose non-zero elements are given by the
- input array.
- """
- warnings.warn("Use numpy.diag(d)", DeprecationWarning)
- return np.diag(diag)
 
 def identity(n, rank=2, dtype='l', typecode=None):
 """
@@ -1962,73 +1764,11 @@
 """
 return np.prod(X.shape)==np.max(X.shape)
 
-#from numpy import fromfunction as fromfunction_kw
-def fromfunction_kw(function, dimensions, **kwargs):
- """
- Drop-in replacement for :func:`numpy.fromfunction`.
-
- Allows passing keyword arguments to the desired function.
-
- Call it as (keywords are optional)::
-
- fromfunction_kw(MyFunction, dimensions, keywords)
-
- The function ``MyFunction`` is responsible for handling the
- dictionary of keywords it will receive.
- """
- warnings.warn("Use numpy.fromfunction()", DeprecationWarning)
- return np.fromfunction(function, dimensions, **kwargs)
-
 ### end fperez numutils code
 
 
-def rem(x,y):
- """
- Deprecated - see :func:`numpy.remainder`
- """
- raise NotImplementedError('Deprecated - see numpy.remainder')
-
-def norm(x,y=2):
- """
- Deprecated - see :func:`numpy.linalg.norm`
- """
- raise NotImplementedError('Deprecated - see numpy.linalg.norm')
-
-
-def orth(A):
- """
- Deprecated - needs clean room implementation
- """
- raise NotImplementedError('Deprecated - needs clean room implementation')
-
-def rank(x):
- """
- Deprecated - see :func:`numpy.rank`
- """
- raise NotImplementedError('Deprecated - see numpy.rank')
-
-def sqrtm(x):
- """
- Deprecated - needs clean room implementation
- """
- raise NotImplementedError('Deprecated - see scipy.linalg.sqrtm')
-
-
-def mfuncC(f, x):
- """
- Deprecated
- """
- raise NotImplementedError('Deprecated - needs clean room implementation')
-
-def approx_real(x):
- """
- Deprecated - needs clean room implementation
- """
- raise NotImplementedError('Deprecated - needs clean room implementation')
-
 #helpers for loading, saving, manipulating and viewing numpy record arrays
 
-
 def safe_isnan(x):
 ':func:`numpy.isnan` for arbitrary types'
 if cbook.is_string_like(x):
@@ -2047,15 +1787,6 @@
 except TypeError: return False
 else: return b
 
-def rec_append_field(rec, name, arr, dtype=None):
- """
- Return a new record array with field name populated with data from
- array *arr*. This function is Deprecated. Please use
- :func:`rec_append_fields`.
- """
- warnings.warn("use rec_append_fields", DeprecationWarning)
- return rec_append_fields(rec, name, arr, dtype)
-
 def rec_append_fields(rec, names, arrs, dtypes=None):
 """
 Return a new record array with field names populated with data
@@ -2114,7 +1845,7 @@
 
 if cbook.is_string_like(names):
 names = names.split(',')
- 
+
 arrays = []
 for name in names:
 arrays.append(rec[name])
@@ -2745,7 +2476,7 @@
 
 if fields is not None:
 r = rec_keep_fields(r, fields)
- 
+
 if cbook.is_numlike(precision):
 precision = [precision]*len(r.dtype)
 
Modified: trunk/matplotlib/lib/matplotlib/pylab.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/pylab.py	2009年06月13日 21:13:14 UTC (rev 7216)
+++ trunk/matplotlib/lib/matplotlib/pylab.py	2009年06月14日 01:32:20 UTC (rev 7217)
@@ -150,12 +150,12 @@
 
 _Statistics
 
+ amax - the maximum along dimension m
+ amin - the minimum along dimension m
 corrcoef - correlation coefficient
 cov - covariance matrix
- amax - the maximum along dimension m
 mean - the mean along dimension m
 median - the median along dimension m
- amin - the minimum along dimension m
 norm - the norm of vector x
 prod - the product along dimension m
 ptp - the max-min along dimension m
@@ -185,12 +185,14 @@
 _Other
 
 angle - the angle of a complex array
- griddata - interpolate irregularly distributed data to a regular grid
- load - load ASCII data into array
+ griddata - interpolate irregularly distributed data to a regular grid
+ load - Deprecated--please use loadtxt.
+ loadtxt - load ASCII data into array.
 polyfit - fit x, y to an n-th order polynomial
 polyval - evaluate an n-th order polynomial
 roots - the roots of the polynomial coefficients in p
- save - save an array to an ASCII file
+ save - Deprecated--please use savetxt.
+ savetxt - save an array to an ASCII file.
 trapz - trapezoidal integration
 
 __end
@@ -198,12 +200,9 @@
 """
 import sys, warnings
 
-from cbook import flatten, is_string_like, exception_to_str, popd, \
+from cbook import flatten, is_string_like, exception_to_str, \
 silent_list, iterable, dedent
 
-import numpy as np
-from numpy import ma
-
 from matplotlib import mpl # pulls in most modules
 
 from matplotlib.dates import date2num, num2date,\
@@ -214,45 +213,38 @@
 DayLocator, HourLocator, MinuteLocator, SecondLocator,\
 rrule, MO, TU, WE, TH, FR, SA, SU, YEARLY, MONTHLY,\
 WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY, relativedelta
-import matplotlib.dates
 
+import matplotlib.dates # Do we need this at all?
+
 # bring all the symbols in so folks can import them from
 # pylab in one fell swoop
 
-from matplotlib.mlab import window_hanning, window_none,\
- conv, detrend, detrend_mean, detrend_none, detrend_linear,\
- polyfit, polyval, entropy, normpdf, griddata,\
- levypdf, find, trapz, prepca, rem, norm, orth, rank,\
- sqrtm, prctile, center_matrix, rk4, exp_safe, amap,\
- sum_flat, mean_flat, rms_flat, l1norm, l2norm, norm, frange,\
- diagonal_matrix, base_repr, binary_repr, log2, ispower2,\
- bivariate_normal, load, save
 
-from matplotlib.mlab import stineman_interp, slopes, \
- stineman_interp, inside_poly, poly_below, poly_between, \
+## We are still importing too many things from mlab; more cleanup is needed.
+
+from matplotlib.mlab import griddata, stineman_interp, slopes, \
+ inside_poly, poly_below, poly_between, \
 is_closed_polygon, path_length, distances_along_curve, vector_lengths
 
-from numpy import *
-from numpy.fft import *
-from numpy.random import *
-from numpy.linalg import *
-
-from matplotlib.mlab import window_hanning, window_none, conv, detrend, demean, \
+from matplotlib.mlab import window_hanning, window_none, detrend, demean, \
 detrend_mean, detrend_none, detrend_linear, entropy, normpdf, levypdf, \
 find, longest_contiguous_ones, longest_ones, prepca, prctile, prctile_rank, \
 center_matrix, rk4, bivariate_normal, get_xyz_where, get_sparse_matrix, dist, \
 dist_point_to_segment, segments_intersect, fftsurr, liaupunov, movavg, \
 save, load, exp_safe, \
- amap, rms_flat, l1norm, l2norm, norm_flat, frange, diagonal_matrix, identity, \
- base_repr, binary_repr, log2, ispower2, fromfunction_kw, rem, norm, orth, rank, sqrtm,\
- mfuncC, approx_real, rec_append_field, rec_drop_fields, rec_join, csv2rec, rec2csv, isvector
+ amap, rms_flat, l1norm, l2norm, norm_flat, frange, identity, \
+ base_repr, binary_repr, log2, ispower2, \
+ rec_append_fields, rec_drop_fields, rec_join, csv2rec, rec2csv, isvector
 
+from numpy import *
+from numpy.fft import *
+from numpy.random import *
+from numpy.linalg import *
 
-
-
-
 from matplotlib.pyplot import *
 
 # provide the recommended module abbrevs in the pylab namespace
 import matplotlib.pyplot as plt
 import numpy as np
+import numpy.ma as ma
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <he...@us...> - 2009年06月13日 21:13:17
Revision: 7216
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7216&view=rev
Author: heeres
Date: 2009年06月13日 21:13:14 +0000 (2009年6月13日)
Log Message:
-----------
mplot3d: fix Axes3D.grid(), add axes3d.grid to matplotlibrc
Modified Paths:
--------------
 trunk/matplotlib/lib/matplotlib/rcsetup.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py
 trunk/matplotlib/matplotlibrc.template
Modified: trunk/matplotlib/lib/matplotlib/rcsetup.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/rcsetup.py	2009年06月13日 16:54:31 UTC (rev 7215)
+++ trunk/matplotlib/lib/matplotlib/rcsetup.py	2009年06月13日 21:13:14 UTC (rev 7216)
@@ -441,6 +441,7 @@
 'axes.unicode_minus' : [True, validate_bool],
 
 'polaraxes.grid' : [True, validate_bool], # display polar grid or not
+ 'axes3d.grid' : [True, validate_bool], # display 3d grid
 
 #legend properties
 'legend.fancybox' : [False,validate_bool],
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py	2009年06月13日 16:54:31 UTC (rev 7215)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py	2009年06月13日 21:13:14 UTC (rev 7216)
@@ -8,7 +8,7 @@
 2D matplotlib figure.
 """
 
-from matplotlib.axes import Axes
+from matplotlib.axes import Axes, rcParams
 from matplotlib import cbook
 from matplotlib.transforms import Bbox
 from matplotlib import collections
@@ -316,6 +316,7 @@
 self.figure.canvas.mpl_disconnect(cid)
 self.cids = []
 Axes.cla(self)
+ self.grid(rcParams['axes3d.grid'])
 
 def _button_press(self, event):
 self.button_pressed = event.button
@@ -482,6 +483,12 @@
 label.update(kwargs)
 return label
 
+ def grid(self, on=True, **kwargs):
+ '''
+ Set / unset 3D grid.
+ '''
+ self._draw_grid = on
+
 def text(self, x, y, z, s, zdir=None):
 '''Add text to the plot.'''
 text = Axes.text(self, x, y, s)
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py	2009年06月13日 16:54:31 UTC (rev 7215)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py	2009年06月13日 21:13:14 UTC (rev 7216)
@@ -43,6 +43,7 @@
 tick.tick1line.set_linestyle('-')
 tick.tick1line.set_marker('')
 tick.tick1line.set_data(tickxs, tickys)
+ tick.gridline.set_data(0, 0)
 
 class Axis(maxis.XAxis):
 
@@ -143,7 +144,8 @@
 
 # filter locations here so that no extra grid lines are drawn
 interval = self.get_view_interval()
- majorLocs = [loc for loc in majorLocs if interval[0] < loc < interval[1]]
+ majorLocs = [loc for loc in majorLocs if \
+ interval[0] < loc < interval[1]]
 self.major.formatter.set_locs(majorLocs)
 majorLabels = [self.major.formatter(val, i)
 for i, val in enumerate(majorLocs)]
@@ -230,9 +232,10 @@
 xyz2[i][newindex] = newval
 
 lines = zip(xyz1, xyz0, xyz2)
- self.gridlines.set_segments(lines)
- self.gridlines.set_color([(0.9,0.9,0.9,1)] * len(lines))
- self.gridlines.draw(renderer, project=True)
+ if self.axes._draw_grid:
+ self.gridlines.set_segments(lines)
+ self.gridlines.set_color([(0.9,0.9,0.9,1)] * len(lines))
+ self.gridlines.draw(renderer, project=True)
 
 # Draw ticks
 tickdir = info['tickdir']
Modified: trunk/matplotlib/matplotlibrc.template
===================================================================
--- trunk/matplotlib/matplotlibrc.template	2009年06月13日 16:54:31 UTC (rev 7215)
+++ trunk/matplotlib/matplotlibrc.template	2009年06月13日 21:13:14 UTC (rev 7216)
@@ -210,6 +210,7 @@
 # rather than hypen. See http://en.wikipedia.org/wiki/Plus_sign#Plus_sign
 
 #polaraxes.grid : True # display grid on polar axes
+#axes3d.grid : True # display grid on 3d axes
 
 ### TICKS
 # see http://matplotlib.sourceforge.net/api/axis_api.html#matplotlib.axis.Tick
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <lee...@us...> - 2009年06月13日 16:54:38
Revision: 7215
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7215&view=rev
Author: leejjoon
Date: 2009年06月13日 16:54:31 +0000 (2009年6月13日)
Log Message:
-----------
Introduce a rotation_mode property for the Text artist
Modified Paths:
--------------
 trunk/matplotlib/CHANGELOG
 trunk/matplotlib/lib/matplotlib/text.py
Added Paths:
-----------
 trunk/matplotlib/examples/pylab_examples/demo_text_rotation_mode.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG	2009年06月13日 12:09:29 UTC (rev 7214)
+++ trunk/matplotlib/CHANGELOG	2009年06月13日 16:54:31 UTC (rev 7215)
@@ -1,3 +1,6 @@
+2009年06月13日 Introduce a rotation_mode property for the Text artist. See
+ examples/pylab_examples/demo_text_rotation_mode.py -JJL
+
 2009年06月07日 add support for bz2 files per sf support request 2794556 -
 JDH
 
Added: trunk/matplotlib/examples/pylab_examples/demo_text_rotation_mode.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/demo_text_rotation_mode.py	 (rev 0)
+++ trunk/matplotlib/examples/pylab_examples/demo_text_rotation_mode.py	2009年06月13日 16:54:31 UTC (rev 7215)
@@ -0,0 +1,45 @@
+
+#clf()
+from mpl_toolkits.axes_grid.axes_grid import AxesGrid
+
+def test_rotation_mode(fig, mode, subplot_location):
+ ha_list = "left center right".split()
+ va_list = "top center baseline bottom".split()
+ grid = AxesGrid(fig, subplot_location,
+ nrows_ncols=(len(va_list), len(ha_list)),
+ share_all=True, aspect=True, #label_mode='1',
+ cbar_mode=None)
+
+ for ha, ax in zip(ha_list, grid.axes_row[-1]):
+ ax.axis["bottom"].label.set_text(ha)
+
+ grid.axes_row[0][1].set_title(mode, size="large")
+
+ for va, ax in zip(va_list, grid.axes_column[0]):
+ ax.axis["left"].label.set_text(va)
+
+ i = 0
+ for va in va_list:
+ for ha in ha_list:
+ ax = grid[i]
+ for axis in ax.axis.values():
+ axis.toggle(ticks=False, ticklabels=False)
+
+ ax.text(0.5, 0.5, "Tpg",
+ size="large", rotation=40,
+ bbox=dict(boxstyle="square,pad=0.",
+ ec="none", fc="0.5", alpha=0.5),
+ ha=ha, va=va,
+ rotation_mode=mode)
+ ax.axvline(0.5)
+ ax.axhline(0.5)
+ i += 1
+
+if 1:
+ import matplotlib.pyplot as plt
+ fig = plt.figure(1, figsize=(5.5,4 ))
+ fig.clf()
+
+ test_rotation_mode(fig, "default", 121)
+ test_rotation_mode(fig, "anchor", 122)
+ plt.show()
Modified: trunk/matplotlib/lib/matplotlib/text.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/text.py	2009年06月13日 12:09:29 UTC (rev 7214)
+++ trunk/matplotlib/lib/matplotlib/text.py	2009年06月13日 16:54:31 UTC (rev 7215)
@@ -69,6 +69,7 @@
 name or fontname string eg, ['Sans' | 'Courier' | 'Helvetica' ...]
 position (x,y)
 rotation [ angle in degrees 'vertical' | 'horizontal'
+ rotation_mode [ None | 'anchor']
 size or fontsize [ size in points | relative size eg 'smaller', 'x-large' ]
 style or fontstyle [ 'normal' | 'italic' | 'oblique']
 text string
@@ -144,6 +145,7 @@
 fontproperties=None, # defaults to FontProperties()
 rotation=None,
 linespacing=None,
+ rotation_mode=None,
 **kwargs
 ):
 """
@@ -175,6 +177,7 @@
 if linespacing is None:
 linespacing = 1.2 # Maybe use rcParam later.
 self._linespacing = linespacing
+ self.set_rotation_mode(rotation_mode)
 self.update(kwargs)
 #self.set_bbox(dict(pad=0))
 
@@ -214,6 +217,24 @@
 'return the text angle as float in degrees'
 return get_rotation(self._rotation) # string_or_number -> number
 
+ def set_rotation_mode(self, m):
+ """
+ set text rotation mode. If "anchor", the un-rotated text
+ will first aligned according to their *ha* and
+ *va*, and then will be rotated with the alignement
+ reference point as a origin. If None (default), the text will be
+ rotated first then will be aligned.
+ """
+ if m is None or m in ["anchor", "default"]:
+ self._rotation_mode = m
+ else:
+ raise ValueError("Unknown rotation_mode : %s" % repr(m))
+
+ def get_rotation_mode(self):
+ "get text rotation mode"
+ return self._rotation_mode
+
+
 def update_from(self, other):
 'Copy properties from other to self'
 Artist.update_from(self, other)
@@ -268,7 +289,7 @@
 # For multiline text, increase the line spacing when the
 # text net-height(excluding baseline) is larger than that
 # of a "l" (e.g., use of superscripts), which seems
- # what TeX does. 
+ # what TeX does.
 
 d_yoffset = max(0, (h-d)-(lp_h-lp_bl))
 
@@ -315,17 +336,34 @@
 halign = self._horizontalalignment
 valign = self._verticalalignment
 
- # compute the text location in display coords and the offsets
- # necessary to align the bbox with that location
- if halign=='center': offsetx = (xmin + width/2.0)
- elif halign=='right': offsetx = (xmin + width)
- else: offsetx = xmin
+ rotation_mode = self.get_rotation_mode()
+ if rotation_mode != "anchor":
+ # compute the text location in display coords and the offsets
+ # necessary to align the bbox with that location
+ if halign=='center': offsetx = (xmin + width/2.0)
+ elif halign=='right': offsetx = (xmin + width)
+ else: offsetx = xmin
 
- if valign=='center': offsety = (ymin + height/2.0)
- elif valign=='top': offsety = (ymin + height)
- elif valign=='baseline': offsety = (ymin + height) - baseline
- else: offsety = ymin
+ if valign=='center': offsety = (ymin + height/2.0)
+ elif valign=='top': offsety = (ymin + height)
+ elif valign=='baseline': offsety = (ymin + height) - baseline
+ else: offsety = ymin
+ else:
+ xmin1, ymin1 = cornersHoriz[0]
+ xmax1, ymax1 = cornersHoriz[2]
 
+ if halign=='center': offsetx = (xmin1 + xmax1)/2.0
+ elif halign=='right': offsetx = xmax1
+ else: offsetx = xmin1
+
+ if valign=='center': offsety = (ymin1 + ymax1)/2.0
+ elif valign=='top': offsety = ymax1
+ elif valign=='baseline': offsety = ymax1 - baseline
+ else: offsety = ymin1
+
+ offsetx, offsety = M.transform_point((offsetx, offsety))
+
+
 xmin -= offsetx
 ymin -= offsety
 
@@ -1562,8 +1600,8 @@
 See :meth:`set_annotation_clip` for the meaning of return values.
 """
 return self._annotation_clip
- 
 
+
 def update_positions(self, renderer):
 "Update the pixel positions of the annotated point and the text."
 xy_pixel = self._get_position_xy(renderer)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7214
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7214&view=rev
Author: jouni
Date: 2009年06月13日 12:09:29 +0000 (2009年6月13日)
Log Message:
-----------
Call current mplot3d demos from backend_driver.py
Modified Paths:
--------------
 trunk/matplotlib/examples/tests/backend_driver.py
Modified: trunk/matplotlib/examples/tests/backend_driver.py
===================================================================
--- trunk/matplotlib/examples/tests/backend_driver.py	2009年06月12日 19:41:58 UTC (rev 7213)
+++ trunk/matplotlib/examples/tests/backend_driver.py	2009年06月13日 12:09:29 UTC (rev 7214)
@@ -243,7 +243,18 @@
 
 mplot3d_dir = os.path.join('..', 'mplot3d')
 mplot3d_files = [
- 'demo.py',
+ '2dcollections3d_demo.py',
+ 'bars3d_demo.py',
+ 'contour3d_demo.py',
+ 'contour3d_demo2.py',
+ 'contourf3d_demo.py',
+ 'lines3d_demo.py',
+ 'polys3d_demo.py',
+ 'scatter3d_demo.py',
+ 'surface3d_demo.py',
+ 'surface3d_demo2.py',
+ 'text3d_demo.py',
+ 'wire3d_demo.py',
 ]
 
 # dict from dir to files we know we don't want to test (eg examples
@@ -273,6 +284,7 @@
 report_missing(pylab_dir, pylab_files)
 report_missing(api_dir, api_files)
 report_missing(units_dir, units_files)
+report_missing(mplot3d_dir, mplot3d_files)
 
 files = (
 [os.path.join(api_dir, fname) for fname in api_files] +
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月12日 19:43:02
Revision: 7213
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7213&view=rev
Author: jdh2358
Date: 2009年06月12日 19:41:58 +0000 (2009年6月12日)
Log Message:
-----------
readded the long lost IndexFormatter
Modified Paths:
--------------
 trunk/matplotlib/examples/pylab_examples/manual_axis.py
 trunk/matplotlib/lib/matplotlib/ticker.py
Modified: trunk/matplotlib/examples/pylab_examples/manual_axis.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/manual_axis.py	2009年06月12日 13:46:48 UTC (rev 7212)
+++ trunk/matplotlib/examples/pylab_examples/manual_axis.py	2009年06月12日 19:41:58 UTC (rev 7213)
@@ -1,10 +1,11 @@
 """
-matplotlib is fairly rigid about how and where it draws it xaxis and
-yaxis, and it is a frequent request to be able to place these in other
-locations. While it is not possible to customize matplotlib's
-internal axis objects in this way, it is not too hard to simply turn
-them off and draw your own axis lines, tick lines, and tick labels
-where and how you want them
+The techniques here are no longer required with the new support for
+spines in matplotlib -- see
+http://matplotlib.sourceforge.net/examples/pylab_examples/spine_placement_demo.html.
+
+This example should be considered deprecated and is left just for demo
+purposes for folks wanting to make a pseudo-axis
+
 """
 
 import numpy as np
Modified: trunk/matplotlib/lib/matplotlib/ticker.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/ticker.py	2009年06月12日 13:46:48 UTC (rev 7212)
+++ trunk/matplotlib/lib/matplotlib/ticker.py	2009年06月12日 19:41:58 UTC (rev 7213)
@@ -80,6 +80,9 @@
 :class:`NullFormatter`
 no labels on the ticks
 
+:class:`IndexFormatter`
+ set the strings from a list of labels
+
 :class:`FixedFormatter`
 set the strings manually for the labels
 
@@ -203,6 +206,24 @@
 """
 return s
 
+class IndexFormatter:
+ """
+ format the position x to the nearest i-th label where i=int(x+0.5)
+ """
+ def __init__(self, labels):
+ self.labels = labels
+ self.n = len(labels)
+ def __call__(self, x, pos=None):
+ 'Return the format for tick val x at position pos; pos=None indicated unspecified'
+ i = int(x+0.5)
+ if i<0:
+ return ''
+ elif i>=self.n:
+ return ''
+ else:
+ return self.labels[i]
+
+
 class NullFormatter(Formatter):
 'Always return the empty string'
 def __call__(self, x, pos=None):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7211
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7211&view=rev
Author: mdboom
Date: 2009年06月12日 13:39:59 +0000 (2009年6月12日)
Log Message:
-----------
Fix PDFs for use with ReportLab's pedantic parser
Modified Paths:
--------------
 branches/v0_98_5_maint/lib/matplotlib/backends/backend_pdf.py
Modified: branches/v0_98_5_maint/lib/matplotlib/backends/backend_pdf.py
===================================================================
--- branches/v0_98_5_maint/lib/matplotlib/backends/backend_pdf.py	2009年06月10日 21:28:07 UTC (rev 7210)
+++ branches/v0_98_5_maint/lib/matplotlib/backends/backend_pdf.py	2009年06月12日 13:39:59 UTC (rev 7211)
@@ -1177,7 +1177,10 @@
 'No offset for object %d (%s)' % (i, name)
 borken = True
 else:
- self.write("%010d %05d n \n" % (offset, generation))
+ if name == 'the zero object':
+ self.write("%010d %05d f \n" % (offset, generation))
+ else:
+ self.write("%010d %05d n \n" % (offset, generation))
 i += 1
 if borken:
 raise AssertionError, 'Indirect object does not exist'
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2009年06月12日 14:03:31
Revision: 7212
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7212&view=rev
Author: mdboom
Date: 2009年06月12日 13:46:48 +0000 (2009年6月12日)
Log Message:
-----------
Merged revisions 7209,7211 via svnmerge from 
https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_98_5_maint
........
 r7209 | jdh2358 | 2009年06月10日 13:39:22 -0400 (2009年6月10日) | 1 line
 
 remove gw32c from setupext
........
 r7211 | mdboom | 2009年06月12日 09:39:59 -0400 (2009年6月12日) | 2 lines
 
 Fix PDFs for use with ReportLab's pedantic parser
........
Modified Paths:
--------------
 trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py
Property Changed:
----------------
 trunk/matplotlib/
 trunk/matplotlib/doc/pyplots/README
 trunk/matplotlib/doc/sphinxext/gen_gallery.py
 trunk/matplotlib/doc/sphinxext/gen_rst.py
 trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py
 trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py
 trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
Property changes on: trunk/matplotlib
___________________________________________________________________
Modified: svnmerge-integrated
 - /branches/v0_91_maint:1-6428 /branches/v0_98_5_maint:1-7176
 + /branches/v0_91_maint:1-6428 /branches/v0_98_5_maint:1-7211
Modified: svn:mergeinfo
 - /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
Property changes on: trunk/matplotlib/doc/pyplots/README
___________________________________________________________________
Modified: svn:mergeinfo
 - /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
Property changes on: trunk/matplotlib/doc/sphinxext/gen_gallery.py
___________________________________________________________________
Modified: svn:mergeinfo
 - /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
Property changes on: trunk/matplotlib/doc/sphinxext/gen_rst.py
___________________________________________________________________
Modified: svn:mergeinfo
 - /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py	2009年06月12日 13:39:59 UTC (rev 7211)
+++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py	2009年06月12日 13:46:48 UTC (rev 7212)
@@ -1215,7 +1215,10 @@
 'No offset for object %d (%s)' % (i, name)
 borken = True
 else:
- self.write("%010d %05d n \n" % (offset, generation))
+ if name == 'the zero object':
+ self.write("%010d %05d f \n" % (offset, generation))
+ else:
+ self.write("%010d %05d n \n" % (offset, generation))
 i += 1
 if borken:
 raise AssertionError, 'Indirect object does not exist'
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py
___________________________________________________________________
Modified: svn:mergeinfo
 - /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py
___________________________________________________________________
Modified: svn:mergeinfo
 - /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
___________________________________________________________________
Modified: svn:mergeinfo
 - /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176
 + /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771
/branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月10日 21:28:17
Revision: 7210
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7210&view=rev
Author: jdh2358
Date: 2009年06月10日 21:28:07 +0000 (2009年6月10日)
Log Message:
-----------
Modified Paths:
--------------
 trunk/matplotlib/release/win32/Makefile
 trunk/matplotlib/release/win32/data/setupwin.py
Modified: trunk/matplotlib/release/win32/Makefile
===================================================================
--- trunk/matplotlib/release/win32/Makefile	2009年06月10日 17:39:22 UTC (rev 7209)
+++ trunk/matplotlib/release/win32/Makefile	2009年06月10日 21:28:07 UTC (rev 7210)
@@ -10,7 +10,7 @@
 
 ## You shouldn't need to configure past this point
 
-CFLAGS = -Os
+CFLAGS = -Os -D_ftime=ftime64 -DPNG_NO_READ_tIME -DPNG_NO_WRITE_tIME
 
 
 PY_INCLUDE = "${WINSRCDIR}\\zlib-${ZLIBVERSION};${WINSRCDIR}/libpng-${PNGVERSION};${WINSRCDIR}/freetype-${FREETYPEVERSION}/include;${WINSRCDIR}/tcl${TCLTKVERSION}/generic;${WINSRCDIR}/tcl${TCLTKVERSION}/win;${WINSRCDIR}/tk${TCLTKVERSION}/generic;${WINSRCDIR}/tk${TCLTKVERSION}/win;${WINSRCDIR}/tk${TCLTKVERSION}/xlib"
@@ -36,7 +36,7 @@
 	rm -rf zlib-${ZLIBVERSION}
 	tar xvfz zlib-${ZLIBVERSION}.tar.gz
 	cd zlib-${ZLIBVERSION} &&\
-	export CFLAGS=${CFLAGS} &&\
+	export CFLAGS="${CFLAGS}" &&\
 	./configure &&\
 	make -j3
 
@@ -88,8 +88,9 @@
 	cd matplotlib-${MPLVERSION} &&\
 	rm -rf build &&\
 	cp ../data/setup*.* . &&\
-	${PYTHON} setupwin.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_wininst 
-	${PYTHON} setupwinegg.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_egg
+	export CFLAGS="${CFLAGS}" &&\
+	${PYTHON} setupwin.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_wininst 
+	#${PYTHON} setupwinegg.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_egg
 
 
 inplace:
@@ -102,7 +103,10 @@
 	cd matplotlib-${MPLVERSION}/lib &&\
 	${PYTHON} -c 'import matplotlib; matplotlib.use("Agg"); from pylab import *; print matplotlib.__file__; plot([1,2,3]); savefig("test.png")'
 
-test:
+test_png:
 	${PYTHON} -c 'import matplotlib; matplotlib.use("Agg"); from pylab import *; print matplotlib.__file__; plot([1,2,3]); savefig("test.png")'
 
+test_plot:
+	${PYTHON} -c 'import matplotlib; from pylab import *; print matplotlib.__file__; plot([1,2,3]); show()'
+
 all: fetch_deps dependencies installers
Modified: trunk/matplotlib/release/win32/data/setupwin.py
===================================================================
--- trunk/matplotlib/release/win32/data/setupwin.py	2009年06月10日 17:39:22 UTC (rev 7209)
+++ trunk/matplotlib/release/win32/data/setupwin.py	2009年06月10日 21:28:07 UTC (rev 7210)
@@ -2,9 +2,9 @@
 
 try:
 	# Python 2.6
-	# Replace the msvcr func to return an 'msvcr71'
+	# Replace the msvcr func to return an []
 	cygwinccompiler.get_msvcr
-	cygwinccompiler.get_msvcr = lambda: ['msvcr71']
+	cygwinccompiler.get_msvcr = lambda: []
 
 except AttributeError:
 	pass
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月10日 17:40:23
Revision: 7209
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7209&view=rev
Author: jdh2358
Date: 2009年06月10日 17:39:22 +0000 (2009年6月10日)
Log Message:
-----------
remove gw32c from setupext
Modified Paths:
--------------
 branches/v0_98_5_maint/setupext.py
Modified: branches/v0_98_5_maint/setupext.py
===================================================================
--- branches/v0_98_5_maint/setupext.py	2009年06月10日 17:39:01 UTC (rev 7208)
+++ branches/v0_98_5_maint/setupext.py	2009年06月10日 17:39:22 UTC (rev 7209)
@@ -549,9 +549,13 @@
 add_base_flags(module)
 module.libraries.append('z')
 
- if sys.platform == 'win32' and win32_compiler == 'mingw32':
- module.libraries.append('gw32c')
+ # JDH: this file does not appear to be shipped w/ mingw32. I saw
+ # some discussion on the web that libpng needs it -- could this be
+ # the problem we are having with libpng?
 
+ #if sys.platform == 'win32' and win32_compiler == 'mingw32':
+ # module.libraries.append('gw32c')
+
 # put this last for library link order
 module.libraries.extend(std_libs)
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月10日 17:39:34
Revision: 7208
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7208&view=rev
Author: jdh2358
Date: 2009年06月10日 17:39:01 +0000 (2009年6月10日)
Log Message:
-----------
attempt to build win32 installers
Modified Paths:
--------------
 trunk/matplotlib/release/win32/Makefile
 trunk/matplotlib/release/win32/data/setupwin.py
 trunk/matplotlib/release/win32/data/setupwinegg.py
Modified: trunk/matplotlib/release/win32/Makefile
===================================================================
--- trunk/matplotlib/release/win32/Makefile	2009年06月10日 16:41:06 UTC (rev 7207)
+++ trunk/matplotlib/release/win32/Makefile	2009年06月10日 17:39:01 UTC (rev 7208)
@@ -1,28 +1,17 @@
-PYTHON = C:/Python26/python.exe
+PYDIR = C:/Python26
+PYTHON = ${PYDIR}/python.exe
 SRCDIR = ${PWD}
 WINSRCDIR = `${PWD}/data/mingw_path.sh ${PWD}`
 ZLIBVERSION = 1.2.3
-PNGVERSION = 1.2.23
+PNGVERSION = 1.2.36
 FREETYPEVERSION = 2.3.9
-#TCLTKVERSION = 8.4.19
 TCLTKVERSION = 8.5.7
-MPLVERSION = 0.98.6svn
+MPLVERSION = 0.98.5.3
 
 ## You shouldn't need to configure past this point
 
-CFLAGS = -Os
-CFLAGS += -I${SRCDIR}/zlib-${ZLIBVERSION}
-CFLAGS += -I${SRCDIR}/libpng-${PNGVERSION}
-CFLAGS += -I${SRCDIR}/freetype-${FREETYPEVERSION}/include
-CFLAGS += -I${SRCDIR}/tcl${TCLTKVERSION}-src/generic
-CFLAGS += -I${SRCDIR}/tcl${TCLTKVERSION}-src/win
-CFLAGS += -I${SRCDIR}/tk${TCLTKVERSION}-src/generic
-CFLAGS += -I${SRCDIR}/tk${TCLTKVERSION}-src/win
-CFLAGS += -I${SRCDIR}/tk${TCLTKVERSION}-src/X11
+CFLAGS = -Os
 
-LDFLAGS = -L${SRCDIR}/zlib-${ZLIBVERSION}
-LDFLAGS += -L${SRCDIR}/libpng-${PNGVERSION}
-LDFLAGS += -L${SRCDIR}/freetype-${FREETYPEVERSION}
 
 PY_INCLUDE = "${WINSRCDIR}\\zlib-${ZLIBVERSION};${WINSRCDIR}/libpng-${PNGVERSION};${WINSRCDIR}/freetype-${FREETYPEVERSION}/include;${WINSRCDIR}/tcl${TCLTKVERSION}/generic;${WINSRCDIR}/tcl${TCLTKVERSION}/win;${WINSRCDIR}/tk${TCLTKVERSION}/generic;${WINSRCDIR}/tk${TCLTKVERSION}/win;${WINSRCDIR}/tk${TCLTKVERSION}/xlib"
 
@@ -47,15 +36,21 @@
 	rm -rf zlib-${ZLIBVERSION}
 	tar xvfz zlib-${ZLIBVERSION}.tar.gz
 	cd zlib-${ZLIBVERSION} &&\
+	export CFLAGS=${CFLAGS} &&\
 	./configure &&\
 	make -j3
 
+# for reasons not clear to me, part of png compilation was failing
+# because it could not find zlib.h, even with the CFLAGS which point
+# to it and even with tryting to pass --includedir to configure. So I
+# manually copy the zlib *.h files into the png dir - JDH
 png: zlib
 	rm -rf libpng-${PNGVERSION}
-	tar xvfj libpng-${PNGVERSION}.tar.bz2
+	tar xvfj libpng-${PNGVERSION}.tar.bz2	
 	cd libpng-${PNGVERSION} &&\
-	export CFLAGS="${CFLAGS}" &&\
-	export LDFLAGS="${LDFLAGS}" &&\
+	cp ${SRCDIR}/zlib-${ZLIBVERSION}/*.h . && \
+	export CFLAGS="${CFLAGS} -I${SRCDIR}/zlib-${ZLIBVERSION}" &&\
+	export LDFLAGS="-L${SRCDIR}/zlib-${ZLIBVERSION}" &&\
 	./configure --disable-shared &&\
 	make -j3 &&\
 	cp .libs/libpng.a .
@@ -69,6 +64,16 @@
 	mingw32-make -j3 &&\
 	cp objs/libfreetype.a .
 
+freetype_hide:
+	rm -rf freetype-${FREETYPEVERSION}
+	tar xvfj freetype-${FREETYPEVERSION}.tar.bz2
+	cd freetype-${FREETYPEVERSION} &&\
+	export CFLAGS=${CFLAGS} &&\
+	./configure --disable-shared &&\
+	cp builds/win32/w32-mingw32.mk config.mk &&\
+	make -j3 &&\
+	cp objs/libfreetype.a .
+
 tcltk:
 	rm -rf tcl${TCLTKVERSION}
 	rm -rf tk${TCLTKVERSION}
@@ -83,7 +88,21 @@
 	cd matplotlib-${MPLVERSION} &&\
 	rm -rf build &&\
 	cp ../data/setup*.* . &&\
-	${PYTHON} setupwin.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_wininst &&\
+	${PYTHON} setupwin.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_wininst 
 	${PYTHON} setupwinegg.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} bdist_egg
 
+
+inplace:
+	#rm -rf matplotlib-${MPLVERSION}
+	#tar xvzf matplotlib-${MPLVERSION}.tar.gz
+	cd matplotlib-${MPLVERSION} &&\
+	rm -rf build lib/matplotlib/*.pyd lib/matplotlib/*.pyc lib/matplotlib/backends/*.pyd lib/matplotlib/backends/*.pyc &&\
+	cp ../data/setup*.* . &&\
+	${PYTHON} setup.py build_ext -c mingw32 -I ${PY_INCLUDE} -L ${PY_LINKER} --inplace 
+	cd matplotlib-${MPLVERSION}/lib &&\
+	${PYTHON} -c 'import matplotlib; matplotlib.use("Agg"); from pylab import *; print matplotlib.__file__; plot([1,2,3]); savefig("test.png")'
+
+test:
+	${PYTHON} -c 'import matplotlib; matplotlib.use("Agg"); from pylab import *; print matplotlib.__file__; plot([1,2,3]); savefig("test.png")'
+
 all: fetch_deps dependencies installers
Modified: trunk/matplotlib/release/win32/data/setupwin.py
===================================================================
--- trunk/matplotlib/release/win32/data/setupwin.py	2009年06月10日 16:41:06 UTC (rev 7207)
+++ trunk/matplotlib/release/win32/data/setupwin.py	2009年06月10日 17:39:01 UTC (rev 7208)
@@ -2,16 +2,11 @@
 
 try:
 	# Python 2.6
-	# Replace the msvcr func to return an empty list
+	# Replace the msvcr func to return an 'msvcr71'
 	cygwinccompiler.get_msvcr
-	cygwinccompiler.get_msvcr = lambda: []
+	cygwinccompiler.get_msvcr = lambda: ['msvcr71']
 
 except AttributeError:
-	# Before Python 2.6
-	# Wrap the init func to clear to dll libs
-	def new_init(self, **kwargs):
-		cygwinccompiler.CygwinCCompiler.__init__(self, **kwargs)
-		self.dll_libraries = []
-	cygwinccompiler.CygwinCCompiler.__init__ = new_init
+	pass
 
 execfile('setup.py')
Modified: trunk/matplotlib/release/win32/data/setupwinegg.py
===================================================================
--- trunk/matplotlib/release/win32/data/setupwinegg.py	2009年06月10日 16:41:06 UTC (rev 7207)
+++ trunk/matplotlib/release/win32/data/setupwinegg.py	2009年06月10日 17:39:01 UTC (rev 7208)
@@ -7,12 +7,7 @@
 	cygwinccompiler.get_msvcr = lambda: []
 
 except AttributeError:
-	# Before Python 2.6
-	# Wrap the init func to clear to dll libs
-	def new_init(self, **kwargs):
-		cygwinccompiler.CygwinCCompiler.__init__(self, **kwargs)
-		self.dll_libraries = []
-	cygwinccompiler.CygwinCCompiler.__init__ = new_init
+	pass
 
 from setuptools import setup
 execfile('setup.py',
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2009年06月10日 16:41:07
Revision: 7207
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7207&view=rev
Author: mdboom
Date: 2009年06月10日 16:41:06 +0000 (2009年6月10日)
Log Message:
-----------
Bug: 2671465 quiver plot adds unwanted lines to image
Modified Paths:
--------------
 trunk/matplotlib/lib/matplotlib/quiver.py
Modified: trunk/matplotlib/lib/matplotlib/quiver.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/quiver.py	2009年06月09日 22:40:35 UTC (rev 7206)
+++ trunk/matplotlib/lib/matplotlib/quiver.py	2009年06月10日 16:41:06 UTC (rev 7207)
@@ -500,6 +500,10 @@
 minsh = self.minshaft * self.headlength
 N = len(length)
 length = length.reshape(N, 1)
+ # This number is chosen based on when pixel values overflow in Agg
+ # causing rendering errors
+ length = np.minimum(length, 2 ** 16)
+
 # x, y: normal horizontal arrow
 x = np.array([0, -self.headaxislength,
 -self.headlength, 0], np.float64)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <he...@us...> - 2009年06月09日 22:41:32
Revision: 7206
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7206&view=rev
Author: heeres
Date: 2009年06月09日 22:40:35 +0000 (2009年6月09日)
Log Message:
-----------
mplot3d: make Poly3DCollection ScalarMappable, support in Axes3D.plot_surface.
Fix-up and extend contours. Add examples.
Modified Paths:
--------------
 trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst
 trunk/matplotlib/examples/mplot3d/surface3d_demo.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
Added Paths:
-----------
 trunk/matplotlib/examples/mplot3d/contour3d_demo2.py
 trunk/matplotlib/examples/mplot3d/surface3d_demo2.py
Modified: trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst	2009年06月09日 16:47:46 UTC (rev 7205)
+++ trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst	2009年06月09日 22:40:35 UTC (rev 7206)
@@ -38,12 +38,14 @@
 .. automethod:: Axes3D.plot_surface
 
 .. plot:: mpl_examples/mplot3d/surface3d_demo.py
+.. plot:: mpl_examples/mplot3d/surface3d_demo2.py
 
 Contour plots
 =============
 .. automethod:: Axes3D.contour
 
 .. plot:: mpl_examples/mplot3d/contour3d_demo.py
+.. plot:: mpl_examples/mplot3d/contour3d_demo2.py
 
 Filled contour plots
 ====================
Added: trunk/matplotlib/examples/mplot3d/contour3d_demo2.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/contour3d_demo2.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/contour3d_demo2.py	2009年06月09日 22:40:35 UTC (rev 7206)
@@ -0,0 +1,12 @@
+from mpl_toolkits.mplot3d import axes3d
+import pylab
+import random
+
+fig = pylab.figure()
+ax = axes3d.Axes3D(fig)
+X, Y, Z = axes3d.get_test_data(0.05)
+cset = ax.contour(X, Y, Z, 16, extend3d=True)
+ax.clabel(cset, fontsize=9, inline=1)
+
+pylab.show()
+
Modified: trunk/matplotlib/examples/mplot3d/surface3d_demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/surface3d_demo.py	2009年06月09日 16:47:46 UTC (rev 7205)
+++ trunk/matplotlib/examples/mplot3d/surface3d_demo.py	2009年06月09日 22:40:35 UTC (rev 7206)
@@ -1,16 +1,17 @@
 from mpl_toolkits.mplot3d import Axes3D
+from matplotlib import cm
 import pylab
 import random
 import numpy as np
 
 fig = pylab.figure()
 ax = Axes3D(fig)
-X = np.arange(-5, 5, 0.5)
-Y = np.arange(-5, 5, 0.5)
+X = np.arange(-5, 5, 0.25)
+Y = np.arange(-5, 5, 0.25)
 X, Y = np.meshgrid(X, Y)
 R = np.sqrt(X**2 + Y**2)
 Z = np.sin(R)
-ax.plot_surface(X, Y, Z, rstride=1, cstride=1, color='forestgreen')
+ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet)
 
 pylab.show()
 
Added: trunk/matplotlib/examples/mplot3d/surface3d_demo2.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/surface3d_demo2.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/surface3d_demo2.py	2009年06月09日 22:40:35 UTC (rev 7206)
@@ -0,0 +1,18 @@
+from mpl_toolkits.mplot3d import Axes3D
+import pylab
+import random
+import numpy as np
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+
+u = np.linspace(0, 2 * np.pi, 100)
+v = np.linspace(0, np.pi, 100)
+
+x = 10 * np.outer(np.cos(u), np.sin(v))
+y = 10 * np.outer(np.sin(u), np.sin(v))
+z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
+ax.plot_surface(x, y, z, rstride=4, cstride=4, color='b')
+
+pylab.show()
+
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py	2009年06月09日 16:47:46 UTC (rev 7205)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py	2009年06月09日 22:40:35 UTC (rev 7206)
@@ -10,6 +10,7 @@
 from matplotlib import lines, text as mtext, path as mpath, colors as mcolors
 from matplotlib.collections import Collection, LineCollection, \
 PolyCollection, PatchCollection
+from matplotlib.cm import ScalarMappable
 from matplotlib.patches import Patch
 from matplotlib.colors import Normalize
 from matplotlib.cbook import iterable
@@ -111,26 +112,30 @@
 line.__class__ = Line3D
 line.set_3d_properties(zs, zdir)
 
-def path_to_3d_segment(path, z=0, zdir='z'):
+def path_to_3d_segment(path, zs=0, zdir='z'):
 '''Convert a path to a 3D segment.'''
+
+ if not iterable(zs):
+ zs = [zs] * len(path)
+
 seg = []
- for (pathseg, code) in path.iter_segments():
- seg.append(pathseg)
- seg3d = [juggle_axes(x, y, z, zdir) for (x, y) in seg]
+ pathsegs = path.iter_segments(simplify=False, curves=False)
+ for (((x, y), code), z) in zip(pathsegs, zs):
+ seg.append((x, y, z))
+ seg3d = [juggle_axes(x, y, z, zdir) for (x, y, z) in seg]
 return seg3d
 
 def paths_to_3d_segments(paths, zs=0, zdir='z'):
- '''Convert paths from a collection object to 3D segments.'''
+ '''
+ Convert paths from a collection object to 3D segments.
+ '''
 
- try:
- zs = float(zs)
+ if not iterable(zs):
 zs = [zs] * len(paths)
- except:
- pass
 
 segments = []
- for path, z in zip(paths, zs):
- segments.append(path_to_3d_segment(path, z, zdir))
+ for path, pathz in zip(paths, zs):
+ segments.append(path_to_3d_segment(path, pathz, zdir))
 return segments
 
 class Line3DCollection(LineCollection):
@@ -255,8 +260,17 @@
 '''
 
 def __init__(self, verts, *args, **kwargs):
+ '''
+ Create a Poly3DCollection.
+
+ *verts* should contain 3D coordinates.
+
+ Note that this class does a bit of magic with the _facecolors
+ and _edgecolors properties.
+ '''
+
 PolyCollection.__init__(self, verts, *args, **kwargs)
- self.set_3d_properties()
+ self._zsort = 1
 
 def get_vector(self, segments3d):
 """Optimize points for projection"""
@@ -276,6 +290,7 @@
 self._sort_zpos = min(zs)
 
 def set_verts(self, verts, closed=True):
+ '''Set 3D vertices.'''
 self.get_vector(verts)
 # 2D verts will be updated at draw time
 PolyCollection.set_verts(self, [], closed)
@@ -283,40 +298,73 @@
 def set_3d_properties(self):
 self._zsort = 1
 self._facecolors3d = PolyCollection.get_facecolors(self)
- self._edgecolors3d = self.get_edgecolors()
+ self._edgecolors3d = PolyCollection.get_edgecolors(self)
 
 def do_3d_projection(self, renderer):
+ '''
+ Perform the 3D projection for this object.
+ '''
+
+ if self._A is not None:
+ self.update_scalarmappable()
+ self._facecolors3d = self._facecolors
+
 txs, tys, tzs = proj3d.proj_transform_vec(self._vec, renderer.M)
 xyzlist = [(txs[si:ei], tys[si:ei], tzs[si:ei]) \
 for si, ei in self._segis]
- colors = self._facecolors3d
 
+ # This extra fuss is to re-order face / edge colors
+ cface = self._facecolors3d
+ if len(self._edgecolors3d) != len(cface):
+ cedge = cface
+ else:
+ cedge = self._edgecolors3d
+
 # if required sort by depth (furthest drawn first)
 if self._zsort:
- z_segments_2d = [(min(zs), zip(xs, ys), c) for
- (xs, ys, zs), c in zip(xyzlist, colors)]
+ z_segments_2d = [(min(zs), zip(xs, ys), fc, ec) for
+ (xs, ys, zs), fc, ec in zip(xyzlist, cface, cedge)]
 z_segments_2d.sort()
 z_segments_2d.reverse()
 else:
 raise ValueError, "whoops"
- segments_2d = [s for z, s, c in z_segments_2d]
- colors = [c for z, s, c in z_segments_2d]
+
+ segments_2d = [s for z, s, fc, ec in z_segments_2d]
 PolyCollection.set_verts(self, segments_2d)
- self._facecolors2d = colors
 
+ self._facecolors2d = [fc for z, s, fc, ec in z_segments_2d]
+ if len(self._edgecolors3d) == len(cface):
+ self._edgecolors2d = [ec for z, s, fc, ec in z_segments_2d]
+ else:
+ self._edgecolors2d = self._edgecolors3d
+
 # Return zorder value
 zvec = np.array([[0], [0], [self._sort_zpos], [1]])
 ztrans = proj3d.proj_transform_vec(zvec, renderer.M)
 return ztrans[2][0]
 
+ def set_facecolor(self, colors):
+ PolyCollection.set_facecolor(self, colors)
+ self._facecolors3d = PolyCollection.get_facecolor(self)
+ set_facecolors = set_facecolor
+
+ def set_edgecolor(self, colors):
+ PolyCollection.set_edgecolor(self, colors)
+ self._edgecolors3d = PolyCollection.get_edgecolor(self)
+ set_edgecolors = set_edgecolor
+
 def get_facecolors(self):
 return self._facecolors2d
 get_facecolor = get_facecolors
 
+ def get_edgecolors(self):
+ return self._edgecolors2d
+ get_edgecolor = get_edgecolors
+
 def draw(self, renderer):
 return Collection.draw(self, renderer)
 
-def poly_collection_2d_to_3d(col, zs=None, zdir='z'):
+def poly_collection_2d_to_3d(col, zs=0, zdir='z'):
 """Convert a PolyCollection to a Poly3DCollection object."""
 segments_3d = paths_to_3d_segments(col.get_paths(), zs, zdir)
 col.__class__ = Poly3DCollection
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py	2009年06月09日 16:47:46 UTC (rev 7205)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py	2009年06月09日 22:40:35 UTC (rev 7206)
@@ -541,6 +541,10 @@
 def plot_surface(self, X, Y, Z, *args, **kwargs):
 '''
 Create a surface plot.
+
+ By default it will be colored in shades of a solid color,
+ but it also supports color mapping by supplying the *cmap*
+ argument.
 
 ========== ================================================
 Argument Description
@@ -550,6 +554,7 @@
 *rstride* Array row stride (step size)
 *cstride* Array column stride (step size)
 *color* Color of the surface patches
+ *cmap* A colormap for the surface patches.
 ========== ================================================
 '''
 
@@ -562,9 +567,11 @@
 
 color = kwargs.pop('color', 'b')
 color = np.array(colorConverter.to_rgba(color))
+ cmap = kwargs.get('cmap', None)
 
 polys = []
- boxes = []
+ normals = []
+ avgz = []
 for rs in np.arange(0, rows-1, rstride):
 for cs in np.arange(0, cols-1, cstride):
 ps = []
@@ -579,31 +586,53 @@
 corners.append([ztop[0], ztop[-1], zbase[0], zbase[-1]])
 z = np.concatenate((ztop, zleft, zbase, zright))
 ps.append(z)
- boxes.append(map(np.array, zip(*corners)))
- polys.append(zip(*ps))
 
- lines = []
+ # The construction leaves the array with duplicate points, which
+ # are removed here.
+ ps = zip(*ps)
+ lastp = np.array([])
+ ps2 = []
+ avgzsum = 0.0
+ for p in ps:
+ if p != lastp:
+ ps2.append(p)
+ lastp = p
+ avgzsum += p[2]
+ polys.append(ps2)
+ avgz.append(avgzsum / len(ps2))
+
+ v1 = np.array(ps2[0]) - np.array(ps2[1])
+ v2 = np.array(ps2[2]) - np.array(ps2[0])
+ normals.append(np.cross(v1, v2))
+
+ polyc = art3d.Poly3DCollection(polys, *args, **kwargs)
+ if cmap is not None:
+ polyc.set_array(np.array(avgz))
+ polyc.set_linewidth(0)
+ else:
+ colors = self._shade_colors(color, normals)
+ polyc.set_facecolors(colors)
+
+ self.add_collection(polyc)
+ self.auto_scale_xyz(X, Y, Z, had_data)
+
+ return polyc
+
+ def _shade_colors(self, color, normals):
 shade = []
- for box in boxes:
- n = proj3d.cross(box[0]-box[1],
- box[0]-box[2])
- n = n/proj3d.mod(n)*5
+ for n in normals:
+ n = n / proj3d.mod(n) * 5
 shade.append(np.dot(n, [-1, -1, 0.5]))
- lines.append((box[0], n+box[0]))
 
 shade = np.array(shade)
 mask = ~np.isnan(shade)
 norm = Normalize(min(shade[mask]), max(shade[mask]))
 
- colors = [color * (0.5+norm(v)*0.5) for v in shade]
- for c in colors: c[3] = 1
- polyc = art3d.Poly3DCollection(polys, facecolors=colors, \
- *args, **kwargs)
- polyc._zsort = 1
- self.add_collection(polyc)
+ color = color.copy()
+ color[3] = 1
+ colors = [color * (0.5 + norm(v) * 0.5) for v in shade]
 
- self.auto_scale_xyz(X, Y, Z, had_data)
- return polyc
+ return colors
 
 def plot_wireframe(self, X, Y, Z, *args, **kwargs):
 '''
@@ -653,21 +682,78 @@
 
 return linec
 
- def contour(self, X, Y, Z, *args, **kwargs):
+ def _3d_extend_contour(self, cset, stride=5):
 '''
+ Extend a contour in 3D by creating 
+ '''
+
+ levels = cset.levels
+ colls = cset.collections
+ dz = (levels[1] - levels[0]) / 2
+
+ for z, linec in zip(levels, colls):
+ topverts = art3d.paths_to_3d_segments(linec.get_paths(), z - dz)
+ botverts = art3d.paths_to_3d_segments(linec.get_paths(), z + dz)
+
+ color = linec.get_color()[0]
+
+ polyverts = []
+ normals = []
+ nsteps = round(len(topverts[0]) / stride)
+ stepsize = (len(topverts[0]) - 1) / (nsteps - 1)
+ for i in range(int(round(nsteps)) - 1):
+ i1 = int(round(i * stepsize))
+ i2 = int(round((i + 1) * stepsize))
+ polyverts.append([topverts[0][i1],
+ topverts[0][i2],
+ botverts[0][i2],
+ botverts[0][i1]])
+
+ v1 = np.array(topverts[0][i1]) - np.array(topverts[0][i2])
+ v2 = np.array(topverts[0][i1]) - np.array(botverts[0][i1])
+ normals.append(np.cross(v1, v2))
+
+ colors = self._shade_colors(color, normals)
+ colors2 = self._shade_colors(color, normals)
+ polycol = art3d.Poly3DCollection(polyverts, facecolors=colors,
+ edgecolors=colors2)
+ self.add_collection3d(polycol)
+
+ for col in colls:
+ self.collections.remove(col)
+
+ def contour(self, X, Y, Z, levels=10, **kwargs):
+ '''
 Create a 3D contour plot.
 
- *X*, *Y*, *Z*: data
+ ========== ================================================
+ Argument Description
+ ========== ================================================
+ *X*, *Y*, Data values as numpy.arrays
+ *Z*
+ *levels* Number of levels to use, defaults to 10. Can
+ also be a tuple of specific levels.
+ *extend3d* Whether to extend contour in 3D (default: False)
+ *stride* Stride (step size) for extending contour
+ ========== ================================================
 
- Keyword arguments are passed on to
+ Other keyword arguments are passed on to
 :func:`~matplotlib.axes.Axes.contour`
 '''
 
+ extend3d = kwargs.pop('extend3d', False)
+ stride = kwargs.pop('stride', 5)
+ nlevels = kwargs.pop('nlevels', 15)
+
 had_data = self.has_data()
- cset = Axes.contour(self, X, Y, Z, *args, **kwargs)
- for z, linec in zip(cset.levels, cset.collections):
- art3d.line_collection_2d_to_3d(linec, z)
+ cset = Axes.contour(self, X, Y, Z, levels, **kwargs)
 
+ if extend3d:
+ self._3d_extend_contour(cset, stride)
+ else:
+ for z, linec in zip(cset.levels, cset.collections):
+ art3d.line_collection_2d_to_3d(linec, z)
+
 self.auto_scale_xyz(X, Y, Z, had_data)
 return cset
 
@@ -688,11 +774,8 @@
 cset = Axes.contourf(self, X, Y, Z, *args, **kwargs)
 levels = cset.levels
 colls = cset.collections
-
 for z1, z2, linec in zip(levels, levels[1:], colls):
- zs = [z1] * (len(linec.get_paths()[0]) / 2)
- zs += [z2] * (len(linec.get_paths()[0]) / 2)
- art3d.poly_collection_2d_to_3d(linec, zs)
+ art3d.poly_collection_2d_to_3d(linec, z1)
 
 self.auto_scale_xyz(X, Y, Z, had_data)
 return cset
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月09日 16:47:51
Revision: 7205
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7205&view=rev
Author: jdh2358
Date: 2009年06月09日 16:47:46 +0000 (2009年6月09日)
Log Message:
-----------
add rec_keep_fields w/ support for rec2txt
Modified Paths:
--------------
 trunk/matplotlib/lib/matplotlib/mlab.py
Modified: trunk/matplotlib/lib/matplotlib/mlab.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/mlab.py	2009年06月08日 20:49:29 UTC (rev 7204)
+++ trunk/matplotlib/lib/matplotlib/mlab.py	2009年06月09日 16:47:46 UTC (rev 7205)
@@ -2107,8 +2107,22 @@
 
 return newrec
 
+def rec_keep_fields(rec, names):
+ """
+ Return a new numpy record array with only fields listed in names
+ """
 
+ if cbook.is_string_like(names):
+ names = names.split(',')
+ 
+ arrays = []
+ for name in names:
+ arrays.append(rec[name])
 
+ return np.rec.fromarrays(arrays, names=names)
+
+
+
 def rec_groupby(r, groupby, stats):
 """
 *r* is a numpy record array
@@ -2699,7 +2713,7 @@
 format.fmt = '%r'
 return format
 
-def rec2txt(r, header=None, padding=3, precision=3):
+def rec2txt(r, header=None, padding=3, precision=3, fields=None):
 """
 Returns a textual representation of a record array.
 
@@ -2714,6 +2728,10 @@
 list of integers to apply precision individually.
 Precision for non-floats is simply ignored.
 
+ *fields* : if not None, a list of field names to print. fields
+ can be a list of strings like ['field1', 'field2'] or a single
+ comma separated string like 'field1,field2'
+
 Example::
 
 precision=[0,2,3]
@@ -2725,6 +2743,9 @@
 XYZ 6.32 -0.076
 """
 
+ if fields is not None:
+ r = rec_keep_fields(r, fields)
+ 
 if cbook.is_numlike(precision):
 precision = [precision]*len(r.dtype)
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月08日 20:49:38
Revision: 7204
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7204&view=rev
Author: jdh2358
Date: 2009年06月08日 20:49:29 +0000 (2009年6月08日)
Log Message:
-----------
applied Goekhan's installation FAQ patch
Modified Paths:
--------------
 trunk/matplotlib/doc/faq/installing_faq.rst
 trunk/matplotlib/lib/matplotlib/cbook.py
Modified: trunk/matplotlib/doc/faq/installing_faq.rst
===================================================================
--- trunk/matplotlib/doc/faq/installing_faq.rst	2009年06月08日 16:28:21 UTC (rev 7203)
+++ trunk/matplotlib/doc/faq/installing_faq.rst	2009年06月08日 20:49:29 UTC (rev 7204)
@@ -106,6 +106,19 @@
 > cd matplotlib
 > python setup.py install
 
+If you want to be able to follow the development branch as it changes just replace
+the last step with (Make sure you have **setuptools** installed)::
+
+ > python setupegg.py develop
+
+This creates links in the right places and installs the command line script to the appropriate places.
+Then, if you want to update your **matplotlib** at any time, just do::
+
+ > svn update
+
+When you run `svn update`, if the output shows that only Python files have been updated, you are all set.
+If C files have changed, you need to run the `python setupegg develop` command again to compile them.
+
 There is more information on :ref:`using Subversion <using-svn>` in
 the developer docs.
 
Modified: trunk/matplotlib/lib/matplotlib/cbook.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/cbook.py	2009年06月08日 16:28:21 UTC (rev 7203)
+++ trunk/matplotlib/lib/matplotlib/cbook.py	2009年06月08日 20:49:29 UTC (rev 7204)
@@ -254,6 +254,10 @@
 self.__dict__.update(kwds)
 
 
+ def __repr__(self):
+ keys = self.__dict__.keys()
+ return 'Bunch(%s)'%', '.join(['%s=%s'%(k,self.__dict__[k]) for k in keys])
+
 def unique(x):
 'Return a list of unique elements of *x*'
 return dict([ (val, 1) for val in x]).keys()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <he...@us...> - 2009年06月08日 16:28:29
Revision: 7203
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7203&view=rev
Author: heeres
Date: 2009年06月08日 16:28:21 +0000 (2009年6月08日)
Log Message:
-----------
mplot3d: really add docs
Added Paths:
-----------
 trunk/matplotlib/doc/mpl_toolkits/mplot3d/
 trunk/matplotlib/doc/mpl_toolkits/mplot3d/api.rst
 trunk/matplotlib/doc/mpl_toolkits/mplot3d/index.rst
 trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst
Added: trunk/matplotlib/doc/mpl_toolkits/mplot3d/api.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/mplot3d/api.rst	 (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/mplot3d/api.rst	2009年06月08日 16:28:21 UTC (rev 7203)
@@ -0,0 +1,25 @@
+***********
+mplot3d API
+***********
+
+:mod:`mpl_toolkits.mplot3d.axes3d`
+==================================
+
+.. automodule:: mpl_toolkits.mplot3d.axes3d
+ :members:
+ :exclude-members: contour3D, contourf3D, plot3D, scatter3D
+ :show-inheritance:
+
+:mod:`mpl_toolkits.mplot3d.art3d`
+=================================
+
+.. automodule:: mpl_toolkits.mplot3d.art3d
+ :members:
+ :show-inheritance:
+
+:mod:`mpl_toolkits.mplot3d.proj3d`
+==================================
+
+.. automodule:: mpl_toolkits.mplot3d.proj3d
+ :members:
+ :show-inheritance:
Added: trunk/matplotlib/doc/mpl_toolkits/mplot3d/index.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/mplot3d/index.rst	 (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/mplot3d/index.rst	2009年06月08日 16:28:21 UTC (rev 7203)
@@ -0,0 +1,23 @@
+.. _toolkit_mplot3d-index:
+.. currentmodule:: mpl_toolkits.mplot3d
+
+*******
+mplot3d
+*******
+
+Matplotlib mplot3d toolkit
+==========================
+The mplot3d toolkit adds simple 3d plotting capabilities to matplotlib by
+supplying an axis object that can create a 2d projection of a 3d scene.
+In the end it produces a list of 2d lines and patches that are drawn by the
+normal matplotlib code. Therefore the resulting graph will have the same look
+and feel as regular 2d plots.
+
+Interactive backends also provide the ability to rotate and zoom the 3d scene.
+
+.. toctree::
+ :maxdepth: 2
+
+ tutorial.rst
+ api.rst
+
Added: trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst
===================================================================
--- trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst	 (rev 0)
+++ trunk/matplotlib/doc/mpl_toolkits/mplot3d/tutorial.rst	2009年06月08日 16:28:21 UTC (rev 7203)
@@ -0,0 +1,75 @@
+.. _toolkit_mplot3d-tutorial:
+.. currentmodule:: mpl_toolkits.mplot3d
+
+****************
+mplot3d tutorial
+****************
+
+Getting started
+===============
+Create a new :class:`matplotlib.figure.Figure` and an
+:class:`~mpl_toolkits.mplot3d.Axes3D` object in it::
+
+ import pylab
+ fig = pylab.figure()
+ from mpl_toolkits.mplot3d import Axes3D
+ ax = Axes3D(fig)
+
+Line plots
+====================
+.. automethod:: Axes3D.plot
+
+.. plot:: mpl_examples/mplot3d/lines3d_demo.py
+
+Scatter plots
+=============
+.. automethod:: Axes3D.scatter
+
+.. plot:: mpl_examples/mplot3d/scatter3d_demo.py
+
+Wireframe plots
+===============
+.. automethod:: Axes3D.plot_wireframe
+
+.. plot:: mpl_examples/mplot3d/wire3d_demo.py
+
+Surface plots
+=============
+.. automethod:: Axes3D.plot_surface
+
+.. plot:: mpl_examples/mplot3d/surface3d_demo.py
+
+Contour plots
+=============
+.. automethod:: Axes3D.contour
+
+.. plot:: mpl_examples/mplot3d/contour3d_demo.py
+
+Filled contour plots
+====================
+.. automethod:: Axes3D.contourf
+
+.. plot:: mpl_examples/mplot3d/contourf3d_demo.py
+
+Polygon plots
+====================
+.. automethod:: add_collection3d
+
+.. plot:: mpl_examples/mplot3d/polys3d_demo.py
+
+Bar plots
+====================
+.. automethod:: Axes3D.bar
+
+.. plot:: mpl_examples/mplot3d/bars3d_demo.py
+
+2D plots in 3D
+====================
+.. plot:: mpl_examples/mplot3d/2dcollections3d_demo.py
+
+Text
+====================
+.. automethod:: Axes3D.text
+
+.. plot:: mpl_examples/mplot3d/text3d_demo.py
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2009年06月08日 14:53:19
Revision: 7201
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7201&view=rev
Author: mdboom
Date: 2009年06月08日 13:37:03 +0000 (2009年6月08日)
Log Message:
-----------
Pixel-align even long sequences of rectilinear lines.
Modified Paths:
--------------
 trunk/matplotlib/src/path_converters.h
Modified: trunk/matplotlib/src/path_converters.h
===================================================================
--- trunk/matplotlib/src/path_converters.h	2009年06月08日 12:57:17 UTC (rev 7200)
+++ trunk/matplotlib/src/path_converters.h	2009年06月08日 13:37:03 UTC (rev 7201)
@@ -390,7 +390,7 @@
 switch (quantize_mode)
 {
 case QUANTIZE_AUTO:
- if (total_vertices > 15)
+ if (total_vertices > 1024)
 {
 return false;
 }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7202
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7202&view=rev
Author: jdh2358
Date: 2009年06月08日 14:51:27 +0000 (2009年6月08日)
Log Message:
-----------
add video lecture link to nav bar
Modified Paths:
--------------
 trunk/matplotlib/doc/_templates/indexsidebar.html
Modified: trunk/matplotlib/doc/_templates/indexsidebar.html
===================================================================
--- trunk/matplotlib/doc/_templates/indexsidebar.html	2009年06月08日 13:37:03 UTC (rev 7201)
+++ trunk/matplotlib/doc/_templates/indexsidebar.html	2009年06月08日 14:51:27 UTC (rev 7202)
@@ -3,6 +3,9 @@
 <p>Please <a href="http://sourceforge.net/project/project_donations.php?group_id=80706">donate</a>
 to support matplotlib development.</p>
 
+<p>Watch a <a href="http://videolectures.net/mloss08_hunter_mat">video lecture</a> about matplotlib presented at <a href="http://videolectures.net/mloss08_whistler">NIPS 08 Workshop</a> <i>Machine Learning Open Source Software</i></a>. 
+</p>
+
 <p>Nominate matplotlib for a community choice award by clicking the
 image below -- suggested category "Best Project for Academia" for
 software which "helps you hit the books, analyze global trends, or
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7199
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7199&view=rev
Author: jdh2358
Date: 2009年06月08日 12:49:37 +0000 (2009年6月08日)
Log Message:
-----------
special case 0,0 for atan2
Modified Paths:
--------------
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py	2009年06月07日 23:23:41 UTC (rev 7198)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py	2009年06月08日 12:49:37 UTC (rev 7199)
@@ -65,7 +65,11 @@
 self._position3d + self._dir_vec], renderer.M)
 dx = proj[0][1] - proj[0][0]
 dy = proj[1][1] - proj[1][0]
- angle = math.degrees(math.atan2(dy, dx))
+ if dx==0. and dy==0.:
+ # atan2 raises ValueError: math domain error on 0,0
+ angle = 0.
+ else:
+ angle = math.degrees(math.atan2(dy, dx))
 self.set_position((proj[0][0], proj[1][0]))
 self.set_rotation(norm_text_angle(angle))
 mtext.Text.draw(self, renderer)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2009年06月08日 12:57:25
Revision: 7200
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7200&view=rev
Author: mdboom
Date: 2009年06月08日 12:57:17 +0000 (2009年6月08日)
Log Message:
-----------
Improve alignment of markers.
Modified Paths:
--------------
 trunk/matplotlib/src/_backend_agg.cpp
Modified: trunk/matplotlib/src/_backend_agg.cpp
===================================================================
--- trunk/matplotlib/src/_backend_agg.cpp	2009年06月08日 12:49:37 UTC (rev 7199)
+++ trunk/matplotlib/src/_backend_agg.cpp	2009年06月08日 12:57:17 UTC (rev 7200)
@@ -598,8 +598,12 @@
 
 if (has_clippath) {
 while (path_transformed.vertex(&x, &y) != agg::path_cmd_stop) {
- x = mpl_round(x); y = mpl_round(y);
+ if (MPL_notisfinite64(x) || MPL_notisfinite64(y)) {
+ continue;
+ }
 
+ x = (double)(int)x; y = (double)(int)y;
+
 	pixfmt_amask_type pfa(pixFmt, alphaMask);
 	amask_ren_type r(pfa);
 	amask_aa_renderer_type ren(r);
@@ -615,8 +619,12 @@
 }
 } else {
 while (path_transformed.vertex(&x, &y) != agg::path_cmd_stop) {
- x = mpl_round(x); y = mpl_round(y);
+ if (MPL_notisfinite64(x) || MPL_notisfinite64(y)) {
+ continue;
+ }
 
+ x = (double)(int)x; y = (double)(int)y;
+
 	if (face.first) {
 	 rendererAA.color(face.second);
 	 sa.init(fillCache, fillSize, x, y);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <he...@us...> - 2009年06月07日 23:23:51
Revision: 7198
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7198&view=rev
Author: heeres
Date: 2009年06月07日 23:23:41 +0000 (2009年6月07日)
Log Message:
-----------
mplot3d: update axes code, add support for '3D' text.
Split and add examples and begin documentation.
Modified Paths:
--------------
 trunk/matplotlib/doc/devel/documenting_mpl.rst
 trunk/matplotlib/doc/users/toolkits.rst
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py
 trunk/matplotlib/lib/mpl_toolkits/mplot3d/proj3d.py
Added Paths:
-----------
 trunk/matplotlib/examples/mplot3d/2dcollections3d_demo.py
 trunk/matplotlib/examples/mplot3d/bars3d_demo.py
 trunk/matplotlib/examples/mplot3d/contour3d_demo.py
 trunk/matplotlib/examples/mplot3d/contourf3d_demo.py
 trunk/matplotlib/examples/mplot3d/lines3d_demo.py
 trunk/matplotlib/examples/mplot3d/polys3d_demo.py
 trunk/matplotlib/examples/mplot3d/scatter3d_demo.py
 trunk/matplotlib/examples/mplot3d/surface3d_demo.py
 trunk/matplotlib/examples/mplot3d/text3d_demo.py
 trunk/matplotlib/examples/mplot3d/wire3d_demo.py
Removed Paths:
-------------
 trunk/matplotlib/examples/mplot3d/contour.py
 trunk/matplotlib/examples/mplot3d/contourf.py
 trunk/matplotlib/examples/mplot3d/demo.py
 trunk/matplotlib/examples/mplot3d/polys.py
 trunk/matplotlib/examples/mplot3d/scatter.py
 trunk/matplotlib/examples/mplot3d/surface.py
 trunk/matplotlib/examples/mplot3d/wire.py
Modified: trunk/matplotlib/doc/devel/documenting_mpl.rst
===================================================================
--- trunk/matplotlib/doc/devel/documenting_mpl.rst	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/doc/devel/documenting_mpl.rst	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -9,9 +9,11 @@
 
 The documentation for matplotlib is generated from ReStructured Text
 using the Sphinx_ documentation generation tool. Sphinx-0.5 or later
-is required. Most developers work from the sphinx subversion repository because it is a rapidly evolving project::
+is required. You might still run into problems, so most developers
+work from the sphinx source repository (Mercurial based) because it
+is a rapidly evolving project::
 
- svn co http://svn.python.org/projects/doctools/trunk sphinx
+ hg clone http://bitbucket.org/birkenfeld/sphinx/
 cd sphinx
 python setup.py install
 
Modified: trunk/matplotlib/doc/users/toolkits.rst
===================================================================
--- trunk/matplotlib/doc/users/toolkits.rst	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/doc/users/toolkits.rst	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -54,6 +54,7 @@
 there, but ships with matplotlib and thus may be a lighter weight
 solution for some use cases.
 
+See :ref:`toolkit_mplot3d-index` for more documentation and examples.
 
 .. _toolkit_axes_grid:
 
Added: trunk/matplotlib/examples/mplot3d/2dcollections3d_demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/2dcollections3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/2dcollections3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,24 @@
+from mpl_toolkits.mplot3d import Axes3D
+import numpy as np
+import pylab
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+
+x = np.linspace(0, 1, 100)
+y = np.sin(x * 2 * np.pi) / 2 + 0.5
+ax.plot(x, y, zs=0, zdir='z', label='zs=0, zdir=z')
+
+colors = ('r', 'g', 'b', 'k')
+for c in colors:
+ x = np.random.sample(20)
+ y = np.random.sample(20)
+ ax.scatter(x, y, 0, zdir='y', c=c)
+
+ax.legend()
+ax.set_xlim3d(0, 1)
+ax.set_ylim3d(0, 1)
+ax.set_zlim3d(0, 1)
+
+pylab.show()
+
Added: trunk/matplotlib/examples/mplot3d/bars3d_demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/bars3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/bars3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,20 @@
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib.collections import PolyCollection
+from matplotlib.colors import colorConverter
+import pylab
+import random
+import numpy as np
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
+ xs = np.arange(20)
+ ys = [random.random() for x in xs]
+ ax.bar(xs, ys, zs=z, zdir='y', color=c, alpha=0.8)
+
+ax.set_xlabel('X')
+ax.set_ylabel('Y')
+ax.set_zlabel('Z')
+
+pylab.show()
+
Deleted: trunk/matplotlib/examples/mplot3d/contour.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/contour.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/contour.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,12 +0,0 @@
-from mpl_toolkits.mplot3d import axes3d
-import pylab
-import random
-
-fig = pylab.figure()
-ax = axes3d.Axes3D(fig)
-X, Y, Z = axes3d.get_test_data(0.05)
-cset = ax.contour3D(X, Y, Z)
-ax.clabel(cset, fontsize=9, inline=1)
-
-pylab.show()
-
Copied: trunk/matplotlib/examples/mplot3d/contour3d_demo.py (from rev 7162, trunk/matplotlib/examples/mplot3d/contour.py)
===================================================================
--- trunk/matplotlib/examples/mplot3d/contour3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/contour3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,12 @@
+from mpl_toolkits.mplot3d import axes3d
+import pylab
+import random
+
+fig = pylab.figure()
+ax = axes3d.Axes3D(fig)
+X, Y, Z = axes3d.get_test_data(0.05)
+cset = ax.contour(X, Y, Z)
+ax.clabel(cset, fontsize=9, inline=1)
+
+pylab.show()
+
Property changes on: trunk/matplotlib/examples/mplot3d/contour3d_demo.py
___________________________________________________________________
Added: svn:mergeinfo
 + /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
Deleted: trunk/matplotlib/examples/mplot3d/contourf.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/contourf.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/contourf.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,12 +0,0 @@
-from mpl_toolkits.mplot3d import axes3d
-import pylab
-import random
-
-fig = pylab.figure()
-ax = axes3d.Axes3D(fig)
-X, Y, Z = axes3d.get_test_data(0.05)
-cset = ax.contourf3D(X, Y, Z)
-ax.clabel(cset, fontsize=9, inline=1)
-
-pylab.show()
-
Copied: trunk/matplotlib/examples/mplot3d/contourf3d_demo.py (from rev 7162, trunk/matplotlib/examples/mplot3d/contourf.py)
===================================================================
--- trunk/matplotlib/examples/mplot3d/contourf3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/contourf3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,12 @@
+from mpl_toolkits.mplot3d import axes3d
+import pylab
+import random
+
+fig = pylab.figure()
+ax = axes3d.Axes3D(fig)
+X, Y, Z = axes3d.get_test_data(0.05)
+cset = ax.contourf(X, Y, Z)
+ax.clabel(cset, fontsize=9, inline=1)
+
+pylab.show()
+
Property changes on: trunk/matplotlib/examples/mplot3d/contourf3d_demo.py
___________________________________________________________________
Added: svn:mergeinfo
 + /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
Deleted: trunk/matplotlib/examples/mplot3d/demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/demo.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,138 +0,0 @@
-import random
-import numpy as np
-import matplotlib.pyplot as plt
-import mpl_toolkits.mplot3d.axes3d as axes3d
-from matplotlib.colors import Normalize, colorConverter
-
-def test_scatter():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- n = 100
- for c,zl,zh in [('r',-50,-25),('b',-30,-5)]:
- xs,ys,zs = zip(*
- [(random.randrange(23,32),
- random.randrange(100),
- random.randrange(zl,zh)
- ) for i in range(n)])
- ax.scatter3D(xs,ys,zs, c=c)
-
- ax.set_xlabel('------------ X Label --------------------')
- ax.set_ylabel('------------ Y Label --------------------')
- ax.set_zlabel('------------ Z Label --------------------')
-
-def test_wire():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- X,Y,Z = axes3d.get_test_data(0.05)
- ax.plot_wireframe(X,Y,Z, rstride=10,cstride=10)
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
-
-def test_surface():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- X,Y,Z = axes3d.get_test_data(0.05)
- ax.plot_surface(X,Y,Z, rstride=10,cstride=10)
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
-
-def test_contour():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- X,Y,Z = axes3d.get_test_data(0.05)
- cset = ax.contour3D(X,Y,Z)
- ax.clabel(cset, fontsize=9, inline=1)
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
-
-def test_contourf():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- X,Y,Z = axes3d.get_test_data(0.05)
- cset = ax.contourf3D(X,Y,Z)
- ax.clabel(cset, fontsize=9, inline=1)
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
-
-def test_plot():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- xs = np.arange(0,4*np.pi+0.1,0.1)
- ys = np.sin(xs)
- ax.plot(xs,ys, label='zl')
- ax.plot(xs,ys+max(xs),label='zh')
- ax.plot(xs,ys,dir='x', label='xl')
- ax.plot(xs,ys,dir='x', z=max(xs),label='xh')
- ax.plot(xs,ys,dir='y', label='yl')
- ax.plot(xs,ys,dir='y', z=max(xs), label='yh')
- ax.set_xlabel('X')
- ax.set_ylabel('Y')
- ax.set_zlabel('Z')
- ax.legend()
-
-def test_polys():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6)
-
- xs = np.arange(0,10,0.4)
- verts = []
- zs = [0.0,1.0,2.0,3.0]
- for z in zs:
- ys = [random.random() for x in xs]
- ys[0],ys[-1] = 0,0
- verts.append(zip(xs,ys))
-
- from matplotlib.collections import PolyCollection
- poly = PolyCollection(verts, facecolors = [cc('r'),cc('g'),cc('b'),
- cc('y')])
- poly.set_alpha(0.7)
- ax.add_collection(poly,zs=zs,dir='y')
-
- ax.set_xlim(0,10)
- ax.set_ylim(-1,4)
- ax.set_zlim(0,1)
-
-def test_scatter2D():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- xs = [random.random() for i in range(20)]
- ys = [random.random() for x in xs]
- ax.scatter(xs, ys)
- ax.scatter(xs, ys, dir='y', c='r')
- ax.scatter(xs, ys, dir='x', c='g')
-
-def test_bar2D():
- f = plt.figure()
- ax = axes3d.Axes3D(f)
-
- for c,z in zip(['r','g','b', 'y'],[30,20,10,0]):
- xs = np.arange(20)
- ys = [random.random() for x in xs]
- ax.bar(xs, ys, z=z, dir='y', color=c, alpha=0.8)
-
-if __name__ == "__main__":
-
- test_scatter()
- test_wire()
- test_surface()
- test_contour()
- test_contourf()
- test_plot()
- test_polys()
- test_scatter2D()
- test_bar2D()
-
- plt.show()
Added: trunk/matplotlib/examples/mplot3d/lines3d_demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/lines3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/lines3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,19 @@
+import matplotlib as mpl
+from mpl_toolkits.mplot3d import Axes3D
+import numpy as np
+import pylab
+
+mpl.rcParams['legend.fontsize'] = 10
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
+z = np.linspace(-2, 2, 100)
+r = z**2 + 1
+x = r * np.sin(theta)
+y = r * np.cos(theta)
+ax.plot(x, y, z, label='parametric curve')
+ax.legend()
+
+pylab.show()
+
Deleted: trunk/matplotlib/examples/mplot3d/polys.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/polys.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/polys.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,31 +0,0 @@
-from mpl_toolkits.mplot3d import Axes3D
-from matplotlib.collections import PolyCollection
-from matplotlib.colors import colorConverter
-import pylab
-import random
-import numpy as np
-
-fig = pylab.figure()
-ax = Axes3D(fig)
-
-cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6)
-
-xs = np.arange(0, 10, 0.4)
-verts = []
-zs = [0.0, 1.0, 2.0, 3.0]
-for z in zs:
- ys = [random.random() for x in xs]
- ys[0], ys[-1] = 0, 0
- verts.append(zip(xs, ys))
-
-poly = PolyCollection(verts, facecolors = [cc('r'), cc('g'), cc('b'),
- cc('y')])
-poly.set_alpha(0.7)
-ax.add_collection(poly, zs=zs, dir='y')
-
-ax.set_xlim(0, 10)
-ax.set_ylim(-1, 4)
-ax.set_zlim(0, 1)
-
-pylab.show()
-
Copied: trunk/matplotlib/examples/mplot3d/polys3d_demo.py (from rev 7162, trunk/matplotlib/examples/mplot3d/polys.py)
===================================================================
--- trunk/matplotlib/examples/mplot3d/polys3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/polys3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,31 @@
+from mpl_toolkits.mplot3d import Axes3D
+from matplotlib.collections import PolyCollection
+from matplotlib.colors import colorConverter
+import pylab
+import random
+import numpy as np
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+
+cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6)
+
+xs = np.arange(0, 10, 0.4)
+verts = []
+zs = [0.0, 1.0, 2.0, 3.0]
+for z in zs:
+ ys = [random.random() for x in xs]
+ ys[0], ys[-1] = 0, 0
+ verts.append(zip(xs, ys))
+
+poly = PolyCollection(verts, facecolors = [cc('r'), cc('g'), cc('b'),
+ cc('y')])
+poly.set_alpha(0.7)
+ax.add_collection3d(poly, zs=zs, zdir='y')
+
+ax.set_xlim3d(0, 10)
+ax.set_ylim3d(-1, 4)
+ax.set_zlim3d(0, 1)
+
+pylab.show()
+
Property changes on: trunk/matplotlib/examples/mplot3d/polys3d_demo.py
___________________________________________________________________
Added: svn:mergeinfo
 + /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
Deleted: trunk/matplotlib/examples/mplot3d/scatter.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/scatter.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/scatter.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,21 +0,0 @@
-from mpl_toolkits.mplot3d import Axes3D
-import pylab
-import random
-
-fig = pylab.figure()
-ax = Axes3D(fig)
-n = 100
-for c, zl, zh in [('r', -50, -25), ('b', -30, -5)]:
- xs, ys, zs = zip(*
- [(random.randrange(23, 32),
- random.randrange(100),
- random.randrange(zl, zh)
- ) for i in range(n)])
- ax.scatter3D(xs, ys, zs, c=c)
-
-ax.set_xlabel('X Label')
-ax.set_ylabel('Y Label')
-ax.set_zlabel('Z Label')
-
-pylab.show()
-
Copied: trunk/matplotlib/examples/mplot3d/scatter3d_demo.py (from rev 7162, trunk/matplotlib/examples/mplot3d/scatter.py)
===================================================================
--- trunk/matplotlib/examples/mplot3d/scatter3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/scatter3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,21 @@
+from mpl_toolkits.mplot3d import Axes3D
+import pylab
+import random
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+n = 100
+for c, zl, zh in [('r', -50, -25), ('b', -30, -5)]:
+ xs, ys, zs = zip(*
+ [(random.randrange(23, 32),
+ random.randrange(100),
+ random.randrange(zl, zh)
+ ) for i in range(n)])
+ ax.scatter(xs, ys, zs, c=c)
+
+ax.set_xlabel('X Label')
+ax.set_ylabel('Y Label')
+ax.set_zlabel('Z Label')
+
+pylab.show()
+
Property changes on: trunk/matplotlib/examples/mplot3d/scatter3d_demo.py
___________________________________________________________________
Added: svn:mergeinfo
 + /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
Deleted: trunk/matplotlib/examples/mplot3d/surface.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/surface.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/surface.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,16 +0,0 @@
-from mpl_toolkits.mplot3d import Axes3D
-import pylab
-import random
-import numpy as np
-
-fig = pylab.figure()
-ax = Axes3D(fig)
-X = np.arange(-5, 5, 0.5)
-Y = np.arange(-5, 5, 0.5)
-X, Y = np.meshgrid(X, Y)
-R = np.sqrt(X**2 + Y**2)
-Z = np.sin(R)
-ax.plot_surface(X, Y, Z, rstride=1, cstride=1, color='forestgreen')
-
-pylab.show()
-
Copied: trunk/matplotlib/examples/mplot3d/surface3d_demo.py (from rev 7162, trunk/matplotlib/examples/mplot3d/surface.py)
===================================================================
--- trunk/matplotlib/examples/mplot3d/surface3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/surface3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,16 @@
+from mpl_toolkits.mplot3d import Axes3D
+import pylab
+import random
+import numpy as np
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+X = np.arange(-5, 5, 0.5)
+Y = np.arange(-5, 5, 0.5)
+X, Y = np.meshgrid(X, Y)
+R = np.sqrt(X**2 + Y**2)
+Z = np.sin(R)
+ax.plot_surface(X, Y, Z, rstride=1, cstride=1, color='forestgreen')
+
+pylab.show()
+
Property changes on: trunk/matplotlib/examples/mplot3d/surface3d_demo.py
___________________________________________________________________
Added: svn:mergeinfo
 + /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
Added: trunk/matplotlib/examples/mplot3d/text3d_demo.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/text3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/text3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,26 @@
+from mpl_toolkits.mplot3d import Axes3D
+import pylab
+import random
+
+fig = pylab.figure()
+ax = Axes3D(fig)
+
+zdirs = (None, 'x', 'y', 'z', (1, 1, 0), (1, 1, 1))
+xs = (2, 6, 4, 9, 7, 2)
+ys = (6, 4, 8, 7, 2, 2)
+zs = (4, 2, 5, 6, 1, 7)
+
+for zdir, x, y, z in zip(zdirs, xs, ys, zs):
+ label = '(%d, %d, %d), dir=%s' % (x, y, z, zdir)
+ ax.text(x, y, z, label, zdir)
+
+ax.set_xlim3d(0, 10)
+ax.set_ylim3d(0, 10)
+ax.set_zlim3d(0, 10)
+
+ax.set_xlabel('X axis')
+ax.set_ylabel('Y axis')
+ax.set_zlabel('Z axis')
+
+pylab.show()
+
Deleted: trunk/matplotlib/examples/mplot3d/wire.py
===================================================================
--- trunk/matplotlib/examples/mplot3d/wire.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/examples/mplot3d/wire.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -1,12 +0,0 @@
-from mpl_toolkits.mplot3d import axes3d
-import pylab
-import random
-import numpy as np
-
-fig = pylab.figure()
-ax = axes3d.Axes3D(fig)
-X, Y, Z = axes3d.get_test_data(0.05)
-ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
-
-pylab.show()
-
Copied: trunk/matplotlib/examples/mplot3d/wire3d_demo.py (from rev 7162, trunk/matplotlib/examples/mplot3d/wire.py)
===================================================================
--- trunk/matplotlib/examples/mplot3d/wire3d_demo.py	 (rev 0)
+++ trunk/matplotlib/examples/mplot3d/wire3d_demo.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -0,0 +1,12 @@
+from mpl_toolkits.mplot3d import axes3d
+import pylab
+import random
+import numpy as np
+
+fig = pylab.figure()
+ax = axes3d.Axes3D(fig)
+X, Y, Z = axes3d.get_test_data(0.05)
+ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
+
+pylab.show()
+
Property changes on: trunk/matplotlib/examples/mplot3d/wire3d_demo.py
___________________________________________________________________
Added: svn:mergeinfo
 + /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771
/branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -2,45 +2,89 @@
 # art3d.py, original mplot3d version by John Porter
 # Parts rewritten by Reinier Heeres <re...@he...>
 
-from matplotlib import lines, text, path as mpath
+'''
+Module containing 3D artist code and functions to convert 2D
+artists into 3D versions which can be added to an Axes3D.
+'''
+
+from matplotlib import lines, text as mtext, path as mpath, colors as mcolors
 from matplotlib.collections import Collection, LineCollection, \
 PolyCollection, PatchCollection
-from matplotlib.patches import Patch, Rectangle
+from matplotlib.patches import Patch
 from matplotlib.colors import Normalize
-from matplotlib import transforms
+from matplotlib.cbook import iterable
 
-import types
 import numpy as np
+import math
 import proj3d
 
-class Text3D(text.Text):
+def norm_angle(a):
+ """Return angle between -180 and +180"""
+ a = (a + 360) % 360
+ if a > 180:
+ a = a - 360
+ return a
 
- def __init__(self, x=0, y=0, z=0, text='', dir='z'):
- text.Text.__init__(self, x, y, text)
- self.set_3d_properties(z, dir)
+def norm_text_angle(a):
+ """Return angle between -90 and +90"""
+ a = (a + 180) % 180
+ if a > 90:
+ a = a - 180
+ return a
 
- def set_3d_properties(self, z=0, dir='z'):
+def get_dir_vector(zdir):
+ if zdir == 'x':
+ return np.array((1, 0, 0))
+ elif zdir == 'y':
+ return np.array((0, 1, 0))
+ elif zdir == 'z':
+ return np.array((0, 0, 1))
+ elif zdir == None:
+ return np.array((0, 0, 0))
+ elif iterable(zdir) and len(zdir) == 3:
+ return zdir
+ else:
+ raise ValueError("'x', 'y', 'z', None or vector of length 3 expected")
+
+class Text3D(mtext.Text):
+ '''
+ Text object with 3D position and (in the future) direction.
+ '''
+
+ def __init__(self, x=0, y=0, z=0, text='', zdir='z'):
+ mtext.Text.__init__(self, x, y, text)
+ self.set_3d_properties(z, zdir)
+
+ def set_3d_properties(self, z=0, zdir='z'):
 x, y = self.get_position()
- self._position3d = juggle_axes(x, y, z, dir)
+ self._position3d = np.array((x, y, z))
+ self._dir_vec = get_dir_vector(zdir)
 
 def draw(self, renderer):
- x, y, z = self._position3d
- x, y, z = proj3d.proj_transform(x, y, z, renderer.M)
- self.set_position(x, y)
- text.Text.draw(self, renderer)
+ proj = proj3d.proj_trans_points([self._position3d, \
+ self._position3d + self._dir_vec], renderer.M)
+ dx = proj[0][1] - proj[0][0]
+ dy = proj[1][1] - proj[1][0]
+ angle = math.degrees(math.atan2(dy, dx))
+ self.set_position((proj[0][0], proj[1][0]))
+ self.set_rotation(norm_text_angle(angle))
+ mtext.Text.draw(self, renderer)
 
-def text_2d_to_3d(obj, z=0, dir='z'):
+def text_2d_to_3d(obj, z=0, zdir='z'):
 """Convert a Text to a Text3D object."""
 obj.__class__ = Text3D
- obj.set_3d_properties(z, dir)
+ obj.set_3d_properties(z, zdir)
 
 class Line3D(lines.Line2D):
+ '''
+ 3D line object.
+ '''
 
 def __init__(self, xs, ys, zs, *args, **kwargs):
 lines.Line2D.__init__(self, [], [], *args, **kwargs)
 self._verts3d = xs, ys, zs
 
- def set_3d_properties(self, zs=0, dir='z'):
+ def set_3d_properties(self, zs=0, zdir='z'):
 xs = self.get_xdata()
 ys = self.get_ydata()
 try:
@@ -48,7 +92,7 @@
 zs = [zs for x in xs]
 except:
 pass
- self._verts3d = juggle_axes(xs, ys, zs, dir)
+ self._verts3d = juggle_axes(xs, ys, zs, zdir)
 
 def draw(self, renderer):
 xs3d, ys3d, zs3d = self._verts3d
@@ -56,46 +100,58 @@
 self.set_data(xs, ys)
 lines.Line2D.draw(self, renderer)
 
-def line_2d_to_3d(line, z=0, dir='z'):
+def line_2d_to_3d(line, zs=0, zdir='z'):
+ '''
+ Convert a 2D line to 3D.
+ '''
 line.__class__ = Line3D
- line.set_3d_properties(z, dir)
+ line.set_3d_properties(zs, zdir)
 
-def path_to_3d_segment(path, z=0, dir='z'):
- '''Convert a path to a 3d segment.'''
+def path_to_3d_segment(path, z=0, zdir='z'):
+ '''Convert a path to a 3D segment.'''
 seg = []
 for (pathseg, code) in path.iter_segments():
 seg.append(pathseg)
- seg3d = [juggle_axes(x, y, z, dir) for (x, y) in seg]
+ seg3d = [juggle_axes(x, y, z, zdir) for (x, y) in seg]
 return seg3d
 
-def paths_to_3d_segments(paths, zs=0, dir='z'):
- '''Convert paths from a collection object to 3d segments.'''
+def paths_to_3d_segments(paths, zs=0, zdir='z'):
+ '''Convert paths from a collection object to 3D segments.'''
 
 try:
 zs = float(zs)
- zs = [zs for i in range(len(paths))]
+ zs = [zs] * len(paths)
 except:
 pass
 
 segments = []
 for path, z in zip(paths, zs):
- segments.append(path_to_3d_segment(path, z, dir))
+ segments.append(path_to_3d_segment(path, z, zdir))
 return segments
 
 class Line3DCollection(LineCollection):
+ '''
+ A collection of 3D lines.
+ '''
 
 def __init__(self, segments, *args, **kwargs):
 LineCollection.__init__(self, segments, *args, **kwargs)
 
 def set_segments(self, segments):
+ '''
+ Set 3D segments
+ '''
 self._segments3d = segments
 LineCollection.set_segments(self, [])
 
 def do_3d_projection(self, renderer):
+ '''
+ Project the points according to renderer matrix.
+ '''
 xyslist = [
 proj3d.proj_trans_points(points, renderer.M) for points in
 self._segments3d]
- segments_2d = [zip(xs,ys) for (xs,ys,zs) in xyslist]
+ segments_2d = [zip(xs, ys) for (xs, ys, zs) in xyslist]
 LineCollection.set_segments(self, segments_2d)
 
 minz = 1e9
@@ -108,22 +164,28 @@
 self.do_3d_projection(renderer)
 LineCollection.draw(self, renderer)
 
-def line_collection_2d_to_3d(col, z=0, dir='z'):
+def line_collection_2d_to_3d(col, zs=0, zdir='z'):
 """Convert a LineCollection to a Line3DCollection object."""
- segments3d = paths_to_3d_segments(col.get_paths(), z, dir)
+ segments3d = paths_to_3d_segments(col.get_paths(), zs, zdir)
 col.__class__ = Line3DCollection
 col.set_segments(segments3d)
 
 class Patch3D(Patch):
+ '''
+ 3D patch object.
+ '''
 
 def __init__(self, *args, **kwargs):
 zs = kwargs.pop('zs', [])
- dir = kwargs.pop('dir', 'z')
+ zdir = kwargs.pop('zdir', 'z')
 Patch.__init__(self, *args, **kwargs)
- self.set_3d_properties(zs, dir)
+ self.set_3d_properties(zs, zdir)
 
- def set_3d_properties(self, verts, z=0, dir='z'):
- self._segment3d = [juggle_axes(x, y, z, dir) for (x, y) in verts]
+ def set_3d_properties(self, verts, zs=0, zdir='z'):
+ if not iterable(zs):
+ zs = [zs] * len(verts)
+ self._segment3d = [juggle_axes(x, y, z, zdir) \
+ for ((x, y), z) in zip(verts, zs)]
 self._facecolor3d = Patch.get_facecolor(self)
 
 def get_path(self):
@@ -135,7 +197,7 @@
 def do_3d_projection(self, renderer):
 s = self._segment3d
 xs, ys, zs = zip(*s)
- vxs,vys,vzs,vis = proj3d.proj_transform_clip(xs,ys,zs, renderer.M)
+ vxs, vys,vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
 self._path2d = mpath.Path(zip(vxs, vys))
 # FIXME: coloring
 self._facecolor2d = self._facecolor3d
@@ -144,26 +206,29 @@
 def draw(self, renderer):
 Patch.draw(self, renderer)
 
-def patch_2d_to_3d(patch, z=0, dir='z'):
+def patch_2d_to_3d(patch, z=0, zdir='z'):
 """Convert a Patch to a Patch3D object."""
 verts = patch.get_verts()
 patch.__class__ = Patch3D
- patch.set_3d_properties(verts, z, dir)
+ patch.set_3d_properties(verts, z, zdir)
 
 class Patch3DCollection(PatchCollection):
+ '''
+ A collection of 3D patches.
+ '''
 
 def __init__(self, *args, **kwargs):
 PatchCollection.__init__(self, *args, **kwargs)
 
- def set_3d_properties(self, zs, dir):
+ def set_3d_properties(self, zs, zdir):
 xs, ys = zip(*self.get_offsets())
- self._offsets3d = juggle_axes(xs, ys, zs, dir)
+ self._offsets3d = juggle_axes(xs, ys, zs, zdir)
 self._facecolor3d = self.get_facecolor()
 self._edgecolor3d = self.get_edgecolor()
 
 def do_3d_projection(self, renderer):
- xs,ys,zs = self._offsets3d
- vxs,vys,vzs,vis = proj3d.proj_transform_clip(xs,ys,zs, renderer.M)
+ xs, ys, zs = self._offsets3d
+ vxs, vys, vzs, vis = proj3d.proj_transform_clip(xs, ys, zs, renderer.M)
 #FIXME: mpl allows us no way to unset the collection alpha value
 self._alpha = None
 self.set_facecolors(zalpha(self._facecolor3d, vzs))
@@ -175,19 +240,22 @@
 def draw(self, renderer):
 PatchCollection.draw(self, renderer)
 
-def patch_collection_2d_to_3d(col, zs=0, dir='z'):
+def patch_collection_2d_to_3d(col, zs=0, zdir='z'):
 """Convert a PatchCollection to a Patch3DCollection object."""
 col.__class__ = Patch3DCollection
- col.set_3d_properties(zs, dir)
+ col.set_3d_properties(zs, zdir)
 
 class Poly3DCollection(PolyCollection):
+ '''
+ A collection of 3D polygons.
+ '''
 
 def __init__(self, verts, *args, **kwargs):
 PolyCollection.__init__(self, verts, *args, **kwargs)
 self.set_3d_properties()
 
 def get_vector(self, segments3d):
- """optimise points for projection"""
+ """Optimize points for projection"""
 si = 0
 ei = 0
 segis = []
@@ -195,11 +263,11 @@
 for p in segments3d:
 points.extend(p)
 ei = si+len(p)
- segis.append((si,ei))
+ segis.append((si, ei))
 si = ei
- xs,ys,zs = zip(*points)
+ xs, ys, zs = zip(*points)
 ones = np.ones(len(xs))
- self._vec = np.array([xs,ys,zs,ones])
+ self._vec = np.array([xs, ys, zs, ones])
 self._segis = segis
 self._sort_zpos = min(zs)
 
@@ -221,14 +289,14 @@
 
 # if required sort by depth (furthest drawn first)
 if self._zsort:
- z_segments_2d = [(min(zs),zip(xs,ys),c) for
- (xs,ys,zs),c in zip(xyzlist,colors)]
+ z_segments_2d = [(min(zs), zip(xs, ys), c) for
+ (xs, ys, zs), c in zip(xyzlist, colors)]
 z_segments_2d.sort()
 z_segments_2d.reverse()
 else:
 raise ValueError, "whoops"
- segments_2d = [s for z,s,c in z_segments_2d]
- colors = [c for z,s,c in z_segments_2d]
+ segments_2d = [s for z, s, c in z_segments_2d]
+ colors = [c for z, s, c in z_segments_2d]
 PolyCollection.set_verts(self, segments_2d)
 self._facecolors2d = colors
 
@@ -244,21 +312,23 @@
 def draw(self, renderer):
 return Collection.draw(self, renderer)
 
-def poly_collection_2d_to_3d(col, zs=None, dir='z'):
+def poly_collection_2d_to_3d(col, zs=None, zdir='z'):
 """Convert a PolyCollection to a Poly3DCollection object."""
- segments_3d = paths_to_3d_segments(col.get_paths(), zs, dir)
+ segments_3d = paths_to_3d_segments(col.get_paths(), zs, zdir)
 col.__class__ = Poly3DCollection
 col.set_verts(segments_3d)
 col.set_3d_properties()
 
-def juggle_axes(xs,ys,zs, dir):
+def juggle_axes(xs, ys, zs, zdir):
 """
- Depending on the direction of the plot re-order the axis.
- This is so that 2d plots can be plotted along any direction.
+ Reorder coordinates so that zdir
 """
- if dir == 'x': return zs,xs,ys
- elif dir == 'y': return xs,zs,ys
- else: return xs,ys,zs
+ if zdir == 'x':
+ return zs, xs, ys
+ elif zdir == 'y':
+ return xs, zs, ys
+ else:
+ return xs, ys, zs
 
 def iscolor(c):
 try:
@@ -269,8 +339,8 @@
 def get_colors(c, num):
 """Stretch the color argument to provide the required number num"""
 
- if type(c)==type("string"):
- c = colors.colorConverter.to_rgba(colors)
+ if type(c) == type("string"):
+ c = mcolors.colorConverter.to_rgba(c)
 
 if iscolor(c):
 return [c] * num
@@ -285,9 +355,9 @@
 
 def zalpha(colors, zs):
 """Modify the alphas of the color list according to depth"""
- colors = get_colors(colors,len(zs))
- norm = Normalize(min(zs),max(zs))
- sats = 1 - norm(zs)*0.7
- colors = [(c[0],c[1],c[2],c[3]*s) for c,s in zip(colors,sats)]
+ colors = get_colors(colors, len(zs))
+ norm = Normalize(min(zs), max(zs))
+ sats = 1 - norm(zs) * 0.7
+ colors = [(c[0], c[1], c[2], c[3] * s) for c, s in zip(colors, sats)]
 return colors
 
Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py
===================================================================
--- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py	2009年06月07日 17:36:51 UTC (rev 7197)
+++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py	2009年06月07日 23:23:41 UTC (rev 7198)
@@ -4,17 +4,14 @@
 # Parts fixed by Reinier Heeres <re...@he...>
 
 """
-3D projection glued onto 2D Axes.
-
-Axes3D
+Module containing Axes3D, an object which can plot 3D objects on a
+2D matplotlib figure.
 """
 
-from matplotlib import pyplot as plt
-import random
-
 from matplotlib.axes import Axes
 from matplotlib import cbook
 from matplotlib.transforms import Bbox
+from matplotlib import collections
 import numpy as np
 from matplotlib.colors import Normalize, colorConverter
 
@@ -25,32 +22,23 @@
 def sensible_format_data(self, value):
 """Used to generate more comprehensible numbers in status bar"""
 if abs(value) > 1e4 or abs(value)<1e-3:
- s = '%1.4e'% value
+ s = '%1.4e' % value
 return self._formatSciNotation(s)
 else:
 return '%4.3f' % value
 
 def unit_bbox():
- box = Bbox(np.array([[0,0],[1,1]]))
+ box = Bbox(np.array([[0, 0], [1, 1]]))
 return box
 
-class Axes3DI(Axes):
- """Wrap an Axes object
-
- The x,y data coordinates, which are manipulated by set_xlim and
- set_ylim are used as the target view coordinates by the 3D
- transformations. These coordinates are mostly invisible to the
- outside world.
-
- set_w_xlim, set_w_ylim and set_w_zlim manipulate the 3D world
- coordinates which are scaled to represent the data and are stored
- in the xy_dataLim, zz_datalim bboxes.
-
- The axes representing the x,y,z world dimensions are self.w_xaxis,
- self.w_yaxis and self.w_zaxis. They can probably be controlled in
- more or less the normal ways.
+class Axes3D(Axes):
 """
- def __init__(self, fig, rect=[0.0, 0.0, 1.0, 1.0], *args, **kwargs):
+ 3D axes object.
+ """
+
+ def __init__(self, fig, rect=None, *args, **kwargs):
+ if rect is None:
+ rect = [0.0, 0.0, 1.0, 1.0]
 self.fig = fig
 self.cids = []
 
@@ -87,71 +75,47 @@
 ydwl = (0.95/self.dist)
 ydw = (0.9/self.dist)
 
- self.set_xlim(-xdwl,xdw)
- self.set_ylim(-ydwl,ydw)
+ Axes.set_xlim(self, -xdwl, xdw)
+ Axes.set_ylim(self, -ydwl, ydw)
 
- def really_set_xlim(self, vmin, vmax):
- self.viewLim.intervalx().set_bounds(vmin, vmax)
-
- def really_set_ylim(self, vmin, vmax):
- self.viewLim.intervaly().set_bounds(vmin, vmax)
-
- def vlim_argument(self, get_lim, *args):
- if not args:
- vmin,vmax = get_lim()
- elif len(args)==2:
- vmin,vmax = args
- elif len(args)==1:
- vmin,vmax = args[0]
- return vmin,vmax
-
- def nset_xlim(self, *args):
- raise
- vmin,vmax = self.vlim_argument(self.get_xlim)
- print 'xlim', vmin,vmax
-
- def nset_ylim(self, *args):
- vmin,vmax = self.vlim_argument(self.get_ylim)
- print 'ylim', vmin,vmax
-
 def create_axes(self):
- self.w_xaxis = axis3d.XAxis('x',self.xy_viewLim.intervalx,
+ self.w_xaxis = axis3d.XAxis('x', self.xy_viewLim.intervalx,
 self.xy_dataLim.intervalx, self)
- self.w_yaxis = axis3d.YAxis('y',self.xy_viewLim.intervaly,
+ self.w_yaxis = axis3d.YAxis('y', self.xy_viewLim.intervaly,
 self.xy_dataLim.intervaly, self)
- self.w_zaxis = axis3d.ZAxis('z',self.zz_viewLim.intervalx,
+ self.w_zaxis = axis3d.ZAxis('z', self.zz_viewLim.intervalx,
 self.zz_dataLim.intervalx, self)
 
- def unit_cube(self,vals=None):
- minx,maxx,miny,maxy,minz,maxz = vals or self.get_w_lims()
- xs,ys,zs = ([minx,maxx,maxx,minx,minx,maxx,maxx,minx],
- [miny,miny,maxy,maxy,miny,miny,maxy,maxy],
- [minz,minz,minz,minz,maxz,maxz,maxz,maxz])
- return zip(xs,ys,zs)
+ def unit_cube(self, vals=None):
+ minx, maxx, miny, maxy, minz, maxz = vals or self.get_w_lims()
+ xs, ys, zs = ([minx, maxx, maxx, minx, minx, maxx, maxx, minx],
+ [miny, miny, maxy, maxy, miny, miny, maxy, maxy],
+ [minz, minz, minz, minz, maxz, maxz, maxz, maxz])
+ return zip(xs, ys, zs)
 
- def tunit_cube(self,vals=None,M=None):
+ def tunit_cube(self, vals=None, M=None):
 if M is None:
 M = self.M
 xyzs = self.unit_cube(vals)
- tcube = proj3d.proj_points(xyzs,M)
+ tcube = proj3d.proj_points(xyzs, M)
 return tcube
 
- def tunit_edges(self, vals=None,M=None):
- tc = self.tunit_cube(vals,M)
- edges = [(tc[0],tc[1]),
- (tc[1],tc[2]),
- (tc[2],tc[3]),
- (tc[3],tc[0]),
+ def tunit_edges(self, vals=None, M=None):
+ tc = self.tunit_cube(vals, M)
+ edges = [(tc[0], tc[1]),
+ (tc[1], tc[2]),
+ (tc[2], tc[3]),
+ (tc[3], tc[0]),
 
- (tc[0],tc[4]),
- (tc[1],tc[5]),
- (tc[2],tc[6]),
- (tc[3],tc[7]),
+ (tc[0], tc[4]),
+ (tc[1], tc[5]),
+ (tc[2], tc[6]),
+ (tc[3], tc[7]),
 
- (tc[4],tc[5]),
- (tc[5],tc[6]),
- (tc[6],tc[7]),
- (tc[7],tc[4])]
+ (tc[4], tc[5]),
+ (tc[5], tc[6]),
+ (tc[6], tc[7]),
+ (tc[7], tc[4])]
 return edges
 
 def draw(self, renderer):
@@ -189,22 +153,19 @@
 
 def get_axis_position(self):
 vals = self.get_w_lims()
- tc = self.tunit_cube(vals,self.M)
- xhigh = tc[1][2]>tc[2][2]
- yhigh = tc[3][2]>tc[2][2]
- zhigh = tc[0][2]>tc[2][2]
- return xhigh,yhigh,zhigh
+ tc = self.tunit_cube(vals, self.M)
+ xhigh = tc[1][2] > tc[2][2]
+ yhigh = tc[3][2] > tc[2][2]
+ zhigh = tc[0][2] > tc[2][2]
+ return xhigh, yhigh, zhigh
 
 def update_datalim(self, xys, **kwargs):
 pass
 
- def update_datalim_numerix(self, x, y):
- pass
-
- def auto_scale_xyz(self, X,Y,Z=None,had_data=None):
- x,y,z = map(np.asarray, (X,Y,Z))
+ def auto_scale_xyz(self, X, Y, Z=None, had_data=None):
+ x, y, z = map(np.asarray, (X, Y, Z))
 try:
- x,y = x.flatten(),y.flatten()
+ x, y = x.flatten(), y.flatten()
 if Z is not None:
 z = z.flatten()
 except AttributeError:
@@ -225,55 +186,63 @@
 # of data and decides how to scale the view portal to fit it.
 
 self.set_top_view()
- if not self._ready: return
+ if not self._ready:
+ return
 
- if not self.get_autoscale_on(): return
+ if not self.get_autoscale_on():
+ return
 if scalex:
- self.set_w_xlim(self.xy_dataLim.intervalx)
+ self.set_xlim3d(self.xy_dataLim.intervalx)
 if scaley:
- self.set_w_ylim(self.xy_dataLim.intervaly)
+ self.set_ylim3d(self.xy_dataLim.intervaly)
 if scalez:
- self.set_w_zlim(self.zz_dataLim.intervalx)
+ self.set_zlim3d(self.zz_dataLim.intervalx)
 
 def get_w_lims(self):
 '''Get 3d world limits.'''
- minpy,maxx = self.get_w_xlim()
- miny,maxy = self.get_w_ylim()
- minz,maxz = self.get_w_zlim()
- return minpy,maxx,miny,maxy,minz,maxz
+ minpy, maxx = self.get_xlim3d()
+ miny, maxy = self.get_ylim3d()
+ minz, maxz = self.get_zlim3d()
+ return minpy, maxx, miny, maxy, minz, maxz
 
 def _determine_lims(self, xmin=None, xmax=None, *args, **kwargs):
 if xmax is None and cbook.iterable(xmin):
 xmin, xmax = xmin
 return (xmin, xmax)
 
- def set_w_zlim(self, *args, **kwargs):
- '''Set 3d z limits.'''
+ def set_xlim3d(self, *args, **kwargs):
+ '''Set 3D x limits.'''
 lims = self._determine_lims(*args, **kwargs)
- self.zz_viewLim.intervalx = lims
+ self.xy_viewLim.intervalx = lims
 return lims
 
- def set_w_xlim(self, *args, **kwargs):
- '''Set 3d x limits.'''
+ def set_ylim3d(self, *args, **kwargs):
+ '''Set 3D y limits.'''
 lims = self._determine_lims(*args, **kwargs)
- self.xy_viewLim.intervalx = lims
+ self.xy_viewLim.intervaly = lims
 return lims
 
- def set_w_ylim(self, *args, **kwargs):
- '''Set 3d y limits.'''
+ def set_zlim3d(self, *args, **kwargs):
+ '''Set 3D z limits.'''
 lims = self._determine_lims(*args, **kwargs)
- self.xy_viewLim.intervaly = lims
+ self.zz_viewLim.intervalx = lims
 return lims
 
- def get_w_zlim(self):
- return self.zz_viewLim.intervalx
-
- def get_w_xlim(self):
+ def get_xlim3d(self):
+ '''Get 3D x limits.'''
 return self.xy_viewLim.intervalx
 
- def get_w_ylim(self):
+ def get_ylim3d(self):
+ '''Get 3D y limits.'''
 return self.xy_viewLim.intervaly
 
+ def get_zlim3d(self):
+ '''Get 3D z limits.'''
+ return self.zz_viewLim.intervalx
+
+ def clabel(self, *args, **kwargs):
+ return None
+
 def pany(self, numsteps):
 print 'numsteps', numsteps
 
@@ -296,23 +265,23 @@
 point.
 
 """
- relev,razim = np.pi * self.elev/180, np.pi * self.azim/180
+ relev, razim = np.pi * self.elev/180, np.pi * self.azim/180
 
- xmin,xmax = self.get_w_xlim()
- ymin,ymax = self.get_w_ylim()
- zmin,zmax = self.get_w_zlim()
+ xmin, xmax = self.get_xlim3d()
+ ymin, ymax = self.get_ylim3d()
+ zmin, zmax = self.get_zlim3d()
 
 # transform to uniform world coordinates 0-1.0,0-1.0,0-1.0
- worldM = proj3d.world_transformation(xmin,xmax,
- ymin,ymax,
- zmin,zmax)
+ worldM = proj3d.world_transformation(xmin, xmax,
+ ymin, ymax,
+ zmin, zmax)
 
 # look into the middle of the new coordinates
- R = np.array([0.5,0.5,0.5])
+ R = np.array([0.5, 0.5, 0.5])
 
- xp = R[0] + np.cos(razim)*np.cos(relev)*self.dist
- yp = R[1] + np.sin(razim)*np.cos(relev)*self.dist
- zp = R[2] + np.sin(relev)*self.dist
+ xp = R[0] + np.cos(razim) * np.cos(relev) * self.dist
+ yp = R[1] + np.sin(razim) * np.cos(relev) * self.dist
+ zp = R[2] + np.sin(relev) * self.dist
 E = np.array((xp, yp, zp))
 
 self.eye = E
@@ -321,24 +290,24 @@
 
 if abs(relev) > np.pi/2:
 # upside down
- V = np.array((0,0,-1))
+ V = np.array((0, 0, -1))
 else:
- V = np.array((0,0,1))
- zfront,zback = -self.dist,self.dist
+ V = np.array((0, 0, 1))
+ zfront, zback = -self.dist, self.dist
 
- viewM = proj3d.view_transformation(E,R,V)
- perspM = proj3d.persp_transformation(zfront,zback)
- M0 = np.dot(viewM,worldM)
- M = np.dot(perspM,M0)
+ viewM = proj3d.view_transformation(E, R, V)
+ perspM = proj3d.persp_transformation(zfront, zback)
+ M0 = np.dot(viewM, worldM)
+ M = np.dot(perspM, M0)
 return M
 
 def mouse_init(self):
 self.button_pressed = None
 canv = self.figure.canvas
 if canv != None:
- c1 = canv.mpl_connect('motion_notify_event', self.on_move)
- c2 = canv.mpl_connect('button_press_event', self.button_press)
- c3 = canv.mpl_connect('button_release_event', self.button_release)
+ c1 = canv.mpl_connect('motion_notify_event', self._on_move)
+ c2 = canv.mpl_connect('button_press_event', self._button_press)
+ c3 = canv.mpl_connect('button_release_event', self._button_release)
 self.cids = [c1, c2, c3]
 
 def cla(self):
@@ -348,11 +317,11 @@
 self.cids = []
 Axes.cla(self)
 
- def button_press(self, event):
+ def _button_press(self, event):
 self.button_pressed = event.button
- self.sx,self.sy = event.xdata,event.ydata
+ self.sx, self.sy = event.xdata, event.ydata
 
- def button_release(self, event):
+ def _button_release(self, event):
 self.button_pressed = None
 
 def format_xdata(self, x):
@@ -361,10 +330,11 @@
 self.fmt_xdata if it is callable, else will fall back on the xaxis
 major formatter
 """
- try: return self.fmt_xdata(x)
+ try:
+ return self.fmt_xdata(x)
 except TypeError:
 fmt = self.w_xaxis.get_major_formatter()
- return sensible_format_data(fmt,x)
+ return sensible_format_data(fmt, x)
 
 def format_ydata(self, y):
 """
@@ -372,28 +342,30 @@
 self.fmt_ydata if it is callable, else will fall back on the yaxis
 major formatter
 """
- try: return self.fmt_ydata(y)
+ try:
+ return self.fmt_ydata(y)
 except TypeError:
 fmt = self.w_yaxis.get_major_formatter()
- return sensible_format_data(fmt,y)
+ return sensible_format_data(fmt, y)
 
 def format_zdata(self, z):
 """
- Return y string formatted. This function will use the attribute
- self.fmt_ydata if it is callable, else will fall back on the yaxis
+ Return z string formatted. This function will use the attribute
+ self.fmt_zdata if it is callable, else will fall back on the yaxis
 major formatter
 """
- try: return self.fmt_zdata(z)
- except (AttributeError,TypeError):
+ try:
+ return self.fmt_zdata(z)
+ except (AttributeError, TypeError):
 fmt = self.w_zaxis.get_major_formatter()
- return sensible_format_data(fmt,z)
+ return sensible_format_data(fmt, z)
 
 def format_coord(self, xd, yd):
- """Given the 2D view coordinates attempt to guess a 3D coordinate
-
- Looks for the nearest edge to the point and then assumes that the point is
- at the same z location as the nearest point on the edge.
 """
+ Given the 2D view coordinates attempt to guess a 3D coordinate.
+ Looks for the nearest edge to the point and then assumes that
+ the point is at the same z location as the nearest point on the edge.
+ """
 
 if self.M is None:
 return ''
@@ -402,32 +374,33 @@
 return 'azimuth=%d deg, elevation=%d deg ' % (self.azim, self.elev)
 # ignore xd and yd and display angles instead
 
- p = (xd,yd)
+ p = (xd, yd)
 edges = self.tunit_edges()
 #lines = [proj3d.line2d(p0,p1) for (p0,p1) in edges]
- ldists = [(proj3d.line2d_seg_dist(p0,p1,p),i) for i,(p0,p1) in enumerate(edges)]
+ ldists = [(proj3d.line2d_seg_dist(p0, p1, p), i) for \
+ i, (p0, p1) in enumerate(edges)]
 ldists.sort()
 # nearest edge
 edgei = ldists[0][1]
 
- p0,p1 = edges[edgei]
+ p0, p1 = edges[edgei]
 
 # scale the z value to match
- x0,y0,z0 = p0
- x1,y1,z1 = p1
- d0 = np.hypot(x0-xd,y0-yd)
- d1 = np.hypot(x1-xd,y1-yd)
+ x0, y0, z0 = p0
+ x1, y1, z1 = p1
+ d0 = np.hypot(x0-xd, y0-yd)
+ d1 = np.hypot(x1-xd, y1-yd)
 dt = d0+d1
 z = d1/dt * z0 + d0/dt * z1
 
- x,y,z = proj3d.inv_transform(xd,yd,z,self.M)
+ x, y, z = proj3d.inv_transform(xd, yd, z, self.M)
 
 xs = self.format_xdata(x)
 ys = self.format_ydata(y)
 zs = self.format_ydata(z)
- return 'x=%s, y=%s, z=%s'%(xs,ys,zs)
+ return 'x=%s, y=%s, z=%s' % (xs, ys, zs)
 
- def on_move(self, event):
+ def _on_move(self, event):
 """Mouse moving
 
 button-1 rotates
@@ -438,27 +411,26 @@
 
 if self.M is None:
 return
- # this shouldn't be called before the graph has been drawn for the first time!
+
 x, y = event.xdata, event.ydata
- 
 # In case the mouse is out of bounds.
 if x == None:
- 
 return
- dx,dy = x-self.sx,y-self.sy
- x0,x1 = self.get_xlim()
- y0,y1 = self.get_ylim()
+
+ dx, dy = x - self.sx, y - self.sy
+ x0, x1 = self.get_xlim()
+ y0, y1 = self.get_ylim()
 w = (x1-x0)
 h = (y1-y0)
- self.sx,self.sy = x,y
+ self.sx, self.sy = x, y
 
 if self.button_pressed == 1:
 # rotate viewing point
 # get the x and y pixel coords
 if dx == 0 and dy == 0:
 return
- self.elev = axis3d.norm_angle(self.elev - (dy/h)*180)
- self.azim = axis3d.norm_angle(self.azim - (dx/w)*180)
+ self.elev = art3d.norm_angle(self.elev - (dy/h)*180)
+ self.azim = art3d.norm_angle(self.azim - (dx/w)*180)
 self.get_proj()
 self.figure.canvas.draw()
 elif self.button_pressed == 2:
@@ -469,73 +441,122 @@
 elif self.button_pressed == 3:
 # zoom view
 # hmmm..this needs some help from clipping....
- minpy,maxx,miny,maxy,minz,maxz = self.get_w_lims()
+ minpy, maxx, miny, maxy, minz, maxz = self.get_w_lims()
 df = 1-((h - dy)/h)
 dx = (maxx-minpy)*df
 dy = (maxy-miny)*df
 dz = (maxz-minz)*df
- self.set_w_xlim(minpy-dx,maxx+dx)
- self.set_w_ylim(miny-dy,maxy+dy)
- self.set_w_zlim(minz-dz,maxz+dz)
+ self.set_xlim3d(minpy - dx, maxx + dx)
+ self.set_ylim3d(miny - dy, maxy + dy)
+ self.set_zlim3d(minz - dz, maxz + dz)
 self.get_proj()
 self.figure.canvas.draw()
 
 def set_xlabel(self, xlabel, fontdict=None, **kwargs):
- #par = cbook.popd(kwargs, 'par',None)
- #label.set_par(par)
+ '''Set xlabel. '''
 
 label = self.w_xaxis.get_label()
 label.set_text(xlabel)
- if fontdict is not None: label.update(fontdict)
+ if fontdict is not None:
+ label.update(fontdict)
 label.update(kwargs)
 return label
 
 def set_ylabel(self, ylabel, fontdict=None, **kwargs):
+ '''Set ylabel.'''
+
 label = self.w_yaxis.get_label()
 label.set_text(ylabel)
- if fontdict is not None: label.update(fontdict)
+ if fontdict is not None:
+ label.update(fontdict)
 label.update(kwargs)
 return label
 
 def set_zlabel(self, zlabel, fontdict=None, **kwargs):
+ '''Set zlabel.'''
+
 label = self.w_zaxis.get_label()
 label.set_text(zlabel)
- if fontdict is not None: label.update(fontdict)
+ if fontdict is not None:
+ label.update(fontdict)
 label.update(kwargs)
 return label
 
- def plot(self, *args, **kwargs):
+ def text(self, x, y, z, s, zdir=None):
+ '''Add text to the plot.'''
+ text = Axes.text(self, x, y, s)
+ art3d.text_2d_to_3d(text, z, zdir)
+ return text
+
+ text3D = text
+
+ def plot(self, xs, ys, *args, **kwargs):
+ '''
+ Plot 2D or 3D data.
+
+ ========== ================================================
+ Argument Description
+ ========== ================================================
+ *xs*, *ys* X, y coordinates of vertices
+
+ *zs* z value(s), either one for all points or one for
+ each point.
+ *zdir* Which direction to use as z ('x', 'y' or 'z')
+ when plotting a 2d set.
+ ========== ================================================
+
+ Other arguments are passed on to
+ :func:`~matplotlib.axes.Axes.plot`
+ '''
+
 had_data = self.has_data()
+ zs = kwargs.pop('zs', 0)
+ zdir = kwargs.pop('zdir', 'z')
 
- zval = kwargs.pop( 'z', 0)
- zdir = kwargs.pop('dir', 'z')
- lines = Axes.plot(self, *args, **kwargs)
+ argsi = 0
+ # First argument is array of zs
+ if len(args) > 0 and cbook.iterable(args[0]) and \
+ len(xs) == len(args[0]) and cbook.is_scalar(args[0][0]):
+ zs = args[argsi]
+ argsi += 1
+
+ # First argument is z value
+ elif len(args) > 0 and cbook.is_scalar(args[0]):
+ zs = args[argsi]
+ argsi += 1
+
+ # Match length
+ if not cbook.iterable(zs):
+ zs = [zs] * len(xs)
+
+ lines = Axes.plot(self, xs, ys, *args[argsi:], **kwargs)
 for line in lines:
- art3d.line_2d_to_3d(line, z=zval, dir=zdir)
+ art3d.line_2d_to_3d(line, zs=zs, zdir=zdir)
 
- xs = lines[0].get_xdata()
- ys = lines[0].get_ydata()
- zs = [zval for x in xs]
- xs,ys,zs = art3d.juggle_axes(xs,ys,zs,zdir)
- self.auto_scale_xyz(xs,ys,zs, had_data)
+ self.auto_scale_xyz(xs, ys, zs, had_data)
 return lines
 
- def plot3D(self, xs, ys, zs, *args, **kwargs):
- had_data = self.has_data()
- lines = Axes.plot(self, xs,ys, *args, **kwargs)
- if len(lines)==1:
- line = lines[0]
- art3d.line_2d_to_3d(line, zs)
- self.auto_scale_xyz(xs,ys,zs, had_data)
- return lines
+ plot3D = plot
 
- plot3d=plot3D
-
 def plot_surface(self, X, Y, Z, *args, **kwargs):
+ '''
+ Create a surface plot.
+ 
+ ========== ================================================
+ Argument Description
+ ========== ================================================
+ *X*, *Y*, Data values as numpy.arrays
+ *Z*
+ *rstride* Array row stride (step size)
+ *cstride* Array column stride (step size)
+ *color* Color of the surface patches
+ ========== ================================================
+ '''
+
 had_data = self.has_data()
 
 rows, cols = Z.shape
- tX,tY,tZ = np.transpose(X), np.transpose(Y), np.transpose(Z)
+ tX, tY, tZ = np.transpose(X), np.transpose(Y), np.transpose(Z)
 rstride = kwargs.pop('rstride', 10)
 cstride = kwargs.pop('cstride', 10)
 
@@ -544,21 +565,21 @@
 
 polys = []
 boxes = []
- for rs in np.arange(0,rows-1,rstride):
- for cs in np.arange(0,cols-1,cstride):
+ for rs in np.arange(0, rows-1, rstride):
+ for cs in np.arange(0, cols-1, cstride):
 ps = []
 corners = []
- for a,ta in [(X,tX),(Y,tY),(Z,tZ)]:
- ztop = a[rs][cs:min(cols,cs+cstride+1)]
- zleft = ta[min(cols-1,cs+cstride)][rs:min(rows,rs+rstride+1)]
- zbase = a[min(rows-1,rs+rstride)][cs:min(cols,cs+cstride+1):]
+ for a, ta in [(X, tX), (Y, tY), (Z, tZ)]:
+ ztop = a[rs][cs:min(cols, cs+cstride+1)]
+ zleft = ta[min(cols-1, cs+cstride)][rs:min(rows, rs+rstride+1)]
+ zbase = a[min(rows-1, rs+rstride)][cs:min(cols, cs+cstride+1):]
 zbase = zbase[::-1]
- zright = ta[cs][rs:min(rows,rs+rstride+1):]
+ zright = ta[cs][rs:min(rows, rs+rstride+1):]
 zright = zright[::-1]
- corners.append([ztop[0],ztop[-1],zbase[0],zbase[-1]])
- z = np.concatenate((ztop,zleft,zbase,zright))
+ corners.append([ztop[0], ztop[-1], zbase[0], zbase[-1]])
+ z = np.concatenate((ztop, zleft, zbase, zright))
 ps.append(z)
- boxes.append(map(np.array,zip(*corners)))
+ boxes.append(map(np.array, zip(*corners)))
 polys.append(zip(*ps))
 
 lines = []
@@ -567,8 +588,8 @@
 n = proj3d.cross(box[0]-box[1],
 box[0]-box[2])
 n = n/proj3d.mod(n)*5
- shade.append(np.dot(n,[-1,-1,0.5]))
- lines.append((box[0],n+box[0]))
+ shade.append(np.d...
 
[truncated message content]
From: <lee...@us...> - 2009年06月07日 17:36:52
Revision: 7197
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7197&view=rev
Author: leejjoon
Date: 2009年06月07日 17:36:51 +0000 (2009年6月07日)
Log Message:
-----------
fix axes_grid/demo_parasite_axes.py
Modified Paths:
--------------
 trunk/matplotlib/examples/axes_grid/demo_parasite_axes.py
 trunk/matplotlib/examples/axes_grid/demo_parasite_axes2.py
Modified: trunk/matplotlib/examples/axes_grid/demo_parasite_axes.py
===================================================================
--- trunk/matplotlib/examples/axes_grid/demo_parasite_axes.py	2009年06月07日 15:48:05 UTC (rev 7196)
+++ trunk/matplotlib/examples/axes_grid/demo_parasite_axes.py	2009年06月07日 17:36:51 UTC (rev 7197)
@@ -22,8 +22,9 @@
 
 par2.set_ylabel("Velocity")
 offset = (60, 0)
- new_axisline = par2._grid_helper.new_axisline
+ new_axisline = par2._grid_helper.new_fixed_axis
 par2.axis["right2"] = new_axisline(loc="right",
+ axes=par2,
 offset=offset)
 
 
Modified: trunk/matplotlib/examples/axes_grid/demo_parasite_axes2.py
===================================================================
--- trunk/matplotlib/examples/axes_grid/demo_parasite_axes2.py	2009年06月07日 15:48:05 UTC (rev 7196)
+++ trunk/matplotlib/examples/axes_grid/demo_parasite_axes2.py	2009年06月07日 17:36:51 UTC (rev 7197)
@@ -1,5 +1,4 @@
 from mpl_toolkits.axes_grid.parasite_axes import SubplotHost
-import matplotlib.transforms as mtransforms
 import matplotlib.pyplot as plt
 
 if 1:
@@ -20,6 +19,7 @@
 offset = 60, 0
 new_axisline = par2.get_grid_helper().new_fixed_axis
 par2.axis["right2"] = new_axisline(loc="right",
+ axes=par2,
 offset=offset)
 
 par2.axis["right2"].label.set_visible(True)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月07日 15:48:37
Revision: 7196
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7196&view=rev
Author: jdh2358
Date: 2009年06月07日 15:48:05 +0000 (2009年6月07日)
Log Message:
-----------
modifications to examples/docs to get them to build for the website
Modified Paths:
--------------
 trunk/matplotlib/doc/pyplots/matplotlibrc
 trunk/matplotlib/doc/pyplots/tex_demo.png
 trunk/matplotlib/examples/pylab_examples/finance_work2.py
 trunk/matplotlib/lib/matplotlib/axes.py
Modified: trunk/matplotlib/doc/pyplots/matplotlibrc
===================================================================
--- trunk/matplotlib/doc/pyplots/matplotlibrc	2009年06月07日 14:15:28 UTC (rev 7195)
+++ trunk/matplotlib/doc/pyplots/matplotlibrc	2009年06月07日 15:48:05 UTC (rev 7196)
@@ -27,7 +27,6 @@
 # the default backend; one of GTK GTKAgg GTKCairo FltkAgg QtAgg TkAgg
 # WX WXAgg Agg Cairo GD GDK Paint PS PDF SVG Template
 backend : Agg
-numerix : numpy # numpy, Numeric or numarray
 #maskedarray : False # True to use external maskedarray module
 # instead of numpy.ma; this is a temporary
 # setting for testing maskedarray.
Modified: trunk/matplotlib/doc/pyplots/tex_demo.png
===================================================================
(Binary files differ)
Modified: trunk/matplotlib/examples/pylab_examples/finance_work2.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/finance_work2.py	2009年06月07日 14:15:28 UTC (rev 7195)
+++ trunk/matplotlib/examples/pylab_examples/finance_work2.py	2009年06月07日 15:48:05 UTC (rev 7196)
@@ -1,10 +1,5 @@
-## Plot the stock price with some technical indicators
-## Example usage::
-## python stocks2.py --ticker=GE --startdate=2003
-##
-import datetime, os, urllib, optparse
+import datetime
 import numpy as np
-import dateutil.parser
 import matplotlib.colors as colors
 import matplotlib.finance as finance
 import matplotlib.dates as mdates
@@ -13,34 +8,12 @@
 import matplotlib.pyplot as plt
 import matplotlib.font_manager as font_manager
 
-today = datetime.date.today()
 
-optionparser = optparse.OptionParser()
+startdate = datetime.date(2006,1,1)
+today = enddate = datetime.date.today()
+ticker = 'SPY'
 
-optionparser.add_option('-t', '--ticker',
- dest='ticker',
- help='a stock market ticker',
- default='SPY')
 
-optionparser.add_option('-s', '--startdate',
- dest='startdate',
- help='the start date',
- default=(today-datetime.timedelta(days=365*2)).strftime('%Y-%m-%d'))
-
-optionparser.add_option('-e', '--enddate',
- dest='enddate',
- help='the end date',
- default=today.strftime('%Y-%m-%d'))
-
-
-(commandoptions, commandargs) = optionparser.parse_args()
-
-
-startdate = dateutil.parser.parse(commandoptions.startdate)
-enddate = dateutil.parser.parse(commandoptions.enddate)
-ticker = commandoptions.ticker
-
-
 fh = finance.fetch_historical_yahoo(ticker, startdate, enddate)
 # a numpy record array with fields: date, open, high, low, close, volume, adj_close)
 
Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py	2009年06月07日 14:15:28 UTC (rev 7195)
+++ trunk/matplotlib/lib/matplotlib/axes.py	2009年06月07日 15:48:05 UTC (rev 7196)
@@ -6019,7 +6019,7 @@
 
 %(PolyCollection)s
 
- .. plot:: mpl_examples/pylab_examples/fill_between_demo.py.py
+ .. plot:: mpl_examples/pylab_examples/fill_between_demo.py
 
 .. seealso::
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2009年06月07日 14:16:06
Revision: 7195
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7195&view=rev
Author: jdh2358
Date: 2009年06月07日 14:15:28 +0000 (2009年6月07日)
Log Message:
-----------
removed reserved name "as" from some examples
Modified Paths:
--------------
 trunk/matplotlib/examples/axes_grid/inset_locator_demo.py
 trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py
Modified: trunk/matplotlib/examples/axes_grid/inset_locator_demo.py
===================================================================
--- trunk/matplotlib/examples/axes_grid/inset_locator_demo.py	2009年06月07日 14:13:12 UTC (rev 7194)
+++ trunk/matplotlib/examples/axes_grid/inset_locator_demo.py	2009年06月07日 14:15:28 UTC (rev 7195)
@@ -5,13 +5,13 @@
 
 
 def add_sizebar(ax, size):
- as = AnchoredSizeBar(ax.transData,
+ asb = AnchoredSizeBar(ax.transData,
 size,
 str(size),
 loc=8,
 pad=0.1, borderpad=0.5, sep=5,
 frameon=False)
- ax.add_artist(as)
+ ax.add_artist(asb)
 
 
 fig = plt.figure(1, [5.5, 3])
Modified: trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py
===================================================================
--- trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py	2009年06月07日 14:13:12 UTC (rev 7194)
+++ trunk/matplotlib/examples/axes_grid/simple_anchored_artists.py	2009年06月07日 14:15:28 UTC (rev 7195)
@@ -38,13 +38,13 @@
 from mpl_toolkits.axes_grid.anchored_artists import AnchoredSizeBar
 # draw a horizontal bar with length of 0.1 in Data coordinate
 # (ax.transData) with a label underneath.
- as = AnchoredSizeBar(ax.transData,
+ asb = AnchoredSizeBar(ax.transData,
 0.1,
 r"1$^{\prime}$",
 loc=8,
 pad=0.1, borderpad=0.5, sep=5,
 frameon=False)
- ax.add_artist(as)
+ ax.add_artist(asb)
 
 
 if 1:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.

Showing results of 79

<< < 1 2 3 4 > >> (Page 2 of 4)
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /