From: <jd...@us...> - 2007-10-29 18:53:06
|
Revision: 4061 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4061&view=rev Author: jdh2358 Date: 2007-10-29 11:52:41 -0700 (Mon, 29 Oct 2007) Log Message: ----------- fixed some examples bugs Modified Paths: -------------- trunk/matplotlib/examples/keypress_demo.py trunk/matplotlib/examples/units/bar_unit_demo.py trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/mlab.py trunk/matplotlib/lib/matplotlib/patches.py Modified: trunk/matplotlib/examples/keypress_demo.py =================================================================== --- trunk/matplotlib/examples/keypress_demo.py 2007-10-29 18:37:17 UTC (rev 4060) +++ trunk/matplotlib/examples/keypress_demo.py 2007-10-29 18:52:41 UTC (rev 4061) @@ -1,21 +1,23 @@ #!/usr/bin/env python """ Show how to connect to keypress events - -Note, on the wx backend on some platforms (eg linux), you have to -first click on the figure before the keypress events are activated. -If you know how to fix this, please email us! """ -from pylab import * +import numpy as n +from pylab import figure, show def press(event): print 'press', event.key - if event.key=='g': - grid() - draw() + if event.key=='x': + visible = xl.get_visible() + xl.set_visible(not visible) + fig.canvas.draw() -connect('key_press_event', press) +fig = figure() +ax = fig.add_subplot(111) -title('press g to toggle grid') -plot(rand(12), rand(12), 'go') +fig.canvas.mpl_connect('key_press_event', press) + +ax.plot(n.random.rand(12), n.random.rand(12), 'go') +xl = ax.set_xlabel('easy come, easy go') + show() Modified: trunk/matplotlib/examples/units/bar_unit_demo.py =================================================================== --- trunk/matplotlib/examples/units/bar_unit_demo.py 2007-10-29 18:37:17 UTC (rev 4060) +++ trunk/matplotlib/examples/units/bar_unit_demo.py 2007-10-29 18:52:41 UTC (rev 4061) @@ -4,15 +4,16 @@ N = 5 menMeans = (150*cm, 160*cm, 146*cm, 172*cm, 155*cm) -menStd = (20*cm, 30*cm, 32*cm, 10*cm, 20*cm) +menStd = ( 20*cm, 30*cm, 32*cm, 10*cm, 20*cm) fig = figure() ax = fig.add_subplot(111) ind = nx.arange(N) # the x locations for the groups -width = 0.35 # the width of the bars +width = 0.35 # the width of the bars p1 = ax.bar(ind, menMeans, width, color='r', bottom=0*cm, yerr=menStd) + womenMeans = (145*cm, 149*cm, 172*cm, 165*cm, 200*cm) womenStd = (30*cm, 25*cm, 20*cm, 31*cm, 22*cm) p2 = ax.bar(ind+width, womenMeans, width, color='y', bottom=0*cm, yerr=womenStd) Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2007-10-29 18:37:17 UTC (rev 4060) +++ trunk/matplotlib/lib/matplotlib/axes.py 2007-10-29 18:52:41 UTC (rev 4061) @@ -1173,6 +1173,8 @@ # Otherwise, it will compute the bounds of it's current data # and the data in xydata xys = npy.asarray(xys) + + self.dataLim.update_numerix_xy(xys, -1) @@ -3242,22 +3244,7 @@ patches = [] - # lets do some conversions now - if self.xaxis is not None: - xconv = self.xaxis.converter - if xconv is not None: - units = self.xaxis.get_units() - left = xconv.convert( left, units ) - width = xconv.convert( width, units ) - if self.yaxis is not None: - yconv = self.yaxis.converter - if yconv is not None : - units = self.yaxis.get_units() - bottom = yconv.convert( bottom, units ) - height = yconv.convert( height, units ) - - if align == 'edge': pass elif align == 'center': @@ -3645,23 +3632,24 @@ a list of error bar cap lines, the third element is a list of line collections for the horizontal and vertical error ranges """ + self._process_unit_info(xdata=x, ydata=y, kwargs=kwargs) if not self._hold: self.cla() - # make sure all the args are iterable arrays - if not iterable(x): x = npy.array([x]) - else: x = npy.asarray(x) + # make sure all the args are iterable; use lists not arrays to preserve units + if not iterable(x): + x = [x] - if not iterable(y): y = npy.array([y]) - else: y = npy.asarray(y) + if not iterable(y): + y = [y] if xerr is not None: - if not iterable(xerr): xerr = npy.array([xerr]) - else: xerr = npy.asarray(xerr) + if not iterable(xerr): + xerr = [xerr] if yerr is not None: - if not iterable(yerr): yerr = npy.array([yerr]) - else: yerr = npy.asarray(yerr) + if not iterable(yerr): + yerr = [yerr] l0 = None @@ -3677,7 +3665,9 @@ if 'lw' in kwargs: lines_kw['lw']=kwargs['lw'] - if not iterable(lolims): lolims = npy.array([lolims]*len(x), bool) + # arrays fine here, they are booleans and hence not units + if not iterable(lolims): + lolims = npy.asarray([lolims]*len(x), bool) else: lolims = npy.asarray(lolims, bool) if not iterable(uplims): uplims = npy.array([uplims]*len(x), bool) @@ -3699,12 +3689,14 @@ plot_kw['mew']=kwargs['mew'] if xerr is not None: - if len(xerr.shape) == 1: - left = x-xerr - right = x+xerr + if iterable(xerr) and len(xerr)==2: + # using list comps rather than arrays to preserve units + left = [thisx-thiserr for (thisx, thiserr) in zip(x,xerr[0])] + right = [thisx+thiserr for (thisx, thiserr) in zip(x,xerr[1])] else: - left = x-xerr[0] - right = x+xerr[1] + # using list comps rather than arrays to preserve units + left = [thisx-thiserr for (thisx, thiserr) in zip(x,xerr)] + right = [thisx+thiserr for (thisx, thiserr) in zip(x,xerr)] barcols.append( self.hlines(y, left, right, **lines_kw ) ) if capsize > 0: @@ -3723,12 +3715,14 @@ caplines.extend( self.plot(right, y, 'k|', **plot_kw) ) if yerr is not None: - if len(yerr.shape) == 1: - lower = y-yerr - upper = y+yerr + if iterable(yerr) and len(yerr)==2: + # using list comps rather than arrays to preserve units + lower = [thisy-thiserr for (thisy, thiserr) in zip(y,yerr[0])] + upper = [thisy+thiserr for (thisy, thiserr) in zip(y,yerr[1])] else: - lower = y-yerr[0] - upper = y+yerr[1] + # using list comps rather than arrays to preserve units + lower = [thisy-thiserr for (thisy, thiserr) in zip(y,yerr)] + upper = [thisy+thiserr for (thisy, thiserr) in zip(y,yerr)] barcols.append( self.vlines(x, lower, upper, **lines_kw) ) if capsize > 0: Modified: trunk/matplotlib/lib/matplotlib/mlab.py =================================================================== --- trunk/matplotlib/lib/matplotlib/mlab.py 2007-10-29 18:37:17 UTC (rev 4060) +++ trunk/matplotlib/lib/matplotlib/mlab.py 2007-10-29 18:52:41 UTC (rev 4061) @@ -1455,7 +1455,116 @@ for row in r: writer.writerow(map(str, row)) fh.close() + +try: + import pyExcelerator as excel +except ImportError: + pass +else: + class Format: + xlstyle = None + def convert(self, x): + return x + + class FormatFloat(Format): + def __init__(self, precision=4): + self.xlstyle = excel.XFStyle() + zeros = ''.join(['0']*precision) + self.xlstyle.num_format_str = '#,##0.%s;[RED]-#,##0.%s'%(zeros, zeros) + + class FormatInt(Format): + convert = int + def __init__(self): + + self.xlstyle = excel.XFStyle() + self.xlstyle.num_format_str = '#,##;[RED]-#,##' + + class FormatPercent(Format): + def __init__(self, precision=4): + self.xlstyle = excel.XFStyle() + zeros = ''.join(['0']*precision) + self.xlstyle.num_format_str = '0.%s%;[RED]-0.%s%'%(zeros, zeros) + + class FormatThousands(FormatFloat): + def __init__(self, precision=1): + FormatFloat.__init__(self, precision) + + def convert(self, x): + return x/1e3 + + class FormatMillions(FormatFloat): + def __init__(self, precision=1): + FormatFloat.__init__(self, precision) + + def convert(self, x): + return x/1e6 + + class FormatDate(Format): + def __init__(self, fmt='%Y-%m-%d'): + self.fmt = fmt + + def convert(self, val): + return val.strftime(self.fmt) + + class FormatDatetime(Format): + def __init__(self, fmt='%Y-%m-%d %H:%M:%S'): + self.fmt = fmt + + def convert(self, val): + return val.strftime(self.fmt) + + class FormatObject(Format): + + def convert(self, x): + return str(x) + + def rec2excel(ws, r, formatd=None, rownum=0): + """ + save record array r to excel pyExcelerator worksheet ws + starting at rownum + + formatd is a dictionary mapping dtype name -> Format instances + """ + + if formatd is None: + formatd = dict() + + formats = [] + for i, name in enumerate(r.dtype.names): + dt = r.dtype[name] + format = formatd.get(name) + if format is None: + format = rec2excel.formatd.get(dt.type, FormatObject()) + + ws.write(rownum, i, name) + formats.append(format) + + rownum+=1 + + ind = npy.arange(len(r.dtype.names)) + for row in r: + for i in ind: + val = row[i] + format = formats[i] + val = format.convert(val) + if format.xlstyle is None: + ws.write(rownum, i, val) + else: + ws.write(rownum, i, val, format.xlstyle) + rownum += 1 + rec2excel.formatd = { + npy.int16 : FormatInt(), + npy.int32 : FormatInt(), + npy.int64 : FormatInt(), + npy.float32 : FormatFloat(), + npy.float64 : FormatFloat(), + npy.object_ : FormatObject(), + npy.string_ : Format(), + } + + + # some record array helpers def rec_append_field(rec, name, arr, dtype=None): 'return a new record array with field name populated with data from array arr' Modified: trunk/matplotlib/lib/matplotlib/patches.py =================================================================== --- trunk/matplotlib/lib/matplotlib/patches.py 2007-10-29 18:37:17 UTC (rev 4060) +++ trunk/matplotlib/lib/matplotlib/patches.py 2007-10-29 18:52:41 UTC (rev 4061) @@ -350,8 +350,10 @@ Return the vertices of the rectangle """ x, y = self.xy - left, right = self.convert_xunits((x, x + self.width)) - bottom, top = self.convert_yunits((y, y + self.height)) + left = self.convert_xunits(x) + right = self.convert_xunits(x + self.width) + bottom = self.convert_yunits(y) + top = self.convert_yunits(y+self.height) return ( (left, bottom), (left, top), (right, top), (right, bottom), @@ -806,8 +808,15 @@ def get_verts(self): xcenter, ycenter = self.center + width, height = self.width, self.height - width, height = self.width, self.height + xcenter = self.convert_xunits(xcenter) + width = self.convert_xunits(width) + ycenter = self.convert_yunits(ycenter) + height = self.convert_xunits(height) + + + angle = self.angle theta = npy.arange(0.0, 360.0, 1.0)*npy.pi/180.0 @@ -820,8 +829,6 @@ [npy.sin(rtheta), npy.cos(rtheta)], ]) - x = self.convert_xunits(x) - y = self.convert_yunits(y) x, y = npy.dot(R, npy.array([x, y])) x += xcenter @@ -857,6 +864,8 @@ x, y = self.center x = self.convert_xunits(x) y = self.convert_yunits(y) + w = self.convert_xunits(self.width)/2. + h = self.convert_yunits(self.height)/2. theta = self.angle * npy.pi/180. T = npy.array([ @@ -864,10 +873,8 @@ [0, 1, y], [0, 0, 1]]) - w, h = self.width/2, self.height/2. - w = self.convert_xunits(w) - h = self.convert_yunits(h) + S = npy.array([ [w, 0, 0], This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |