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
|
|
|
|
|
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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]
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.
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.
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.