From: <jd...@us...> - 2007-12-21 18:56:52
|
Revision: 4785 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4785&view=rev Author: jdh2358 Date: 2007-12-21 08:22:42 -0800 (Fri, 21 Dec 2007) Log Message: ----------- added unit support to arc Modified Paths: -------------- trunk/matplotlib/API_CHANGES trunk/matplotlib/CODING_GUIDE trunk/matplotlib/examples/units/ellipse_with_units.py trunk/matplotlib/lib/matplotlib/mlab.py trunk/matplotlib/lib/matplotlib/patches.py trunk/matplotlib/unit/ellipse_large.py Modified: trunk/matplotlib/API_CHANGES =================================================================== --- trunk/matplotlib/API_CHANGES 2007-12-21 15:13:14 UTC (rev 4784) +++ trunk/matplotlib/API_CHANGES 2007-12-21 16:22:42 UTC (rev 4785) @@ -1,3 +1,6 @@ + For csv2rec, checkrows=0 is the new default indicating all rows + will be checked for type inference + A warning is issued when an image is drawn on log-scaled axes, since it will not log-scale the image data. Modified: trunk/matplotlib/CODING_GUIDE =================================================================== --- trunk/matplotlib/CODING_GUIDE 2007-12-21 15:13:14 UTC (rev 4784) +++ trunk/matplotlib/CODING_GUIDE 2007-12-21 16:22:42 UTC (rev 4785) @@ -12,6 +12,9 @@ # checking out the main src svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/matplotlib matplotlib --username=youruser --password=yourpass +# branch checkouts, eg the transforms branch +svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/transforms transbranch + == Committing changes == When committing changes to matplotlib, there are a few things to bear @@ -27,12 +30,6 @@ support 2.3, so avoid 2.4 only features like decorators until we remove 2.3 support - * Are your changes Numeric, numarray and numpy compatible? Try - running simple_plot.py or image_demo.py with --Numeric, --numarray - and --numpy (Note, someone should add examples to - backend_driver.py which explicitly require numpy, numarray and - Numeric so we can automatically catch these) - * Can you pass examples/backend_driver.py? This is our poor man's unit test. @@ -49,9 +46,8 @@ For numpy, use: import numpy as npy - ... a = npy.array([1,2,3]) - ... + For masked arrays, use: import matplotlib.numerix.npyma as ma @@ -64,16 +60,20 @@ For matplotlib main module, use: import matplotlib as mpl - ... mpl.rcParams['xtick.major.pad'] = 6 -For matplotlib modules, use: +For matplotlib modules (or any other modules), use: - import matplotlib.cbook as cbook as mpl_cbook - ... - if mpl_cbook.iterable(z): - ... + import matplotlib.cbook as cbook + + if cbook.iterable(z): + pass + We prefer this over the equivalent 'from matplotlib import cbook' + because the latter is ambiguous whether cbook is a module or a + function to the new developer. The former makes it explcit that + you are importing a module or package. + == Naming, spacing, and formatting conventions == In general, we want to hew as closely as possible to the standard @@ -114,15 +114,6 @@ python, C and C++ -When importing modules from the matplotlib namespace - - import matplotlib.cbook as cbook # DO - from matplotlib import cbook #DONT - -because the latter is ambiguous whether cbook is a module or a -function to the new developer. The former makes it explcit that you -are importing a module or package. - ; and similarly for c++-mode-hook and c-mode-hook (add-hook 'python-mode-hook (lambda () Modified: trunk/matplotlib/examples/units/ellipse_with_units.py =================================================================== --- trunk/matplotlib/examples/units/ellipse_with_units.py 2007-12-21 15:13:14 UTC (rev 4784) +++ trunk/matplotlib/examples/units/ellipse_with_units.py 2007-12-21 16:22:42 UTC (rev 4785) @@ -1,5 +1,5 @@ """ -Compare the ellipse generated with arcs versus a polygonal approximation +Compare the ellipse generated with arcs versus a polygonal approximation """ from basic_units import cm import numpy as npy @@ -46,4 +46,24 @@ #fig.savefig('ellipse_compare.png') fig.savefig('ellipse_compare') +fig = figure() +ax = fig.add_subplot(211, aspect='auto') +ax.fill(x, y, alpha=0.2, facecolor='yellow', edgecolor='yellow', linewidth=1, zorder=1) + +e1 = patches.Arc((xcenter, ycenter), width, height, + angle=angle, linewidth=2, fill=False, zorder=2) + +ax.add_patch(e1) + +ax = fig.add_subplot(212, aspect='equal') +ax.fill(x, y, alpha=0.2, facecolor='green', edgecolor='green', zorder=1) +e2 = patches.Arc((xcenter, ycenter), width, height, + angle=angle, linewidth=2, fill=False, zorder=2) + + +ax.add_patch(e2) + +#fig.savefig('arc_compare.png') +fig.savefig('arc_compare') + show() Modified: trunk/matplotlib/lib/matplotlib/mlab.py =================================================================== --- trunk/matplotlib/lib/matplotlib/mlab.py 2007-12-21 15:13:14 UTC (rev 4784) +++ trunk/matplotlib/lib/matplotlib/mlab.py 2007-12-21 16:22:42 UTC (rev 4785) @@ -2045,7 +2045,7 @@ return newrec.view(npy.recarray) -def csv2rec(fname, comments='#', skiprows=0, checkrows=5, delimiter=',', +def csv2rec(fname, comments='#', skiprows=0, checkrows=0, delimiter=',', converterd=None, names=None, missing=None): """ Load data from comma/space/tab delimited file in fname into a @@ -2075,7 +2075,7 @@ names, if not None, is a list of header names. In this case, no header will be read from the file - if no rows are found, None is returned See examples/loadrec.py + if no rows are found, None is returned -- see examples/loadrec.py """ if converterd is None: Modified: trunk/matplotlib/lib/matplotlib/patches.py =================================================================== --- trunk/matplotlib/lib/matplotlib/patches.py 2007-12-21 15:13:14 UTC (rev 4784) +++ trunk/matplotlib/lib/matplotlib/patches.py 2007-12-21 16:22:42 UTC (rev 4785) @@ -977,10 +977,16 @@ """ An elliptical arc. Because it performs various optimizations, it can not be filled. + + The arc must be used in an Axes instance it cannot be added + directly to a Figure) because it is optimized to only render the + segments that are inside the axes bounding box with high + resolution. """ def __str__(self): - return "Arc(%d,%d;%dx%d)"%(self.center[0],self.center[1],self.width,self.height) + return "Arc(%s,%s;%sx%s)"%(self.center[0],self.center[1],self.width,self.height) + def __init__(self, xy, width, height, angle=0.0, theta1=0.0, theta2=360.0, **kwargs): """ xy - center of ellipse @@ -1053,6 +1059,10 @@ """ # Do the usual GC handling stuff if not self.get_visible(): return + + if not hasattr(self, 'axes'): + raise RuntimeError('Arcs can only be used in Axes instances') + gc = renderer.new_gc() gc.set_foreground(self._edgecolor) gc.set_linewidth(self._linewidth) @@ -1212,10 +1222,17 @@ # Set up the master transform from unit circle, all the way to # display space. + + centerx, centery = self.center + centerx = self.convert_xunits(centerx) + centery = self.convert_yunits(centery) + width = self.convert_xunits(self.width) + height = self.convert_yunits(self.height) + trans = self.get_transform() scale = npy.array( - [[self.width * 0.5, 0.0, 0.0], - [0.0, self.height * 0.5, 0.0], + [[width * 0.5, 0.0, 0.0], + [0.0, height * 0.5, 0.0], [0.0, 0.0, 1.0]], npy.float_) theta = (self.angle / 180.0) * npy.pi rotate = npy.array( @@ -1223,8 +1240,8 @@ [npy.sin(theta), npy.cos(theta), 0.0], [0.0, 0.0, 1.0]], npy.float_) translate = npy.array( - [[1.0, 0.0, self.center[0]], - [0.0, 1.0, self.center[1]], + [[1.0, 0.0, centerx], + [0.0, 1.0, centery], [0.0, 0.0, 1.0]], npy.float_) sx, b, c, sy, tx, ty = trans.as_vec6_val() dataTrans = npy.array( @@ -1240,7 +1257,7 @@ # that as a threshold to use the fast (whole ellipse) # technique or accurate (partial arcs) technique. size = affine_transform( - npy.array([[self.width, self.height]], npy.float_), + npy.array([[width, height]], npy.float_), mainTrans) width = size[0,0] height = size[0,1] Modified: trunk/matplotlib/unit/ellipse_large.py =================================================================== --- trunk/matplotlib/unit/ellipse_large.py 2007-12-21 15:13:14 UTC (rev 4784) +++ trunk/matplotlib/unit/ellipse_large.py 2007-12-21 16:22:42 UTC (rev 4785) @@ -6,7 +6,7 @@ import math from pylab import * -from matplotlib.patches import Ellipse +from matplotlib.patches import Ellipse, Arc # given a point x, y x = 2692.440 @@ -47,39 +47,75 @@ ellipseLine = ax.plot( xs, ys, **kwargs ) + + ################################################## # make the axes -ax = subplot( 211, aspect='equal' ) -ax.set_aspect( 'equal', 'datalim' ) +ax1 = subplot( 311, aspect='equal' ) +ax1.set_aspect( 'equal', 'datalim' ) # make the lower-bound ellipse diam = (r - delta) * 2.0 lower_ellipse = Ellipse( (0.0, 0.0), diam, diam, 0.0, fill=False, edgecolor="darkgreen" ) -ax.add_patch( lower_ellipse ) +ax1.add_patch( lower_ellipse ) # make the target ellipse diam = r * 2.0 target_ellipse = Ellipse( (0.0, 0.0), diam, diam, 0.0, fill=False, edgecolor="darkred" ) -ax.add_patch( target_ellipse ) +ax1.add_patch( target_ellipse ) # make the upper-bound ellipse diam = (r + delta) * 2.0 upper_ellipse = Ellipse( (0.0, 0.0), diam, diam, 0.0, fill=False, edgecolor="darkblue" ) -ax.add_patch( upper_ellipse ) +ax1.add_patch( upper_ellipse ) # make the target diam = delta * 2.0 target = Ellipse( (x, y), diam, diam, 0.0, fill=False, edgecolor="#DD1208" ) +ax1.add_patch( target ) + +# give it a big marker +ax1.plot( [x], [y], marker='x', linestyle='None', mfc='red', mec='red', markersize=10 ) + +################################################## +# make the axes +ax = subplot( 312, aspect='equal' , sharex=ax1, sharey=ax1) +ax.set_aspect( 'equal', 'datalim' ) + +# make the lower-bound arc +diam = (r - delta) * 2.0 +lower_arc = Arc( (0.0, 0.0), diam, diam, 0.0, fill=False, edgecolor="darkgreen" ) +ax.add_patch( lower_arc ) + +# make the target arc +diam = r * 2.0 +target_arc = Arc( (0.0, 0.0), diam, diam, 0.0, fill=False, edgecolor="darkred" ) +ax.add_patch( target_arc ) + +# make the upper-bound arc +diam = (r + delta) * 2.0 +upper_arc = Arc( (0.0, 0.0), diam, diam, 0.0, fill=False, edgecolor="darkblue" ) +ax.add_patch( upper_arc ) + +# make the target +diam = delta * 2.0 +target = Arc( (x, y), diam, diam, 0.0, fill=False, edgecolor="#DD1208" ) ax.add_patch( target ) # give it a big marker ax.plot( [x], [y], marker='x', linestyle='None', mfc='red', mec='red', markersize=10 ) + + + + ################################################## # now lets do the same thing again using a custom ellipse function + + # make the axes -ax = subplot( 212, aspect='equal', sharex=ax, sharey=ax ) +ax = subplot( 313, aspect='equal', sharex=ax1, sharey=ax1 ) ax.set_aspect( 'equal', 'datalim' ) # make the lower-bound ellipse @@ -97,11 +133,17 @@ # give it a big marker ax.plot( [x], [y], marker='x', linestyle='None', mfc='red', mec='red', markersize=10 ) + +# give it a big marker +ax.plot( [x], [y], marker='x', linestyle='None', mfc='red', mec='red', markersize=10 ) + ################################################## # lets zoom in to see the area of interest -ax.set_xlim(2650, 2735) -ax.set_ylim(6705, 6735) +ax1.set_xlim(2650, 2735) +ax1.set_ylim(6705, 6735) + +savefig("ellipse") show() -savefig("ellipse") + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |