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
(4) |
2
(9) |
3
(23) |
4
(34) |
5
(31) |
6
(25) |
7
(10) |
8
(7) |
9
(1) |
10
(18) |
11
(3) |
12
(18) |
13
(13) |
14
(6) |
15
(9) |
16
(6) |
17
(10) |
18
(12) |
19
(1) |
20
(8) |
21
(5) |
22
|
23
|
24
|
25
|
26
(4) |
27
(2) |
28
(4) |
29
|
30
|
31
|
|
|
|
|
|
Revision: 4622 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4622&view=rev Author: jdh2358 Date: 2007年12月05日 09:11:28 -0800 (2007年12月05日) Log Message: ----------- updated autofmt_xdate to work in more cases. it no longer raises if axes aren't subplots Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/figure.py Modified: trunk/matplotlib/lib/matplotlib/figure.py =================================================================== --- trunk/matplotlib/lib/matplotlib/figure.py 2007年12月05日 16:38:01 UTC (rev 4621) +++ trunk/matplotlib/lib/matplotlib/figure.py 2007年12月05日 17:11:28 UTC (rev 4622) @@ -164,12 +164,14 @@ def autofmt_xdate(self, bottom=0.2, rotation=30, ha='right'): """ - A common use case is a number of subplots with shared xaxes - where the x-axis is date data. The ticklabels are often - long,and it helps to rotate them on the bottom subplot and - turn them off on other subplots. This function will raise a - RuntimeError if any of the Axes are not Subplots. + Date ticklabels often overlap, so it is useful to rotate them + and right align them. Also, a common use case is a number of + subplots with shared xaxes where the x-axis is date data. The + ticklabels are often long, and it helps to rotate them on the + bottom subplot and turn them off on other subplots, as well as + turn off xlabels. + bottom : the bottom of the subplots for subplots_adjust rotation: the rotation of the xtick labels ha : the horizontal alignment of the xticklabels @@ -177,18 +179,26 @@ """ - for ax in self.get_axes(): - if not hasattr(ax, 'is_last_row'): - raise RuntimeError('Axes must be subplot instances; found %s'%type(ax)) - if ax.is_last_row(): - for label in ax.get_xticklabels(): - label.set_ha(ha) - label.set_rotation(rotation) - else: - for label in ax.get_xticklabels(): - label.set_visible(False) - self.subplots_adjust(bottom=bottom) + allsubplots = npy.alltrue([hasattr(ax, 'is_last_row') for ax in self.axes]) + if len(self.axes)==1: + for label in ax.get_xticklabels(): + label.set_ha(ha) + label.set_rotation(rotation) + else: + if allsubplots: + for ax in self.get_axes(): + if ax.is_last_row(): + for label in ax.get_xticklabels(): + label.set_ha(ha) + label.set_rotation(rotation) + else: + for label in ax.get_xticklabels(): + label.set_visible(False) + ax.set_xlabel('') + if allsubplots: + self.subplots_adjust(bottom=bottom) + def get_children(self): 'get a list of artists contained in the figure' children = [self.figurePatch] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4621 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4621&view=rev Author: mdboom Date: 2007年12月05日 08:38:01 -0800 (2007年12月05日) Log Message: ----------- Merged revisions 4619-4620 via svnmerge from http://matplotlib.svn.sf.net/svnroot/matplotlib/trunk/matplotlib ........ r4620 | mdboom | 2007年12月05日 11:35:26 -0500 (2007年12月05日) | 2 lines Fix reference leak in draw_text_image. ........ Modified Paths: -------------- branches/transforms/src/_backend_agg.cpp Property Changed: ---------------- branches/transforms/ Property changes on: branches/transforms ___________________________________________________________________ Name: svnmerge-integrated - /trunk/matplotlib:1-4618 + /trunk/matplotlib:1-4620 Modified: branches/transforms/src/_backend_agg.cpp =================================================================== --- branches/transforms/src/_backend_agg.cpp 2007年12月05日 16:35:26 UTC (rev 4620) +++ branches/transforms/src/_backend_agg.cpp 2007年12月05日 16:38:01 UTC (rev 4621) @@ -661,8 +661,8 @@ const unsigned char* buffer = NULL; int width, height; Py::Object image_obj = args[0]; + PyArrayObject* image_array = NULL; if (PyArray_Check(image_obj.ptr())) { - PyArrayObject* image_array = NULL; image_array = (PyArrayObject*)PyArray_FromObject(image_obj.ptr(), PyArray_UBYTE, 2, 2); if (!image_array) throw Py::ValueError("First argument to draw_text_image must be a FT2Font.Image object or a Nx2 uint8 numpy array."); @@ -685,6 +685,7 @@ } catch (Py::TypeError) { //x,y out of range; todo issue warning? + Py_XDECREF(image_array); return Py::Object(); } @@ -727,6 +728,8 @@ theRasterizer->add_path(rect2); agg::render_scanlines(*theRasterizer, *slineP8, ri); + Py_XDECREF(image_array); + return Py::Object(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4620 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4620&view=rev Author: mdboom Date: 2007年12月05日 08:35:26 -0800 (2007年12月05日) Log Message: ----------- Fix reference leak in draw_text_image. Modified Paths: -------------- trunk/matplotlib/src/_backend_agg.cpp Modified: trunk/matplotlib/src/_backend_agg.cpp =================================================================== --- trunk/matplotlib/src/_backend_agg.cpp 2007年12月05日 16:28:05 UTC (rev 4619) +++ trunk/matplotlib/src/_backend_agg.cpp 2007年12月05日 16:35:26 UTC (rev 4620) @@ -2140,8 +2140,8 @@ const unsigned char* buffer = NULL; int width, height; Py::Object image_obj = args[0]; + PyArrayObject* image_array = NULL; if (PyArray_Check(image_obj.ptr())) { - PyArrayObject* image_array = NULL; image_array = (PyArrayObject*)PyArray_FromObject(image_obj.ptr(), PyArray_UBYTE, 2, 2); if (!image_array) throw Py::ValueError("First argument to draw_text_image must be a FT2Font.Image object or a Nx2 uint8 numpy array."); @@ -2164,6 +2164,8 @@ } catch (Py::TypeError) { //x,y out of range; todo issue warning? + if (image_array) + Py_XDECREF(image_array); return Py::Object(); } @@ -2209,6 +2211,8 @@ theRasterizer->add_path(rect2); agg::render_scanlines(*theRasterizer, *slineP8, ri); + if (image_array) + Py_XDECREF(image_array); return Py::Object(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4619 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4619&view=rev Author: mdboom Date: 2007年12月05日 08:28:05 -0800 (2007年12月05日) Log Message: ----------- Merged revisions 4616-4618 via svnmerge from http://matplotlib.svn.sf.net/svnroot/matplotlib/trunk/matplotlib ........ r4618 | mdboom | 2007年12月05日 11:20:54 -0500 (2007年12月05日) | 2 lines Support arbitrary rotation of usetex text. ........ Modified Paths: -------------- branches/transforms/lib/matplotlib/backends/backend_agg.py branches/transforms/lib/matplotlib/texmanager.py branches/transforms/src/_backend_agg.cpp branches/transforms/src/_image.cpp Property Changed: ---------------- branches/transforms/ Property changes on: branches/transforms ___________________________________________________________________ Name: svnmerge-integrated - /trunk/matplotlib:1-4615 + /trunk/matplotlib:1-4618 Modified: branches/transforms/lib/matplotlib/backends/backend_agg.py =================================================================== --- branches/transforms/lib/matplotlib/backends/backend_agg.py 2007年12月05日 16:20:54 UTC (rev 4618) +++ branches/transforms/lib/matplotlib/backends/backend_agg.py 2007年12月05日 16:28:05 UTC (rev 4619) @@ -71,7 +71,7 @@ self.tostring_rgba_minimized = self._renderer.tostring_rgba_minimized self.mathtext_parser = MathTextParser('Agg') self._fontd = {} - + self.bbox = Bbox.from_bounds(0, 0, self.width, self.height) if __debug__: verbose.report('RendererAgg.__init__ done', 'debug-annoying') @@ -84,7 +84,7 @@ 'debug-annoying') ox, oy, width, height, descent, font_image, used_characters = \ self.mathtext_parser.parse(s, self.dpi, prop) - + x = int(x) + ox y = int(y) - oy self._renderer.draw_text_image(font_image, x, y + 1, angle, gc) @@ -112,7 +112,7 @@ self._renderer.draw_text_image(font.get_image(), int(x), int(y) + 1, angle, gc) - def get_text_width_height_descent(self, s, prop, ismath, rgb=(0,0,0)): + def get_text_width_height_descent(self, s, prop, ismath): """ get the width and height in display coords of the string s with FontPropertry prop @@ -125,8 +125,8 @@ # todo: handle props size = prop.get_size_in_points() texmanager = self.get_texmanager() - Z = texmanager.get_rgba(s, size, self.dpi, rgb) - m,n,tmp = Z.shape + Z = texmanager.get_grey(s, size, self.dpi) + m,n = Z.shape # TODO: descent of TeX text (I am imitating backend_ps here -JKS) return n, m, 0 @@ -145,45 +145,18 @@ def draw_tex(self, gc, x, y, s, prop, angle): # todo, handle props, angle, origins - rgb = gc.get_rgb() size = prop.get_size_in_points() dpi = self.dpi - flip = angle==90 - w,h,d = self.get_text_width_height_descent(s, prop, 'TeX', rgb) - if flip: - w,h = h,w - x -= w - texmanager = self.get_texmanager() - key = s, size, dpi, rgb, angle, texmanager.get_font_config() + key = s, size, dpi, angle, texmanager.get_font_config() im = self.texd.get(key) if im is None: - Z = texmanager.get_rgba(s, size, dpi, rgb) - if flip: - r = Z[:,:,0] - g = Z[:,:,1] - b = Z[:,:,2] - a = Z[:,:,3] - m,n,tmp = Z.shape + Z = texmanager.get_grey(s, size, dpi) + Z = npy.array(Z * 255.0, npy.uint8) - def func(x): - return npy.transpose(npy.fliplr(x)) + self._renderer.draw_text_image(Z, x, y, angle, gc) - Z = npy.zeros((n,m,4), float) - Z[:,:,0] = func(r) - Z[:,:,1] = func(g) - Z[:,:,2] = func(b) - Z[:,:,3] = func(a) - im = fromarray(Z, 1) - im.flipud_out() - self.texd[key] = im - - cliprect = gc.get_clip_rectangle() - if cliprect is None: bbox = None - else: bbox = Bbox.from_bounds(*cliprect) - self.draw_image(x, self.height-y, im, bbox) - def get_canvas_width_height(self): 'return the canvas width and height in display coords' return self.width, self.height @@ -217,7 +190,7 @@ if __debug__: verbose.report('RendererAgg.points_to_pixels', 'debug-annoying') return points*self.dpi/72.0 - + def tostring_rgb(self): if __debug__: verbose.report('RendererAgg.tostring_rgb', 'debug-annoying') @@ -314,8 +287,8 @@ FigureCanvasAgg.draw(self) self.get_renderer()._renderer.write_rgba(str(filename)) print_rgba = print_raw - + def print_png(self, filename, *args, **kwargs): FigureCanvasAgg.draw(self) self.get_renderer()._renderer.write_png(filename, self.figure.dpi) - + Modified: branches/transforms/lib/matplotlib/texmanager.py =================================================================== --- branches/transforms/lib/matplotlib/texmanager.py 2007年12月05日 16:20:54 UTC (rev 4618) +++ branches/transforms/lib/matplotlib/texmanager.py 2007年12月05日 16:28:05 UTC (rev 4619) @@ -79,7 +79,8 @@ dvipngVersion = get_dvipng_version() # mappable cache of - arrayd = {} + rgba_arrayd = {} + grey_arrayd = {} postscriptd = {} pscnt = 0 @@ -131,7 +132,7 @@ found_font = self.font_info[font.lower()] setattr(self, font_family_attr, self.font_info[font.lower()]) - if DEBUG: + if DEBUG: print 'family: %s, font: %s, info: %s'%(font_family, font, self.font_info[font.lower()]) break @@ -323,6 +324,24 @@ return [int(val) for val in line.split()[1:]] raise RuntimeError('Could not parse %s'%psfile) + def get_grey(self, tex, fontsize=None, dpi=None): + key = tex, self.get_font_config(), fontsize, dpi + alpha = self.grey_arrayd.get(key) + + if alpha is None: + pngfile = self.make_png(tex, fontsize, dpi) + X = readpng(os.path.join(self.texcache, pngfile)) + + if (self.dvipngVersion < '1.6') or rcParams['text.dvipnghack']: + # hack the alpha channel as described in comment above + alpha = npy.sqrt(1-X[:,:,0]) + else: + alpha = X[:,:,-1] + + self.grey_arrayd[key] = alpha + return alpha + + def get_rgba(self, tex, fontsize=None, dpi=None, rgb=(0,0,0)): """ Return tex string as an rgba array @@ -351,23 +370,16 @@ if not dpi: dpi = rcParams['savefig.dpi'] r,g,b = rgb key = tex, self.get_font_config(), fontsize, dpi, tuple(rgb) - Z = self.arrayd.get(key) + Z = self.rgba_arrayd.get(key) if Z is None: - pngfile = self.make_png(tex, fontsize, dpi) - X = readpng(os.path.join(self.texcache, pngfile)) + alpha = self.get_grey(tex, fontsize, dpi) - if (self.dvipngVersion < '1.6') or rcParams['text.dvipnghack']: - # hack the alpha channel as described in comment above - alpha = npy.sqrt(1-X[:,:,0]) - else: - alpha = X[:,:,-1] - - Z = npy.zeros(X.shape, npy.float) + Z = npy.zeros((X.shape[0], X.shape[1], 4), npy.float) Z[:,:,0] = r Z[:,:,1] = g Z[:,:,2] = b Z[:,:,3] = alpha - self.arrayd[key] = Z + self.rgba_arrayd[key] = Z return Z Modified: branches/transforms/src/_backend_agg.cpp =================================================================== --- branches/transforms/src/_backend_agg.cpp 2007年12月05日 16:20:54 UTC (rev 4618) +++ branches/transforms/src/_backend_agg.cpp 2007年12月05日 16:28:05 UTC (rev 4619) @@ -658,9 +658,25 @@ args.verify_length(5); - FT2Image *image = static_cast<FT2Image*>(args[0].ptr()); - if (!image->get_buffer()) - return Py::Object(); + const unsigned char* buffer = NULL; + int width, height; + Py::Object image_obj = args[0]; + if (PyArray_Check(image_obj.ptr())) { + PyArrayObject* image_array = NULL; + image_array = (PyArrayObject*)PyArray_FromObject(image_obj.ptr(), PyArray_UBYTE, 2, 2); + if (!image_array) + throw Py::ValueError("First argument to draw_text_image must be a FT2Font.Image object or a Nx2 uint8 numpy array."); + buffer = (unsigned char *)PyArray_DATA(image_array); + width = PyArray_DIM(image_array, 1); + height = PyArray_DIM(image_array, 0); + } else { + FT2Image *image = static_cast<FT2Image*>(args[0].ptr()); + if (!image->get_buffer()) + throw Py::ValueError("First argument to draw_text_image must be a FT2Font.Image object or a Nx2 uint8 numpy array."); + buffer = image->get_buffer(); + width = image->get_width(); + height = image->get_height(); + } int x(0),y(0); try { @@ -680,22 +696,19 @@ rendererBase->reset_clipping(true); set_clipbox(gc.cliprect, theRasterizer); - const unsigned char* const buffer = image->get_buffer(); - agg::rendering_buffer srcbuf - ((agg::int8u*)buffer, image->get_width(), - image->get_height(), image->get_width()); + agg::rendering_buffer srcbuf((agg::int8u*)buffer, width, height, width); agg::pixfmt_gray8 pixf_img(srcbuf); agg::trans_affine mtx; - mtx *= agg::trans_affine_translation(0, -(int)image->get_height()); + mtx *= agg::trans_affine_translation(0, -height); mtx *= agg::trans_affine_rotation(-angle * agg::pi / 180.0); mtx *= agg::trans_affine_translation(x, y); agg::path_storage rect; rect.move_to(0, 0); - rect.line_to(image->get_width(), 0); - rect.line_to(image->get_width(), image->get_height()); - rect.line_to(0, image->get_height()); + rect.line_to(width, 0); + rect.line_to(width, height); + rect.line_to(0, height); rect.line_to(0, 0); agg::conv_transform<agg::path_storage> rect2(rect, mtx); Modified: branches/transforms/src/_image.cpp =================================================================== --- branches/transforms/src/_image.cpp 2007年12月05日 16:20:54 UTC (rev 4618) +++ branches/transforms/src/_image.cpp 2007年12月05日 16:28:05 UTC (rev 4619) @@ -805,7 +805,7 @@ char _image_module_readpng__doc__[] = "readpng(fname)\n" "\n" -"Load an image from png file into a numerix array of MxNx4 uint8"; +"Load an image from png file into a numerix array of MxNx4 float"; Py::Object _image_module::readpng(const Py::Tuple& args) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4618 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4618&view=rev Author: mdboom Date: 2007年12月05日 08:20:54 -0800 (2007年12月05日) Log Message: ----------- Support arbitrary rotation of usetex text. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py trunk/matplotlib/lib/matplotlib/texmanager.py trunk/matplotlib/src/_backend_agg.cpp trunk/matplotlib/src/_image.cpp Modified: trunk/matplotlib/lib/matplotlib/backends/backend_agg.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2007年12月05日 15:40:46 UTC (rev 4617) +++ trunk/matplotlib/lib/matplotlib/backends/backend_agg.py 2007年12月05日 16:20:54 UTC (rev 4618) @@ -27,8 +27,8 @@ REQUIREMENTs python2.3+ - numpy 1.0 + - + numpy 1.0 + + agg2 (see below) freetype 2 libpng @@ -126,7 +126,7 @@ self.restore_region = self._renderer.restore_region self.mathtext_parser = MathTextParser('Agg') self._fontd = {} - + self.bbox = lbwh_to_bbox(0,0, self.width, self.height) if __debug__: verbose.report('RendererAgg.__init__ done', 'debug-annoying') @@ -175,7 +175,7 @@ 'debug-annoying') ox, oy, width, height, descent, font_image, used_characters = \ self.mathtext_parser.parse(s, self.dpi.get(), prop) - + x = int(x) + ox y = int(y) - oy self._renderer.draw_text_image(font_image, x, y + 1, angle, gc) @@ -209,7 +209,7 @@ self._renderer.draw_text_image(font.get_image(), int(x), int(y) + 1, angle, gc) - def get_text_width_height_descent(self, s, prop, ismath, rgb=(0,0,0)): + def get_text_width_height_descent(self, s, prop, ismath): """ get the width and height in display coords of the string s with FontPropertry prop @@ -222,8 +222,8 @@ # todo: handle props size = prop.get_size_in_points() texmanager = self.get_texmanager() - Z = texmanager.get_rgba(s, size, self.dpi.get(), rgb) - m,n,tmp = Z.shape + Z = texmanager.get_grey(s, size, self.dpi.get()) + m,n = Z.shape # TODO: descent of TeX text (I am imitating backend_ps here -JKS) return n, m, 0 @@ -242,45 +242,19 @@ def draw_tex(self, gc, x, y, s, prop, angle): # todo, handle props, angle, origins - rgb = gc.get_rgb() size = prop.get_size_in_points() dpi = self.dpi.get() - flip = angle==90 - w,h,d = self.get_text_width_height_descent(s, prop, 'TeX', rgb) - if flip: - w,h = h,w - x -= w - texmanager = self.get_texmanager() - key = s, size, dpi, rgb, angle, texmanager.get_font_config() + key = s, size, dpi, angle, texmanager.get_font_config() im = self.texd.get(key) if im is None: - Z = texmanager.get_rgba(s, size, dpi, rgb) - if flip: - r = Z[:,:,0] - g = Z[:,:,1] - b = Z[:,:,2] - a = Z[:,:,3] - m,n,tmp = Z.shape + Z = texmanager.get_grey(s, size, dpi) + Z = npy.array(Z * 255.0, npy.uint8) - def func(x): - return npy.transpose(npy.fliplr(x)) + self._renderer.draw_text_image(Z, x, y, angle, gc) - Z = npy.zeros((n,m,4), float) - Z[:,:,0] = func(r) - Z[:,:,1] = func(g) - Z[:,:,2] = func(b) - Z[:,:,3] = func(a) - im = fromarray(Z, 1) - im.flipud_out() - self.texd[key] = im - cliprect = gc.get_clip_rectangle() - if cliprect is None: bbox = None - else: bbox = lbwh_to_bbox(*cliprect) - self.draw_image(x, self.height-y, im, bbox) - def get_canvas_width_height(self): 'return the canvas width and height in display coords' return self.width, self.height @@ -413,8 +387,8 @@ self.draw() self.get_renderer()._renderer.write_rgba(str(filename)) print_rgba = print_raw - + def print_png(self, filename, *args, **kwargs): self.draw() self.get_renderer()._renderer.write_png(filename, self.figure.dpi.get()) - + Modified: trunk/matplotlib/lib/matplotlib/texmanager.py =================================================================== --- trunk/matplotlib/lib/matplotlib/texmanager.py 2007年12月05日 15:40:46 UTC (rev 4617) +++ trunk/matplotlib/lib/matplotlib/texmanager.py 2007年12月05日 16:20:54 UTC (rev 4618) @@ -79,7 +79,8 @@ dvipngVersion = get_dvipng_version() # mappable cache of - arrayd = {} + rgba_arrayd = {} + grey_arrayd = {} postscriptd = {} pscnt = 0 @@ -131,7 +132,7 @@ found_font = self.font_info[font.lower()] setattr(self, font_family_attr, self.font_info[font.lower()]) - if DEBUG: + if DEBUG: print 'family: %s, font: %s, info: %s'%(font_family, font, self.font_info[font.lower()]) break @@ -323,6 +324,24 @@ return [int(val) for val in line.split()[1:]] raise RuntimeError('Could not parse %s'%psfile) + def get_grey(self, tex, fontsize=None, dpi=None): + key = tex, self.get_font_config(), fontsize, dpi + alpha = self.grey_arrayd.get(key) + + if alpha is None: + pngfile = self.make_png(tex, fontsize, dpi) + X = readpng(os.path.join(self.texcache, pngfile)) + + if (self.dvipngVersion < '1.6') or rcParams['text.dvipnghack']: + # hack the alpha channel as described in comment above + alpha = npy.sqrt(1-X[:,:,0]) + else: + alpha = X[:,:,-1] + + self.grey_arrayd[key] = alpha + return alpha + + def get_rgba(self, tex, fontsize=None, dpi=None, rgb=(0,0,0)): """ Return tex string as an rgba array @@ -351,23 +370,16 @@ if not dpi: dpi = rcParams['savefig.dpi'] r,g,b = rgb key = tex, self.get_font_config(), fontsize, dpi, tuple(rgb) - Z = self.arrayd.get(key) + Z = self.rgba_arrayd.get(key) if Z is None: - pngfile = self.make_png(tex, fontsize, dpi) - X = readpng(os.path.join(self.texcache, pngfile)) + alpha = self.get_grey(tex, fontsize, dpi) - if (self.dvipngVersion < '1.6') or rcParams['text.dvipnghack']: - # hack the alpha channel as described in comment above - alpha = npy.sqrt(1-X[:,:,0]) - else: - alpha = X[:,:,-1] - - Z = npy.zeros(X.shape, npy.float) + Z = npy.zeros((X.shape[0], X.shape[1], 4), npy.float) Z[:,:,0] = r Z[:,:,1] = g Z[:,:,2] = b Z[:,:,3] = alpha - self.arrayd[key] = Z + self.rgba_arrayd[key] = Z return Z Modified: trunk/matplotlib/src/_backend_agg.cpp =================================================================== --- trunk/matplotlib/src/_backend_agg.cpp 2007年12月05日 15:40:46 UTC (rev 4617) +++ trunk/matplotlib/src/_backend_agg.cpp 2007年12月05日 16:20:54 UTC (rev 4618) @@ -1003,7 +1003,7 @@ for(k = firstRow; k <= lastRow; k++) { numCol = inPolygon(k, xs, ys, col); - + if (numCol >= 2) rendererBase->copy_hline(col[0], k, col[1] - 1, color); if (numCol == 4) rendererBase->copy_hline(col[2], k, col[3] - 1, color); } @@ -2137,9 +2137,25 @@ args.verify_length(5); - FT2Image *image = static_cast<FT2Image*>(args[0].ptr()); - if (!image->get_buffer()) - return Py::Object(); + const unsigned char* buffer = NULL; + int width, height; + Py::Object image_obj = args[0]; + if (PyArray_Check(image_obj.ptr())) { + PyArrayObject* image_array = NULL; + image_array = (PyArrayObject*)PyArray_FromObject(image_obj.ptr(), PyArray_UBYTE, 2, 2); + if (!image_array) + throw Py::ValueError("First argument to draw_text_image must be a FT2Font.Image object or a Nx2 uint8 numpy array."); + buffer = (unsigned char *)PyArray_DATA(image_array); + width = PyArray_DIM(image_array, 1); + height = PyArray_DIM(image_array, 0); + } else { + FT2Image *image = static_cast<FT2Image*>(args[0].ptr()); + if (!image->get_buffer()) + throw Py::ValueError("First argument to draw_text_image must be a FT2Font.Image object or a Nx2 uint8 numpy array."); + buffer = image->get_buffer(); + width = image->get_width(); + height = image->get_height(); + } int x(0),y(0); try { @@ -2157,22 +2173,19 @@ set_clipbox_rasterizer(gc.cliprect); - const unsigned char* const buffer = image->get_buffer(); - agg::rendering_buffer srcbuf - ((agg::int8u*)buffer, image->get_width(), - image->get_height(), image->get_width()); + agg::rendering_buffer srcbuf((agg::int8u*)buffer, width, height, width); agg::pixfmt_gray8 pixf_img(srcbuf); agg::trans_affine mtx; - mtx *= agg::trans_affine_translation(0, -(int)image->get_height()); + mtx *= agg::trans_affine_translation(0, -(int)height); mtx *= agg::trans_affine_rotation(-angle * agg::pi / 180.0); mtx *= agg::trans_affine_translation(x, y); agg::path_storage rect; rect.move_to(0, 0); - rect.line_to(image->get_width(), 0); - rect.line_to(image->get_width(), image->get_height()); - rect.line_to(0, image->get_height()); + rect.line_to(width, 0); + rect.line_to(width, height); + rect.line_to(0, height); rect.line_to(0, 0); agg::conv_transform<agg::path_storage> rect2(rect, mtx); Modified: trunk/matplotlib/src/_image.cpp =================================================================== --- trunk/matplotlib/src/_image.cpp 2007年12月05日 15:40:46 UTC (rev 4617) +++ trunk/matplotlib/src/_image.cpp 2007年12月05日 16:20:54 UTC (rev 4618) @@ -850,7 +850,7 @@ char _image_module_readpng__doc__[] = "readpng(fname)\n" "\n" -"Load an image from png file into a numerix array of MxNx4 uint8"; +"Load an image from png file into a numerix array of MxNx4 float"; Py::Object _image_module::readpng(const Py::Tuple& args) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4617 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4617&view=rev Author: jswhit Date: 2007年12月05日 07:40:46 -0800 (2007年12月05日) Log Message: ----------- docstring reformatting Modified Paths: -------------- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月05日 15:39:39 UTC (rev 4616) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月05日 15:40:46 UTC (rev 4617) @@ -571,7 +571,7 @@ it is divisible by 400. - C{'noleap'} or C{'365_day'}: Gregorian calendar without leap years, i.e., all years are 365 days long. - - C{all_leap} or C{'366_day'}: + - C{'all_leap'} or C{'366_day'}: Gregorian calendar with every year being a leap year, i.e., all years are 366 days long. -C{'360_day'}: @@ -690,8 +690,8 @@ the date is after 1582年10月15日). Otherwise, they are 'phony' datetime objects which are actually instances of netcdftime.datetime. This is because the python datetime module cannot handle the weird dates in some -calendars (such as C{'360_day'} and C{'all_leap'}) which don't exist in any real -world calendar. +calendars (such as C{'360_day'} and C{'all_leap'}) which +do not exist in any real world calendar. """ isscalar = False try: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4616 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4616&view=rev Author: mdboom Date: 2007年12月05日 07:39:39 -0800 (2007年12月05日) Log Message: ----------- Merged revisions 4562-4615 via svnmerge from http://matplotlib.svn.sf.net/svnroot/matplotlib/trunk/matplotlib ........ r4571 | jdh2358 | 2007年12月03日 21:06:52 -0500 (2007年12月03日) | 1 line applied barrys cocoaagg patch ........ r4572 | jdh2358 | 2007年12月03日 22:18:39 -0500 (2007年12月03日) | 1 line colormapped histogram ........ r4576 | jdh2358 | 2007年12月04日 09:38:48 -0500 (2007年12月04日) | 2 lines added additional lines to MANIFEST.in ........ r4586 | mdboom | 2007年12月04日 14:34:11 -0500 (2007年12月04日) | 2 lines Support '|' as a symbol in mathtext. ........ r4606 | jdh2358 | 2007年12月04日 21:47:07 -0500 (2007年12月04日) | 1 line updated install doc ........ r4613 | dsdale | 2007年12月05日 09:45:56 -0500 (2007年12月05日) | 2 lines removed .cvsignore files, they are not needed ........ r4614 | jdh2358 | 2007年12月05日 10:16:48 -0500 (2007年12月05日) | 2 lines exposed default color cycle ........ Modified Paths: -------------- branches/transforms/API_CHANGES branches/transforms/CODING_GUIDE branches/transforms/INSTALL branches/transforms/MANIFEST.in branches/transforms/examples/poly_editor.py branches/transforms/lib/matplotlib/__init__.py branches/transforms/lib/matplotlib/_mathtext_data.py branches/transforms/lib/matplotlib/axes.py branches/transforms/lib/matplotlib/backends/backend_cocoaagg.py branches/transforms/lib/matplotlib/image.py branches/transforms/lib/matplotlib/mathtext.py branches/transforms/matplotlibrc.template Added Paths: ----------- branches/transforms/examples/hist_colormapped.py Removed Paths: ------------- branches/transforms/.cvsignore branches/transforms/examples/.cvsignore branches/transforms/lib/matplotlib/.cvsignore branches/transforms/lib/matplotlib/backends/.cvsignore branches/transforms/lib/matplotlib/numerix/.cvsignore branches/transforms/lib/matplotlib/numerix/mlab/.cvsignore Property Changed: ---------------- branches/transforms/ Property changes on: branches/transforms ___________________________________________________________________ Name: svnmerge-integrated - /trunk/matplotlib:1-4561 + /trunk/matplotlib:1-4615 Deleted: branches/transforms/.cvsignore =================================================================== --- branches/transforms/.cvsignore 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/.cvsignore 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1,6 +0,0 @@ -build -dist -docs -*.pyc -.project -matplotlibrc Modified: branches/transforms/API_CHANGES =================================================================== --- branches/transforms/API_CHANGES 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/API_CHANGES 2007年12月05日 15:39:39 UTC (rev 4616) @@ -169,6 +169,8 @@ END OF TRANSFORMS REFACTORING + Removed, dead/experimental ExampleInfo, Namespace and Importer + code from matplotlib/__init__.py 0.91.1 Released 0.91.0 Released Modified: branches/transforms/CODING_GUIDE =================================================================== --- branches/transforms/CODING_GUIDE 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/CODING_GUIDE 2007年12月05日 15:39:39 UTC (rev 4616) @@ -39,8 +39,11 @@ * If you have altered extension code, do you pass unit/memleak_hawaii.py? + * if you have added new files or directories, or reorganized + existing ones, are the new files included in the match patterns in + MANIFEST.in. This file determines what goes into the src + distribution of the mpl build. - == Importing and name spaces == For numpy, use: Modified: branches/transforms/INSTALL =================================================================== --- branches/transforms/INSTALL 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/INSTALL 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1,42 +1,42 @@ + INTRODUCTION - matplotlib requires at a minimum python 2.2+, Numeric or numarray - and freetype. To get the most out of matplotlib, you will want to - build some of the optional GUI and image extensions, discussed - below. Matplotlib is known to work on linux, unix, win32 and OS X + matplotlib requires at a minimum python 2.3, numpy, libpng and + freetype. To get the most out of matplotlib, you will want to build + some of the optional GUI and image extensions, discussed below. + Matplotlib is known to work on linux, unix, win32 and OS X platforms. There are two kinds of matplotlib backends: vector based and raster - based. The vector based backends, SVG and PS, produce ASCII text - output files *.svg and *.ps. The core raster based renderer is the - http://antigrain.com (agg) backend. This is a high quality 2D - library that supports fast antialiasing, alpha blending and much - more. If you want to produce PNGs or GUI images that support all of - matplotlib's features, you should compile matplotlib with agg - support and use one of the GUI agg backends: GTKAgg, WXAgg, TkAgg or - FLTKAgg. + based. The vector based backends, SVG, PDF and PS, produce ASCII + text output files *.svg, *.pdf and *.ps. The core raster based + renderer is the http://antigrain.com (agg) backend. This is a high + quality 2D library that supports fast antialiasing, alpha blending + and much more. If you want to produce PNGs or GUI images that + support all of matplotlib's features, you should compile matplotlib + with agg support and use one of the GUI agg backends: GTKAgg, WXAgg, + TkAgg or FLTKAgg. COMPILING - You will need to have recent versions of freetype (>= 2.1.7), libpng - and zlib installed on your system. If you are using a package - manager, also make sure the devel versions of these packages are - also installed (eg freetype-devel). + You will need to have recent versions of freetype, libpng and zlib + installed on your system. If you are using a package manager, also + make sure the devel versions of these packages are also installed + (eg freetype-devel). - The top of setup.py contains some flags controlling which backends - will be built. If you want to use a GUI backend, you will need - either Tkinter, pygtk or wxpython installed on your system, from src - or from a package manager including the devel packages. You can - choose which backends to enable by setting the flags in setup.py, - but the 'auto' flags will work in most cases, as matplotlib tries to - find a GUI and build the backend acccordingly. If you know you - don't want a particular backend or extension, you can set that flag - to False. + matplotlib ships with a setup.cfg.template which you can use to + customize the build process. Copy it to setup.cfg if you need to + customize something. See that files for details of the parameters + you can set. - As discussed above, most users will want to set 'BUILD_AGG = 1' and - one or more of the GUI backends to True. Exceptions to this are if - you know you don't need a GUI (eg a web server) or you only want to - produce vector graphics. + If you want to use a GUI backend, you will need either Tkinter, + pygtk or wxpython installed on your system, from src or from a + package manager including the devel packages. You can choose which + backends to enable by setting the flags in setup.py, but the default + is to automatically detect your installed GUIs and build support for + them. If you later find that you did not have a GUI toolkit like + pygtk installed when you built matplotlib, but now want it, you will + need to install the toolkit and rebuild matplotlib. If you have installed prerequisites to nonstandard places and need to inform matplotlib where they are, edit setupext.py an add the @@ -45,13 +45,6 @@ /some/path/include/somheader.h, put /some/path in the basedir list for your platform. - matplotlib works with with Numeric or numarray. At compile time, - setup.py will look for both packages and compile the appropriate - extensions into matplotlib. At runtime, the correct extension code - will be chosen based on your numerix setting in matplotlibrc. If - you want to be able to use either Numeric or numarray efficiently - with matplotlib, it is important that you have *both* present and in - your PYTHONPATH when you compile matplotlib. Once you have everything above set to your liking, just do the usual thing @@ -62,20 +55,19 @@ WINDOWS If you don't already have python installed, you may want to consider - using the enthought edition of python, which has (old) scipy, Numeric, and + using the enthought edition of python, which has scipy, numpy, and wxpython, plus a lot of other goodies, preinstalled - http://www.enthought.com/python . With the enthought edition of python + matplotlib installer, the following backends should work - out of the box: agg, wx, wxagg, tkagg, ps and svg. + out of the box: agg, wx, wxagg, tkagg, ps, pdf and svg. For standard python installations, you will also need to install - either numpy, Numeric or numarray in addition to the matplotlib installer. - With a standard python + Numeric/numarray + matplotlib, the - following backends should work on windows: agg, tkagg, ps, svg. If - you want others, eg a wx, wxagg, gtk or gtkagg, you'll need to - install the requisite GUI toolkits. This is fairly easy, as both - wxpython and pygtk come with windows friendly installers. The - latter includes an additional requirement of the GTK runtime. + either numpy, in addition to the matplotlib installer. On some + systems you will also need to download msvcp71.dll library, which + you can download from + http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71 or other + sites. You will need to unzip the archive and drag the dll into + c:\windows\system32 All of the GUI backends run on windows, but TkAgg is probably the best for interactive use from the standard python shell or ipython. @@ -113,18 +105,9 @@ DEBIAN - Vittorio Palmisano <re...@em...> maintails the debian - packages at http://mentors.debian.net + matplotlib is part of debian (and ubuntu) so you shoule be able to + apt-get install it. - - * add this lines to your /etc/apt/sources.list: - deb http://anakonda.altervista.org/debian packages/ - deb-src http://anakonda.altervista.org/debian sources/ - - * then run: - # apt-get update - # apt-get install python-matplotlib python-matplotlib-doc - FREEBSD http://www.freshports.org/math/py-matplotlib/ Modified: branches/transforms/MANIFEST.in =================================================================== --- branches/transforms/MANIFEST.in 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/MANIFEST.in 2007年12月05日 15:39:39 UTC (rev 4616) @@ -5,8 +5,13 @@ include __init__.py setupext.py setup.py setupegg.py makeswig.py include examples/data/* include lib/matplotlib/toolkits +include lib/matplotlib/mpl-data/matplotlib.conf +include lib/matplotlib/mpl-data/matplotlib.conf.template +include lib/matplotlib/mpl-data/lineprops.glade +include lib/matplotlib/mpl-data/matplotlibrc include lib/matplotlib/mpl-data/images/* include lib/matplotlib/mpl-data/fonts/ttf/* +include lib/matplotlib/mpl-data/fonts/pdfcorefonts/* include lib/matplotlib/mpl-data/fonts/afm/* recursive-include license LICENSE* recursive-include examples README *.py Deleted: branches/transforms/examples/.cvsignore =================================================================== --- branches/transforms/examples/.cvsignore 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/examples/.cvsignore 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1,8 +0,0 @@ -*.eps -*.jpeg -*.jpg -*.pdf -*.png -*.ps -*.pyc -*.svg Copied: branches/transforms/examples/hist_colormapped.py (from rev 4614, trunk/matplotlib/examples/hist_colormapped.py) =================================================================== --- branches/transforms/examples/hist_colormapped.py (rev 0) +++ branches/transforms/examples/hist_colormapped.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -0,0 +1,24 @@ +import numpy as n +from pylab import figure, show +import matplotlib.cm as cm +import matplotlib.colors as colors + +fig = figure() +ax = fig.add_subplot(111) +Ntotal = 1000 +N, bins, patches = ax.hist(n.random.rand(Ntotal), 20) + +#I'll color code by height, but you could use any scalar + + +# we need to normalize the data to 0..1 for the full +# range of the colormap +fracs = N.astype(float)/N.max() +norm = colors.normalize(fracs.min(), fracs.max()) + +for thisfrac, thispatch in zip(fracs, patches): + color = cm.jet(norm(thisfrac)) + thispatch.set_facecolor(color) + + +show() Modified: branches/transforms/examples/poly_editor.py =================================================================== --- branches/transforms/examples/poly_editor.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/examples/poly_editor.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -9,8 +9,6 @@ from matplotlib.mlab import dist_point_to_segment - - class PolygonInteractor: """ An polygon editor. @@ -74,7 +72,7 @@ xyt = self.poly.get_transform().transform(xy) xt, yt = xyt[:, 0], xyt[:, 1] d = sqrt((xt-event.x)**2 + (yt-event.y)**2) - indseq = nonzero(equal(d, amin(d))) + indseq = nonzero(equal(d, amin(d)))[0] ind = indseq[0] if d[ind]>=self.epsilon: @@ -129,6 +127,7 @@ if event.inaxes is None: return if event.button != 1: return x,y = event.xdata, event.ydata + self.poly.xy[self._ind] = x,y self.line.set_data(zip(*self.poly.xy)) @@ -161,7 +160,7 @@ ax.add_patch(poly) p = PolygonInteractor( ax, poly) -ax.add_line(p.line) +#ax.add_line(p.line) ax.set_title('Click and drag a point to move it') ax.set_xlim((-2,2)) ax.set_ylim((-2,2)) Deleted: branches/transforms/lib/matplotlib/.cvsignore =================================================================== --- branches/transforms/lib/matplotlib/.cvsignore 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/.cvsignore 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1,2 +0,0 @@ -*.pyc -.cvsignore \ No newline at end of file Modified: branches/transforms/lib/matplotlib/__init__.py =================================================================== --- branches/transforms/lib/matplotlib/__init__.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/__init__.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -55,7 +55,7 @@ """ from __future__ import generators -__version__ = '0.91.1' +__version__ = '0.91.2svn' __revision__ = '$Revision$' __date__ = '$Date$' @@ -784,60 +784,3 @@ verbose.report('platform is %s'%sys.platform) verbose.report('loaded modules: %s'%sys.modules.keys(), 'debug') -class ExampleInfo: - pass - -class ExampleManager: - baseurl = 'http://matplotlib.sf.net' - urls = ['%s/%s'%(baseurl, subdir) for subdir in - ( 'examples', 'examples/widgets')] - - def get_examples(self): - import urllib, re - rgx = re.compile('.*<A HREF="([^.]+\.py)">.*') - examples = [] - for url in urls: - lines = urllib.urlopen(url).readlines() - for line in lines: - m = rgx.match(line) - if m is not None: - examples.append('%s/%s'%(url, m.group(1))) - return examples - - def get_info(self, s): - """ - return an ExampleInfo instance from s, the string content of - an example - """ - pass - -class Namespace: - """ - A class which takes a list of modules and creates an object with - the module naems at attrs - """ - def __init__(self, namespace): - for k,v in namespace.items(): - modname = getattr(v, '__name__', None) - if modname is None: continue - if modname.startswith('matplotlib.'): - self.__dict__[modname.replace('matplotlib.', '')] = v - - -class Importer: - def __init__(self, modstr): - """ - import a bunch of matplotlib modules listed in modstr into a - single namespace. Eg, - - mpl = Importer('artist, cbook, lines, patches') - print mpl.cbook.iterable(1) - """ - for name in modstr.split(','): - name = name.strip() - wholename = '.'.join(['matplotlib', name]) - basemod = __import__(wholename) - mod = getattr(basemod, name) - setattr(self, name, mod) - - Modified: branches/transforms/lib/matplotlib/_mathtext_data.py =================================================================== --- branches/transforms/lib/matplotlib/_mathtext_data.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/_mathtext_data.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -88,7 +88,8 @@ r'\phi' : ('cmmi10', 42), r'\chi' : ('cmmi10', 17), r'\psi' : ('cmmi10', 31), - + r'|' : ('cmsy10', 47), + r'\|' : ('cmsy10', 47), r'(' : ('cmr10', 119), r'\leftparen' : ('cmr10', 119), r'\rightparen' : ('cmr10', 68), @@ -1771,6 +1772,7 @@ 'succnsim': 8937, 'gimel': 8503, 'vert': 124, +'|': 124, 'varrho': 1009, 'P': 182, 'approxident': 8779, Modified: branches/transforms/lib/matplotlib/axes.py =================================================================== --- branches/transforms/lib/matplotlib/axes.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/axes.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -150,13 +150,14 @@ an arbitrary number of x, y, fmt are allowed """ + defaultColors = ['b','g','r','c','m','y','k'] def __init__(self, axes, command='plot'): self.axes = axes self.command = command self._clear_color_cycle() def _clear_color_cycle(self): - self.colors = ['b','g','r','c','m','y','k'] + self.colors = _process_plot_var_args.defaultColors[:] # if the default line color is a color format string, move it up # in the que try: ind = self.colors.index(rcParams['lines.color']) Deleted: branches/transforms/lib/matplotlib/backends/.cvsignore =================================================================== --- branches/transforms/lib/matplotlib/backends/.cvsignore 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/backends/.cvsignore 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1,2 +0,0 @@ -*.pyc -.cvsignore \ No newline at end of file Modified: branches/transforms/lib/matplotlib/backends/backend_cocoaagg.py =================================================================== --- branches/transforms/lib/matplotlib/backends/backend_cocoaagg.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/backends/backend_cocoaagg.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -78,8 +78,8 @@ self.plotWindow.setDelegate_(self)#.plotView) self.plotView.setImageFrameStyle_(NSImageFrameGroove) - self.plotView.image = NSImage.alloc().initWithSize_((0,0)) - self.plotView.setImage_(self.plotView.image) + self.plotView.image_ = NSImage.alloc().initWithSize_((0,0)) + self.plotView.setImage_(self.plotView.image_) # Make imageview first responder for key events self.plotWindow.makeFirstResponder_(self.plotView) @@ -112,10 +112,10 @@ w,h = self.canvas.get_width_height() # Remove all previous images - for i in xrange(self.image.representations().count()): - self.image.removeRepresentation_(self.image.representations().objectAtIndex_(i)) + for i in xrange(self.image_.representations().count()): + self.image_.removeRepresentation_(self.image_.representations().objectAtIndex_(i)) - self.image.setSize_((w,h)) + self.image_.setSize_((w,h)) brep = NSBitmapImageRep.alloc().initWithBitmapDataPlanes_pixelsWide_pixelsHigh_bitsPerSample_samplesPerPixel_hasAlpha_isPlanar_colorSpaceName_bytesPerRow_bitsPerPixel_( (self.canvas.buffer_rgba(0,0),'','','',''), # Image data @@ -129,7 +129,7 @@ w*4, # row bytes 32) # bits per pixel - self.image.addRepresentation_(brep) + self.image_.addRepresentation_(brep) self.setNeedsDisplay_(True) def windowDidResize_(self, sender): Modified: branches/transforms/lib/matplotlib/image.py =================================================================== --- branches/transforms/lib/matplotlib/image.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/image.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -239,6 +239,8 @@ self.set_data(A) + + def set_extent(self, extent): """extent is data axes (left, right, bottom, top) for making image plots """ Modified: branches/transforms/lib/matplotlib/mathtext.py =================================================================== --- branches/transforms/lib/matplotlib/mathtext.py 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/mathtext.py 2007年12月05日 15:39:39 UTC (rev 4616) @@ -2019,7 +2019,7 @@ ).setParseAction(self.customspace).setName('customspace') unicode_range = u"\U00000080-\U0001ffff" - symbol =(Regex(UR"([a-zA-Z0-9 +\-*/<>=:,.;!'@()%s])|(\\[%%${}\[\]_])" % unicode_range) + symbol =(Regex(UR"([a-zA-Z0-9 +\-*/<>=:,.;!'@()|%s])|(\\[%%${}\[\]_|])" % unicode_range) | Combine( bslash + oneOf(tex2uni.keys()) Deleted: branches/transforms/lib/matplotlib/numerix/.cvsignore =================================================================== --- branches/transforms/lib/matplotlib/numerix/.cvsignore 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/numerix/.cvsignore 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1,2 +0,0 @@ -*.pyc -.cvsignore \ No newline at end of file Deleted: branches/transforms/lib/matplotlib/numerix/mlab/.cvsignore =================================================================== --- branches/transforms/lib/matplotlib/numerix/mlab/.cvsignore 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/lib/matplotlib/numerix/mlab/.cvsignore 2007年12月05日 15:39:39 UTC (rev 4616) @@ -1 +0,0 @@ -*.pyc Modified: branches/transforms/matplotlibrc.template =================================================================== --- branches/transforms/matplotlibrc.template 2007年12月05日 15:36:48 UTC (rev 4615) +++ branches/transforms/matplotlibrc.template 2007年12月05日 15:39:39 UTC (rev 4616) @@ -25,7 +25,7 @@ #### CONFIGURATION BEGINS HERE # the default backend; one of GTK GTKAgg GTKCairo FltkAgg QtAgg TkAgg -# Agg Cairo GD GDK Paint PS PDF SVG Template +# WX WXAgg Agg Cairo GD GDK Paint PS PDF SVG Template backend : %(backend)s numerix : %(numerix)s # numpy, Numeric or numarray #maskedarray : False # True to use external maskedarray module This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4615 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4615&view=rev Author: mdboom Date: 2007年12月05日 07:36:48 -0800 (2007年12月05日) Log Message: ----------- Make new auto-layout stuff optional (so it can be experimented on without breaking too much.) Modified Paths: -------------- branches/transforms/examples/simple_plot.py branches/transforms/lib/matplotlib/figure.py branches/transforms/lib/matplotlib/rcsetup.py Modified: branches/transforms/examples/simple_plot.py =================================================================== --- branches/transforms/examples/simple_plot.py 2007年12月05日 15:16:48 UTC (rev 4614) +++ branches/transforms/examples/simple_plot.py 2007年12月05日 15:36:48 UTC (rev 4615) @@ -13,9 +13,6 @@ ylabel('voltage (mV)') title('About as simple as it gets, folks') grid(True) -axes().xaxis.set_label_position('top') -axes().xaxis.set_ticks_position('top') -axes().yaxis.set_label_position('right') #savefig('simple_plot.png') savefig('simple_plot') Modified: branches/transforms/lib/matplotlib/figure.py =================================================================== --- branches/transforms/lib/matplotlib/figure.py 2007年12月05日 15:16:48 UTC (rev 4614) +++ branches/transforms/lib/matplotlib/figure.py 2007年12月05日 15:36:48 UTC (rev 4615) @@ -151,6 +151,7 @@ self.clf() self._cachedRenderer = None + self._autoLayout = False def _get_dpi(self): return self._dpi @@ -159,6 +160,9 @@ self._dpi_scale_trans.clear().scale(dpi, dpi) dpi = property(_get_dpi, _set_dpi) + def enable_auto_layout(self, setting=True): + self._autoLayout = setting + def autofmt_xdate(self, bottom=0.2, rotation=30, ha='right'): """ A common use case is a number of subplots with shared xaxes @@ -628,8 +632,9 @@ # based on the tick and axis labels etc., and then makes sure # that any axes that began life aligned to another axes remains # aligned after these adjustments - if len(self.axes) > 1: + if self._autoLayout and len(self.axes) > 1: aligned_positions = [{}, {}, {}, {}] + sizes = [{}, {}] for a in self.axes: a.update_layout(renderer) orig_pos = a.get_position(True) @@ -642,6 +647,15 @@ pos[orig][1].add(curr) else: pos[orig] = [[a], set([curr])] + for size, orig, curr in zip(sizes, + orig_pos.size, + curr_pos.size): + orig = round(orig * 100.0) / 100.0 + if orig in size: + size[orig][0].append(a) + size[orig][1].add(curr) + else: + size[orig] = [[a], set([curr])] for i, pos in enumerate(aligned_positions): for axes, places in pos.values(): @@ -654,7 +668,19 @@ curr_pos = a.get_position().frozen() curr_pos.get_points()[i/2, i%2] = curr a.set_position(curr_pos, 'active') - else: + + for i, size in enumerate(sizes): + for axes, dims in size.values(): + new = min(dims) + for a in axes: + curr_pos = a.get_position().frozen() + curr = curr_pos.size[i] + if curr > new: + extra = (curr - new) * 0.5 + curr_pos.get_points()[0, i] += extra + curr_pos.get_points()[1, i] -= extra + a.set_position(curr_pos, 'active') + elif self._autoLayout: for a in self.axes: a.update_layout(renderer) # render the axes Modified: branches/transforms/lib/matplotlib/rcsetup.py =================================================================== --- branches/transforms/lib/matplotlib/rcsetup.py 2007年12月05日 15:16:48 UTC (rev 4614) +++ branches/transforms/lib/matplotlib/rcsetup.py 2007年12月05日 15:36:48 UTC (rev 4615) @@ -440,12 +440,12 @@ 'figure.facecolor' : [ '0.75', validate_color], # facecolor; scalar gray 'figure.edgecolor' : [ 'w', validate_color], # edgecolor; white - 'figure.subplot.left' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=False)], + 'figure.subplot.left' : [0.125, ValidateInterval(0, 1, closedmin=False, closedmax=False)], 'figure.subplot.right' : [0.9, ValidateInterval(0, 1, closedmin=False, closedmax=False)], 'figure.subplot.bottom' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=False)], 'figure.subplot.top' : [0.9, ValidateInterval(0, 1, closedmin=False, closedmax=False)], - 'figure.subplot.wspace' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=True)], - 'figure.subplot.hspace' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=True)], + 'figure.subplot.wspace' : [0.2, ValidateInterval(0, 1, closedmin=False, closedmax=True)], + 'figure.subplot.hspace' : [0.2, ValidateInterval(0, 1, closedmin=False, closedmax=True)], 'savefig.dpi' : [100, validate_float], # DPI This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4614 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4614&view=rev Author: jdh2358 Date: 2007年12月05日 07:16:48 -0800 (2007年12月05日) Log Message: ----------- exposed default color cycle Modified Paths: -------------- trunk/matplotlib/API_CHANGES trunk/matplotlib/lib/matplotlib/__init__.py trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/image.py trunk/matplotlib/matplotlibrc.template Modified: trunk/matplotlib/API_CHANGES =================================================================== --- trunk/matplotlib/API_CHANGES 2007年12月05日 14:45:56 UTC (rev 4613) +++ trunk/matplotlib/API_CHANGES 2007年12月05日 15:16:48 UTC (rev 4614) @@ -1,3 +1,5 @@ + Removed, dead/experimental ExampleInfo, Namespace and Importer + code from matplotlib/__init__.py 0.91.1 Released 0.91.0 Released Modified: trunk/matplotlib/lib/matplotlib/__init__.py =================================================================== --- trunk/matplotlib/lib/matplotlib/__init__.py 2007年12月05日 14:45:56 UTC (rev 4613) +++ trunk/matplotlib/lib/matplotlib/__init__.py 2007年12月05日 15:16:48 UTC (rev 4614) @@ -55,7 +55,7 @@ """ from __future__ import generators -__version__ = '0.91.1' +__version__ = '0.91.2svn' __revision__ = '$Revision$' __date__ = '$Date$' @@ -784,60 +784,3 @@ verbose.report('platform is %s'%sys.platform) verbose.report('loaded modules: %s'%sys.modules.keys(), 'debug') -class ExampleInfo: - pass - -class ExampleManager: - baseurl = 'http://matplotlib.sf.net' - urls = ['%s/%s'%(baseurl, subdir) for subdir in - ( 'examples', 'examples/widgets')] - - def get_examples(self): - import urllib, re - rgx = re.compile('.*<A HREF="([^.]+\.py)">.*') - examples = [] - for url in urls: - lines = urllib.urlopen(url).readlines() - for line in lines: - m = rgx.match(line) - if m is not None: - examples.append('%s/%s'%(url, m.group(1))) - return examples - - def get_info(self, s): - """ - return an ExampleInfo instance from s, the string content of - an example - """ - pass - -class Namespace: - """ - A class which takes a list of modules and creates an object with - the module naems at attrs - """ - def __init__(self, namespace): - for k,v in namespace.items(): - modname = getattr(v, '__name__', None) - if modname is None: continue - if modname.startswith('matplotlib.'): - self.__dict__[modname.replace('matplotlib.', '')] = v - - -class Importer: - def __init__(self, modstr): - """ - import a bunch of matplotlib modules listed in modstr into a - single namespace. Eg, - - mpl = Importer('artist, cbook, lines, patches') - print mpl.cbook.iterable(1) - """ - for name in modstr.split(','): - name = name.strip() - wholename = '.'.join(['matplotlib', name]) - basemod = __import__(wholename) - mod = getattr(basemod, name) - setattr(self, name, mod) - - Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2007年12月05日 14:45:56 UTC (rev 4613) +++ trunk/matplotlib/lib/matplotlib/axes.py 2007年12月05日 15:16:48 UTC (rev 4614) @@ -152,13 +152,14 @@ an arbitrary number of x, y, fmt are allowed """ + defaultColors = ['b','g','r','c','m','y','k'] def __init__(self, axes, command='plot'): self.axes = axes self.command = command self._clear_color_cycle() def _clear_color_cycle(self): - self.colors = ['b','g','r','c','m','y','k'] + self.colors = _process_plot_var_args.defaultColors[:] # if the default line color is a color format string, move it up # in the que try: ind = self.colors.index(rcParams['lines.color']) Modified: trunk/matplotlib/lib/matplotlib/image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/image.py 2007年12月05日 14:45:56 UTC (rev 4613) +++ trunk/matplotlib/lib/matplotlib/image.py 2007年12月05日 15:16:48 UTC (rev 4614) @@ -243,6 +243,8 @@ self.set_data(A) + + def set_extent(self, extent): """extent is data axes (left, right, bottom, top) for making image plots """ Modified: trunk/matplotlib/matplotlibrc.template =================================================================== --- trunk/matplotlib/matplotlibrc.template 2007年12月05日 14:45:56 UTC (rev 4613) +++ trunk/matplotlib/matplotlibrc.template 2007年12月05日 15:16:48 UTC (rev 4614) @@ -25,7 +25,7 @@ #### CONFIGURATION BEGINS HERE # the default backend; one of GTK GTKAgg GTKCairo FltkAgg QtAgg TkAgg -# Agg Cairo GD GDK Paint PS PDF SVG Template +# WX WXAgg Agg Cairo GD GDK Paint PS PDF SVG Template backend : %(backend)s numerix : %(numerix)s # numpy, Numeric or numarray #maskedarray : False # True to use external maskedarray module This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4613 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4613&view=rev Author: dsdale Date: 2007年12月05日 06:45:56 -0800 (2007年12月05日) Log Message: ----------- removed .cvsignore files, they are not needed Removed Paths: ------------- trunk/course/.cvsignore trunk/course/code/.cvsignore trunk/course/examples/.cvsignore trunk/course/fig/.cvsignore trunk/htdocs/.cvsignore trunk/htdocs/examples/.cvsignore trunk/htdocs/screenshots/.cvsignore trunk/matplotlib/.cvsignore trunk/matplotlib/examples/.cvsignore trunk/matplotlib/lib/matplotlib/.cvsignore trunk/matplotlib/lib/matplotlib/backends/.cvsignore trunk/matplotlib/lib/matplotlib/numerix/.cvsignore trunk/matplotlib/lib/matplotlib/numerix/mlab/.cvsignore trunk/users_guide/.cvsignore trunk/users_guide/data/.cvsignore trunk/users_guide/figures/.cvsignore trunk/users_guide/styles/.cvsignore Deleted: trunk/course/.cvsignore =================================================================== --- trunk/course/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/course/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,10 +0,0 @@ -*.bbl -*.blg -*.dvi -*.log -*.toc -*.aux -*.out -*.tex -*.pdf -auto \ No newline at end of file Deleted: trunk/course/code/.cvsignore =================================================================== --- trunk/course/code/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/course/code/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,2 +0,0 @@ -*.pyc -*~ \ No newline at end of file Deleted: trunk/course/examples/.cvsignore =================================================================== --- trunk/course/examples/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/course/examples/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,2 +0,0 @@ -*.pyc -*~ Deleted: trunk/course/fig/.cvsignore =================================================================== --- trunk/course/fig/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/course/fig/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1 +0,0 @@ -.xvpics \ No newline at end of file Deleted: trunk/htdocs/.cvsignore =================================================================== --- trunk/htdocs/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/htdocs/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,5 +0,0 @@ -*.pyc -*html -site.tar.gz -drafts -.cvsignore \ No newline at end of file Deleted: trunk/htdocs/examples/.cvsignore =================================================================== --- trunk/htdocs/examples/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/htdocs/examples/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,6 +0,0 @@ -*.png -*.ps -*.eps -*.jpg -*.pyc -.cvsignore \ No newline at end of file Deleted: trunk/htdocs/screenshots/.cvsignore =================================================================== --- trunk/htdocs/screenshots/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/htdocs/screenshots/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,4 +0,0 @@ -*.png -.cvsignore -.xvpics -*.pyc \ No newline at end of file Deleted: trunk/matplotlib/.cvsignore =================================================================== --- trunk/matplotlib/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/matplotlib/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,6 +0,0 @@ -build -dist -docs -*.pyc -.project -matplotlibrc Deleted: trunk/matplotlib/examples/.cvsignore =================================================================== --- trunk/matplotlib/examples/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/matplotlib/examples/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,8 +0,0 @@ -*.eps -*.jpeg -*.jpg -*.pdf -*.png -*.ps -*.pyc -*.svg Deleted: trunk/matplotlib/lib/matplotlib/.cvsignore =================================================================== --- trunk/matplotlib/lib/matplotlib/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/matplotlib/lib/matplotlib/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,2 +0,0 @@ -*.pyc -.cvsignore \ No newline at end of file Deleted: trunk/matplotlib/lib/matplotlib/backends/.cvsignore =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/matplotlib/lib/matplotlib/backends/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,2 +0,0 @@ -*.pyc -.cvsignore \ No newline at end of file Deleted: trunk/matplotlib/lib/matplotlib/numerix/.cvsignore =================================================================== --- trunk/matplotlib/lib/matplotlib/numerix/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/matplotlib/lib/matplotlib/numerix/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,2 +0,0 @@ -*.pyc -.cvsignore \ No newline at end of file Deleted: trunk/matplotlib/lib/matplotlib/numerix/mlab/.cvsignore =================================================================== --- trunk/matplotlib/lib/matplotlib/numerix/mlab/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/matplotlib/lib/matplotlib/numerix/mlab/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1 +0,0 @@ -*.pyc Deleted: trunk/users_guide/.cvsignore =================================================================== --- trunk/users_guide/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/users_guide/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,11 +0,0 @@ -*.toc -*.bbl -*.blg -*.ps -*.eps -*.dvi -*.log -*.pdf -*.out -*.aux -auto \ No newline at end of file Deleted: trunk/users_guide/data/.cvsignore =================================================================== --- trunk/users_guide/data/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/users_guide/data/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,2 +0,0 @@ -ascii_data.dat -binary_data.dat \ No newline at end of file Deleted: trunk/users_guide/figures/.cvsignore =================================================================== --- trunk/users_guide/figures/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/users_guide/figures/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1,47 +0,0 @@ -alignment_demo.eps -alignment_demo.png -axes_demo.eps -axes_demo.png -big_diamonds.eps -big_diamonds.png -color_demo.eps -color_demo.png -date_ticker_demo.eps -date_ticker_demo.png -figure_mosaic.eps -figure_mosaic.png -fill_between.png -fill_between.eps -fonts_demo_kw.eps -fonts_demo_kw.png -image_demo.eps -image_demo.png -image_origin.eps -image_origin.png -layer_images.eps -layer_images.png -linear_regression.eps -linear_regression.png -major_minor_demo.eps -major_minor_demo.png -mathtext_demo.eps -mathtext_demo.png -plot_styles.eps -plot_styles.png -poly_regression.eps -poly_regression.png -subplot_demo.eps -subplot_demo.png -integral_demo.png -integral_demo.eps -specgram_demo.png -specgram_demo.eps -eeg.png -eeg.eps -.xvpics -renderer_agg.png -manager.ps -manager.png -artists.ps -artists.png -renderer_agg.png \ No newline at end of file Deleted: trunk/users_guide/styles/.cvsignore =================================================================== --- trunk/users_guide/styles/.cvsignore 2007年12月05日 13:59:10 UTC (rev 4612) +++ trunk/users_guide/styles/.cvsignore 2007年12月05日 14:45:56 UTC (rev 4613) @@ -1 +0,0 @@ -auto \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4612 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4612&view=rev Author: jswhit Date: 2007年12月05日 05:59:10 -0800 (2007年12月05日) Log Message: ----------- fixed time zone offset bug in num2date. Modified Paths: -------------- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月05日 13:11:58 UTC (rev 4611) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月05日 13:59:10 UTC (rev 4612) @@ -703,11 +703,11 @@ shape = time_value.shape # convert to desired units, remove time zone offset. if self.units in ['second','seconds']: - jdelta = time_value/86400. - self.tzoffset*60 + jdelta = time_value/86400. - self.tzoffset/1440. elif self.units in ['minute','minutes']: - jdelta = time_value/1440. - self.tzoffset + jdelta = time_value/1440. - self.tzoffset/1440. elif self.units in ['hours','hours']: - jdelta = time_value/24. - self.tzoffset/60. + jdelta = time_value/24. - self.tzoffset/1440. elif self.units in ['day','days']: jdelta = time_value - self.tzoffset/1440. jd = self._jd0 + jdelta This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4611 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4611&view=rev Author: jswhit Date: 2007年12月05日 05:11:58 -0800 (2007年12月05日) Log Message: ----------- docstring tweaks Modified Paths: -------------- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月05日 13:00:41 UTC (rev 4610) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月05日 13:11:58 UTC (rev 4611) @@ -2866,13 +2866,13 @@ """ Return datetime objects given numeric time values. The units of the numeric time values are described by the units argument - and the calendar keyword. The datetime objects represent + and the calendar keyword. The returned datetime objects represent UTC with no time-zone offset, even if the specified units contain a time-zone offset. Like the matplotlib num2date function, except that it allows for different units and calendars. Behaves the same if - units = 'days since 0001年01月01日 00:00:00' and + units = 'days since 001-01-01 00:00:00' and calendar = 'proleptic_gregorian'. Arguments: @@ -2882,7 +2882,7 @@ units - a string of the form '<time-units> since <reference time>' describing the time units. <time-units> can be days, hours, minutes or seconds. <reference-time> is the time origin. A valid choice - would be units='hours since 0001年01月01日 00:00:00'. + would be units='hours since 1800年01月01日 00:00:00 -6:00'. calendar - describes the calendar used in the time calculations. All the values currently defined in the CF metadata convention @@ -2900,7 +2900,9 @@ objects which support some but not all the methods of 'real' python datetime objects. This is because the python datetime module cannot the weird dates in some calendars (such as '360_day' and 'all_leap' - which don't exist in any real world calendar. + which don't exist in any real world calendar. The datetime instances + do not contain a time-zone offset, even if the specified units + contains one. """ cdftime = netcdftime.utime(units,calendar=calendar) return cdftime.num2date(times) @@ -2922,11 +2924,12 @@ Arguments: dates - A datetime object or a sequence of datetime objects. + The datetime objects should not include a time-zone offset. units - a string of the form '<time-units> since <reference time>' describing the time units. <time-units> can be days, hours, minutes or seconds. <reference-time> is the time origin. A valid choice - would be units='hours since 0001年01月01日 00:00:00'. + would be units='hours since 1800年01月01日 00:00:00 -6:00'. calendar - describes the calendar used in the time calculations. All the values currently defined in the CF metadata convention This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4610 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4610&view=rev Author: jswhit Date: 2007年12月05日 05:00:41 -0800 (2007年12月05日) Log Message: ----------- include time-zone offset in num2date and date2num. Modified Paths: -------------- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月05日 08:53:31 UTC (rev 4609) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月05日 13:00:41 UTC (rev 4610) @@ -2866,7 +2866,9 @@ """ Return datetime objects given numeric time values. The units of the numeric time values are described by the units argument - and the calendar keyword. The time zone is assumed to be UTC. + and the calendar keyword. The datetime objects represent + UTC with no time-zone offset, even if the specified + units contain a time-zone offset. Like the matplotlib num2date function, except that it allows for different units and calendars. Behaves the same if @@ -2907,7 +2909,10 @@ """ Return numeric time values given datetime objects. The units of the numeric time values are described by the units argument - and the calendar keyword. The time zone is assumed to UTC. + and the calendar keyword. The datetime objects must + be in UTC with no time-zone offset. If there is a + time-zone offset in units, it will be applied to the + returned numeric values. Like the matplotlib date2num function, except that it allows for different units and calendars. Behaves the same if Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月05日 08:53:31 UTC (rev 4609) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月05日 13:00:41 UTC (rev 4610) @@ -446,9 +446,7 @@ # parse the date string. n = timestr.find('since')+6 year,month,day,hour,minute,second,utc_offset = _parse_date(timestr[n:]) - if utc_offset: - raise ValueError("time zone offset not allowed") - return units, datetime(year, month, day, hour, minute, second) + return units, utc_offset, datetime(year, month, day, hour, minute, second) class utime: """ @@ -589,7 +587,8 @@ self.calendar = calendar else: raise ValueError, "calendar must be one of %s, got '%s'" % (str(_calendars),calendar) - units, self.origin = _dateparse(unit_string) + units, tzoffset, self.origin = _dateparse(unit_string) + self.tzoffset = tzoffset # time zone offset in minutes self.units = units self.unit_string = unit_string if self.calendar in ['noleap','365_day'] and self.origin.month == 2 and self.origin.day == 29: @@ -610,6 +609,10 @@ Returns C{time_value} in units described by L{unit_string}, using the specified L{calendar}, given a 'datetime-like' object. +The datetime object must represent UTC with no time-zone offset. +If there is a time-zone offset implied by L{unit_string}, it will +be applied to the returned numeric values. + Resolution is 1 second. If C{calendar = 'standard'} or C{'gregorian'} (indicating @@ -654,12 +657,15 @@ jdelta = [_360DayFromDate(d)-self._jd0 for d in date.flat] if not isscalar: jdelta = numpy.array(jdelta) + # convert to desired units, add time zone offset. if self.units in ['second','seconds']: - jdelta = jdelta*86400. + jdelta = jdelta*86400. + self.tzoffset*60. elif self.units in ['minute','minutes']: - jdelta = jdelta*1440. - elif self.units in ['hours','hours']: - jdelta = jdelta*24. + jdelta = jdelta*1440. + self.tzoffset + elif self.units in ['hour','hours']: + jdelta = jdelta*24. + self.tzoffset/60. + elif self.units in ['day','days']: + jdelta = jdelta + self.tzoffset/1440. if isscalar: return jdelta else: @@ -670,6 +676,9 @@ Return a 'datetime-like' object given a C{time_value} in units described by L{unit_string}, using L{calendar}. +dates are in UTC with no offset, even if L{unit_string} contains +a time zone offset from UTC. + Resolution is 1 second. Works for scalars, sequences and numpy arrays. @@ -692,14 +701,15 @@ if not isscalar: time_value = numpy.array(time_value) shape = time_value.shape + # convert to desired units, remove time zone offset. if self.units in ['second','seconds']: - jdelta = time_value/86400. + jdelta = time_value/86400. - self.tzoffset*60 elif self.units in ['minute','minutes']: - jdelta = time_value/1440. + jdelta = time_value/1440. - self.tzoffset elif self.units in ['hours','hours']: - jdelta = time_value/24. + jdelta = time_value/24. - self.tzoffset/60. elif self.units in ['day','days']: - jdelta = time_value + jdelta = time_value - self.tzoffset/1440. jd = self._jd0 + jdelta if self.calendar in ['julian','standard','gregorian','proleptic_gregorian']: if not isscalar: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4609 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4609&view=rev Author: fer_perez Date: 2007年12月05日 00:53:31 -0800 (2007年12月05日) Log Message: ----------- Updated talk with JPL stuff, NCAR, ipython, trimmed down text, etc. Modified Paths: -------------- trunk/py4science/intro_talk/fig/sage_notebook-medium.jpg trunk/py4science/intro_talk/intro_python_scicomp.lyx Added Paths: ----------- trunk/py4science/intro_talk/fig/ipython_parallel.eps trunk/py4science/intro_talk/fig/ipython_parallel.png trunk/py4science/intro_talk/fig/jpl_lander_comm_power.png trunk/py4science/intro_talk/fig/jpl_nav_summary.png trunk/py4science/intro_talk/fig/kernel2p.eps trunk/py4science/intro_talk/fig/kernel2p.png trunk/py4science/intro_talk/fig/mlab-screen-black.png trunk/py4science/intro_talk/fig/ncar-world-seam.3.png trunk/py4science/intro_talk/fig/pylab-screen.png trunk/py4science/intro_talk/fig/xkcd_python.png Added: trunk/py4science/intro_talk/fig/ipython_parallel.eps =================================================================== --- trunk/py4science/intro_talk/fig/ipython_parallel.eps (rev 0) +++ trunk/py4science/intro_talk/fig/ipython_parallel.eps 2007年12月05日 08:53:31 UTC (rev 4609) @@ -0,0 +1,7486 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%Creator: inkscape 0.42 +%%Pages: 1 +%%Orientation: Portrait +%%BoundingBox: 0 10 350 212 +%%HiResBoundingBox: -0.21033435 10.896446 349.56908 211.96069 +%%EndComments +%%Page: 1 1 +0 216 translate +0.80000000 -0.80000000 scale +gsave [1.0000000 0.0000000 0.0000000 1.0000000 0.0000000 0.0000000] concat +gsave +0.28627452 0.70980394 0.30196080 setrgbcolor +newpath +16.778235 6.0714302 moveto +280.72180 6.0714302 lineto +289.59625 6.0714302 296.74067 13.215843 296.74067 22.090292 curveto +296.74067 239.33829 lineto +296.74067 248.21274 289.59625 255.35715 280.72180 255.35715 curveto +16.778235 255.35715 lineto +7.9037854 255.35715 0.75937301 248.21274 0.75937301 239.33829 curveto +0.75937301 22.090292 lineto +0.75937301 13.215843 7.9037854 6.0714302 16.778235 6.0714302 curveto +closepath +fill +grestore +0.039215688 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +2.0445819 setlinewidth +1 setlinejoin +2 setlinecap +newpath +16.778235 6.0714302 moveto +280.72180 6.0714302 lineto +289.59625 6.0714302 296.74067 13.215843 296.74067 22.090292 curveto +296.74067 239.33829 lineto +296.74067 248.21274 289.59625 255.35715 280.72180 255.35715 curveto +16.778235 255.35715 lineto +7.9037854 255.35715 0.75937301 248.21274 0.75937301 239.33829 curveto +0.75937301 22.090292 lineto +0.75937301 13.215843 7.9037854 6.0714302 16.778235 6.0714302 curveto +closepath +stroke +gsave [1.2731760 0.0000000 0.0000000 1.2747120 356.97100 62.596420] concat +gsave [0.71622400 0.0000000 0.0000000 0.71622400 -12.570510 -9.6528320] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [25.220816 178.48862 25.220816 234.26866] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.38431373 0.38431373 0.38431373] +/C1 [1.0000000 1.0000000 1.0000000] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ ] +/Encode [ 0 1 ] +>> +>> +newpath +33.326111 78.658051 moveto +90.894035 78.658051 lineto +90.894035 86.973417 lineto +33.326111 86.973417 lineto +33.326111 78.658051 lineto +closepath +eoclip +gsave [2.4217070 0.0000000 0.0000000 0.41293200 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.71622400 0.0000000 0.0000000 0.71622400 -12.570510 -9.6528320] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [-77.726181 208.43991 95.644440 11.699047] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.38431373 0.38431373 0.38431373] +/C1 [1.0000000 1.0000000 1.0000000] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ ] +/Encode [ 0 1 ] +>> +>> +newpath +30.283221 22.413721 moveto +94.027441 22.413721 lineto +96.391775 22.413721 98.295193 24.314845 98.295193 26.676331 curveto +98.295193 78.277607 lineto +98.295193 80.639093 96.391775 82.540216 94.027441 82.540216 curveto +30.283221 82.540216 lineto +27.918886 82.540216 26.015469 80.639093 26.015469 78.277607 curveto +26.015469 26.676331 lineto +26.015469 24.314845 27.918886 22.413721 30.283221 22.413721 curveto +closepath +eoclip +gsave [1.0964160 0.0000000 0.0000000 0.91206300 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.71622400 0.0000000 0.0000000 0.71622400 -12.570510 -9.6528320] concat +gsave +<< +/ShadingType 3 +/ColorSpace /DeviceRGB +/Coords [30.904123 43.110134 0 30.777395 42.345802 57.555061] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.54509807 0.71764708 0.87450981] +/C1 [0.16470589 0.37647060 0.57254905] +/N 1 +>> +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.16470589 0.37647060 0.57254905] +/C1 [0.21568628 0.36862746 0.50980395] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ 0.76209301 ] +/Encode [ 0 1 0 1 ] +>> +>> +newpath +33.386066 31.695871 moveto +91.564243 31.695871 lineto +91.564243 69.740034 lineto +33.386066 69.740034 lineto +33.386066 31.695871 lineto +closepath +eoclip +gsave [1.2267530 0.0000000 0.0000000 0.81516000 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.71622400 0.0000000 0.0000000 0.71622400 -12.570510 -9.6528320] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [39.810947 90.197021 17.876530 113.71949] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [1.0000000 1.0000000 1.0000000] +/C1 [1.0000000 1.0000000 1.0000000] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ ] +/Encode [ 0 1 ] +>> +>> +newpath +27.690431 52.841444 moveto +27.370609 74.749236 lineto +27.319624 78.241665 29.310209 80.477938 32.807578 80.506029 curveto +72.625393 80.825852 lineto +76.463254 71.870840 lineto +32.008024 71.551020 lineto +31.688202 52.681533 lineto +27.690431 52.841444 lineto +closepath +eoclip +gsave [1.3207390 0.0000000 0.0000000 0.75715200 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.57158200 0.0000000 0.0000000 0.57158200 -77.725660 72.355410] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [159.22778 65.199112 79.938271 -89.846001] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.38431373 0.38431373 0.38431373] +/C1 [1.0000000 1.0000000 1.0000000] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ ] +/Encode [ 0 1 ] +>> +>> +newpath +146.46711 -34.316952 moveto +238.87593 -34.316952 lineto +242.11348 -34.316952 244.71989 -31.713689 244.71989 -28.480041 curveto +244.71989 -14.006415 lineto +244.71989 -10.772767 242.11348 -8.1695042 238.87593 -8.1695042 curveto +146.46711 -8.1695042 lineto +143.22956 -8.1695042 140.62315 -10.772767 140.62315 -14.006415 curveto +140.62315 -28.480041 lineto +140.62315 -31.713689 143.22956 -34.316952 146.46711 -34.316952 curveto +closepath +eoclip +gsave [1.9323840 0.0000000 0.0000000 0.51749500 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.57158200 0.0000000 0.0000000 0.57158200 -77.725660 72.355410] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [149.60782 23.060362 104.06033 -66.004578] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.38431373 0.38431373 0.38431373] +/C1 [1.0000000 1.0000000 1.0000000] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ ] +/Encode [ 0 1 ] +>> +>> +newpath +186.99507 -28.539845 moveto +238.00492 -28.539845 lineto +239.63897 -28.539845 240.95447 -27.225930 240.95447 -25.593848 curveto +240.95447 -15.656153 lineto +240.95447 -14.024071 239.63897 -12.710156 238.00492 -12.710156 curveto +186.99507 -12.710156 lineto +185.36102 -12.710156 184.04552 -14.024071 184.04552 -15.656153 curveto +184.04552 -25.593848 lineto +184.04552 -27.225930 185.36102 -28.539845 186.99507 -28.539845 curveto +closepath +eoclip +gsave [1.8411630 0.0000000 0.0000000 0.54313500 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.57158200 0.0000000 0.0000000 0.57158200 -77.725660 72.355410] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [149.64444 30.067947 108.57902 -48.173019] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.38431373 0.38431373 0.38431373] +/C1 [1.0000000 1.0000000 1.0000000] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ ] +/Encode [ 0 1 ] +>> +>> +newpath +147.64156 -28.227346 moveto +171.73343 -28.227346 lineto +173.03674 -28.227346 174.08598 -27.179377 174.08598 -25.877639 curveto +174.08598 -14.747366 lineto +174.08598 -13.445628 173.03674 -12.397658 171.73343 -12.397658 curveto +147.64156 -12.397658 lineto +146.33825 -12.397658 145.28902 -13.445628 145.28902 -14.747366 curveto +145.28902 -25.877639 lineto +145.28902 -27.179377 146.33825 -28.227346 147.64156 -28.227346 curveto +closepath +eoclip +gsave [1.3312480 0.0000000 0.0000000 0.75117500 0.0000000 0.0000000] concat +shfill +grestore +grestore +grestore +gsave [0.57158200 0.0000000 0.0000000 0.57158200 -77.725660 72.355410] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +189.20406 -21.681381 moveto +235.79592 -21.681381 lineto +236.52708 -21.681381 237.11572 -21.093460 237.11572 -20.363172 curveto +237.11572 -19.636831 lineto +237.11572 -18.906543 236.52708 -18.318621 235.79592 -18.318621 curveto +189.20406 -18.318621 lineto +188.47289 -18.318621 187.88426 -18.906543 187.88426 -19.636831 curveto +187.88426 -20.363172 lineto +187.88426 -21.093460 188.47289 -21.681381 189.20406 -21.681381 curveto +closepath +eofill +grestore +grestore +grestore +gsave [0.94423000 0.0000000 0.0000000 0.98351700 1.8992000 18.556140] concat +gsave [0.85011600 0.0000000 0.0000000 0.81013100 -20.604920 93.316700] concat +gsave +1.0000000 0.97647059 0.17254902 setrgbcolor +newpath +54.786436 76.520798 moveto +103.93698 76.520798 lineto +114.99266 76.520798 123.89309 85.487434 123.89309 96.625362 curveto +123.89309 130.17288 lineto +123.89309 141.31081 114.99266 150.27744 103.93698 150.27744 curveto +54.786436 150.27744 lineto +43.730749 150.27744 34.830322 141.31081 34.830322 130.17288 curveto +34.830322 96.625362 lineto +34.830322 85.487434 43.730749 76.520798 54.786436 76.520798 curveto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.4831532 setlinewidth +1 setlinejoin +2 setlinecap +newpath +54.786436 76.520798 moveto +103.93698 76.520798 lineto +114.99266 76.520798 123.89309 85.487434 123.89309 96.625362 curveto +123.89309 130.17288 lineto +123.89309 141.31081 114.99266 150.27744 103.93698 150.27744 curveto +54.786436 150.27744 lineto +43.730749 150.27744 34.830322 141.31081 34.830322 130.17288 curveto +34.830322 96.625362 lineto +34.830322 85.487434 43.730749 76.520798 54.786436 76.520798 curveto +closepath +stroke +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.59277242 setlinewidth +0 setlinejoin +0 setlinecap +newpath +77.857147 116.85188 moveto +77.857147 123.86241 lineto +stroke +gsave [1.4518258e-17 0.23710897 -0.23710897 1.4518258e-17 77.857147 116.85188] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +0.0000000 0.0000000 moveto +5.0000000 -5.0000000 lineto +-12.500000 0.0000000 lineto +5.0000000 5.0000000 lineto +0.0000000 0.0000000 lineto +closepath +eofill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +1.2500000 setlinewidth +0 setlinejoin +0 setlinecap +newpath +0.0000000 0.0000000 moveto +5.0000000 -5.0000000 lineto +-12.500000 0.0000000 lineto +5.0000000 5.0000000 lineto +0.0000000 0.0000000 lineto +closepath +stroke +grestore +gsave [-2.1777386e-17 -0.35566345 0.35566345 -2.1777386e-17 77.857147 125.64073] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +8.7185878 4.0337352 moveto +-2.2072895 0.016013256 lineto +8.7185884 -4.0017078 lineto +6.9730900 -1.6296469 6.9831476 1.6157441 8.7185878 4.0337352 curveto +closepath +eofill +grestore +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +45.415741 82.759491 moveto +45.122772 85.635468 lineto +44.019257 85.635468 lineto +43.726288 82.759491 lineto +45.415741 82.759491 lineto +42.862030 82.759491 moveto +42.569061 85.635468 lineto +41.465546 85.635468 lineto +41.172577 82.759491 lineto +42.862030 82.759491 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +51.094452 90.357147 moveto +46.836639 90.357147 lineto +46.836639 89.068085 lineto +48.028046 89.068085 lineto +48.028046 84.375702 lineto +46.836639 84.375702 lineto +46.836639 83.086639 lineto +51.094452 83.086639 lineto +51.094452 84.375702 lineto +49.903046 84.375702 lineto +49.903046 89.068085 lineto +51.094452 89.068085 lineto +51.094452 90.357147 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +58.633514 85.381561 moveto +58.633507 85.707087 58.576541 86.026097 58.462616 86.338593 curveto +58.348677 86.647841 58.185917 86.908257 57.974335 87.119843 curveto +57.684615 87.406304 57.360722 87.622775 57.002655 87.769257 curveto +56.647832 87.915743 56.205124 87.988986 55.674530 87.988983 curveto +54.507538 87.988983 lineto +54.507538 90.357147 lineto +52.632538 90.357147 lineto +52.632538 83.086639 lineto +55.718475 83.086639 lineto +56.180710 83.086647 56.569707 83.127337 56.885468 83.208710 curveto +57.204472 83.286842 57.486048 83.405657 57.730194 83.565155 curveto +58.023157 83.757219 58.246138 84.002987 58.399139 84.302460 curveto +58.555383 84.601945 58.633507 84.961645 58.633514 85.381561 curveto +56.695038 85.425507 moveto +56.695033 85.220434 56.639694 85.044653 56.529022 84.898163 curveto +56.418340 84.748429 56.289760 84.644262 56.143280 84.585663 curveto +55.947963 84.507544 55.757534 84.465226 55.571991 84.458710 curveto +55.386440 84.448950 55.139045 84.444067 54.829803 84.444061 curveto +54.507538 84.444061 lineto +54.507538 86.621796 lineto +55.044647 86.621796 lineto +55.363654 86.621799 55.625698 86.602268 55.830780 86.563202 curveto +56.039109 86.524143 56.213262 86.446018 56.353241 86.328827 curveto +56.473679 86.224664 56.559942 86.100967 56.612030 85.957733 curveto +56.667364 85.811253 56.695033 85.633845 56.695038 85.425507 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +62.334686 88.418671 moveto +63.584686 84.873749 lineto +65.391327 84.873749 lineto +62.344452 92.368866 lineto +60.440155 92.368866 lineto +61.309296 90.318085 lineto +59.175507 84.873749 lineto +61.021210 84.873749 lineto +62.334686 88.418671 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +69.868866 90.308319 moveto +69.680060 90.357147 69.479865 90.394582 69.268280 90.420624 curveto +69.056688 90.449921 68.797899 90.464569 68.491913 90.464569 curveto +67.808317 90.464569 67.298877 90.326223 66.963593 90.049530 curveto +66.631560 89.772838 66.465545 89.299206 66.465546 88.628632 curveto +66.465546 86.065155 lineto +65.742889 86.065155 lineto +65.742889 84.873749 lineto +66.465546 84.873749 lineto +66.465546 83.306366 lineto +68.223358 83.306366 lineto +68.223358 84.873749 lineto +69.868866 84.873749 lineto +69.868866 86.065155 lineto +68.223358 86.065155 lineto +68.223358 88.008514 lineto +68.223355 88.200574 68.224983 88.368217 68.228241 88.511444 curveto +68.231493 88.654675 68.257535 88.783256 68.306366 88.897186 curveto +68.351936 89.011120 68.431689 89.102266 68.545624 89.170624 curveto +68.662808 89.235729 68.832079 89.268281 69.053436 89.268280 curveto +69.144579 89.268281 69.263393 89.248750 69.409882 89.209686 curveto +69.559617 89.170625 69.663784 89.134818 69.722382 89.102264 curveto +69.868866 89.102264 lineto +69.868866 90.308319 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +76.421600 90.357147 moveto +74.654022 90.357147 lineto +74.654022 87.637421 lineto +74.654018 87.416069 74.642624 87.196343 74.619843 86.978241 curveto +74.597052 86.756890 74.557989 86.594130 74.502655 86.489960 curveto +74.437547 86.369521 74.341518 86.281630 74.214569 86.226288 curveto +74.090867 86.170953 73.916714 86.143284 73.692108 86.143280 curveto +73.532599 86.143284 73.369839 86.169326 73.203827 86.221405 curveto +73.041064 86.273492 72.863655 86.356500 72.671600 86.470428 curveto +72.671600 90.357147 lineto +70.913788 90.357147 lineto +70.913788 82.759491 lineto +72.671600 82.759491 lineto +72.671600 85.479218 lineto +72.984097 85.235082 73.283576 85.047908 73.570038 84.917694 curveto +73.859748 84.787491 74.180385 84.722387 74.531952 84.722382 curveto +75.124395 84.722387 75.586634 84.894913 75.918671 85.239960 curveto +76.253951 85.585017 76.421594 86.100967 76.421600 86.787811 curveto +76.421600 90.357147 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +83.648163 87.617889 moveto +83.648156 88.519584 83.384485 89.230846 82.857147 89.751678 curveto +82.333054 90.269257 81.595750 90.528045 80.645233 90.528046 curveto +79.694710 90.528045 78.955778 90.269257 78.428436 89.751678 curveto +77.904347 89.230846 77.642303 88.519584 77.642303 87.617889 curveto +77.642303 86.709690 77.905975 85.996800 78.433319 85.479218 curveto +78.963916 84.961645 79.701220 84.702856 80.645233 84.702850 curveto +81.602260 84.702856 82.341192 84.963272 82.862030 85.484100 curveto +83.386112 86.004938 83.648156 86.716200 83.648163 87.617889 curveto +81.485077 88.950897 moveto +81.599005 88.810925 81.683640 88.643282 81.738983 88.447968 curveto +81.797572 88.249402 81.826869 87.975965 81.826874 87.627655 curveto +81.826869 87.305392 81.797572 87.035210 81.738983 86.817108 curveto +81.680385 86.599013 81.599005 86.424859 81.494843 86.294647 curveto +81.390672 86.161188 81.265346 86.066787 81.118866 86.011444 curveto +80.972378 85.956110 80.814500 85.928441 80.645233 85.928436 curveto +80.475959 85.928441 80.324592 85.951227 80.191132 85.996796 curveto +80.060920 86.042373 79.935595 86.133519 79.815155 86.270233 curveto +79.707731 86.397190 79.621468 86.571344 79.556366 86.792694 curveto +79.494515 87.014052 79.463590 87.292372 79.463593 87.627655 curveto +79.463590 87.927137 79.491260 88.187553 79.546600 88.408905 curveto +79.601936 88.627006 79.683317 88.802787 79.790741 88.936249 curveto +79.894905 89.063203 80.018603 89.155977 80.161835 89.214569 curveto +80.308316 89.273164 80.474331 89.302461 80.659882 89.302460 curveto +80.819383 89.302461 80.970750 89.276419 81.113983 89.224335 curveto +81.260463 89.168997 81.384161 89.077852 81.485077 88.950897 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +90.425507 90.357147 moveto +88.657928 90.357147 lineto +88.657928 87.637421 lineto +88.657924 87.416069 88.646531 87.196343 88.623749 86.978241 curveto +88.600958 86.756890 88.561895 86.594130 88.506561 86.489960 curveto +88.441453 86.369521 88.345424 86.281630 88.218475 86.226288 curveto +88.094773 86.170953 87.920620 86.143284 87.696014 86.143280 curveto +87.536506 86.143284 87.373745 86.169326 87.207733 86.221405 curveto +87.044970 86.273492 86.867561 86.356500 86.675507 86.470428 curveto +86.675507 90.357147 lineto +84.917694 90.357147 lineto +84.917694 84.873749 lineto +86.675507 84.873749 lineto +86.675507 85.479218 lineto +86.988004 85.235082 87.287483 85.047908 87.573944 84.917694 curveto +87.863654 84.787491 88.184292 84.722387 88.535858 84.722382 curveto +89.128301 84.722387 89.590540 84.894913 89.922577 85.239960 curveto +90.257857 85.585017 90.425500 86.100967 90.425507 86.787811 curveto +90.425507 90.357147 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +102.15402 83.086639 moveto +99.502655 90.357147 lineto +97.403046 90.357147 lineto +94.751678 83.086639 lineto +96.719452 83.086639 lineto +98.477264 88.194061 lineto +100.23508 83.086639 lineto +102.15402 83.086639 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +110.82101 90.357147 moveto +108.95578 90.357147 lineto +108.95578 85.488983 lineto +107.60812 88.648163 lineto +106.31418 88.648163 lineto +104.96652 85.488983 lineto +104.96652 90.357147 lineto +103.19894 90.357147 lineto +103.19894 83.086639 lineto +105.37668 83.086639 lineto +107.01242 86.734100 lineto +108.64328 83.086639 lineto +110.82101 83.086639 lineto +110.82101 90.357147 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +116.80246 82.759491 moveto +116.50949 85.635468 lineto +115.40598 85.635468 lineto +115.11301 82.759491 lineto +116.80246 82.759491 lineto +114.24875 82.759491 moveto +113.95578 85.635468 lineto +112.85226 85.635468 lineto +112.55930 82.759491 lineto +114.24875 82.759491 lineto +fill +grestore +gsave [1.0000000 0.0000000 0.0000000 1.0000000 -1.4285710 -3.9285710] concat +gsave +0.15686275 0.49803922 1.0000000 setrgbcolor +newpath +53.175419 99.337708 moveto +108.96740 99.337708 lineto +113.86089 99.337708 117.80041 102.97808 117.80041 107.49998 curveto +117.80041 112.02188 113.86089 115.66225 108.96740 115.66225 curveto +53.175419 115.66225 lineto +48.281935 115.66225 44.342415 112.02188 44.342415 107.49998 curveto +44.342415 102.97808 48.281935 99.337708 53.175419 99.337708 curveto +closepath +fill +grestore +0.039215688 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.82404637 setlinewidth +1 setlinejoin +2 setlinecap +newpath +53.175419 99.337708 moveto +108.96740 99.337708 lineto +113.86089 99.337708 117.80041 102.97808 117.80041 107.49998 curveto +117.80041 112.02188 113.86089 115.66225 108.96740 115.66225 curveto +53.175419 115.66225 lineto +48.281935 115.66225 44.342415 112.02188 44.342415 107.49998 curveto +44.342415 102.97808 48.281935 99.337708 53.175419 99.337708 curveto +closepath +stroke +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +48.642303 104.16797 moveto +49.431366 104.16797 lineto +49.431366 106.63281 lineto +52.048553 104.16797 lineto +53.064178 104.16797 lineto +50.169647 106.88672 lineto +53.271210 110.00000 lineto +52.232147 110.00000 lineto +49.431366 107.19141 lineto +49.431366 110.00000 lineto +48.642303 110.00000 lineto +48.642303 104.16797 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +57.212616 107.63281 moveto +57.212616 107.98438 lineto +53.907928 107.98438 lineto +53.939177 108.47917 54.087615 108.85677 54.353241 109.11719 curveto +54.621468 109.37500 54.993864 109.50391 55.470428 109.50391 curveto +55.746467 109.50391 56.013394 109.47005 56.271210 109.40234 curveto +56.531623 109.33464 56.789435 109.23307 57.044647 109.09766 curveto +57.044647 109.77734 lineto +56.786831 109.88672 56.522508 109.97005 56.251678 110.02734 curveto +55.980842 110.08464 55.706103 110.11328 55.427460 110.11328 curveto +54.729541 110.11328 54.176156 109.91016 53.767303 109.50391 curveto +53.361053 109.09766 53.157928 108.54818 53.157928 107.85547 curveto +53.157928 107.13933 53.350636 106.57162 53.736053 106.15234 curveto +54.124073 105.73047 54.646208 105.51954 55.302460 105.51953 curveto +55.890998 105.51954 56.355841 105.70964 56.696991 106.08984 curveto +57.040737 106.46745 57.212611 106.98177 57.212616 107.63281 curveto +56.493866 107.42188 moveto +56.488654 107.02865 56.377977 106.71485 56.161835 106.48047 curveto +55.948290 106.24610 55.664436 106.12891 55.310272 106.12891 curveto +54.909228 106.12891 54.587614 106.24219 54.345428 106.46875 curveto +54.105844 106.69532 53.967823 107.01433 53.931366 107.42578 curveto +56.493866 107.42188 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +60.927460 106.29688 moveto +60.846727 106.25000 60.758186 106.21615 60.661835 106.19531 curveto +60.568082 106.17188 60.463915 106.16016 60.349335 106.16016 curveto +59.943082 106.16016 59.630583 106.29297 59.411835 106.55859 curveto +59.195687 106.82162 59.087615 107.20052 59.087616 107.69531 curveto +59.087616 110.00000 lineto +58.364960 110.00000 lineto +58.364960 105.62500 lineto +59.087616 105.62500 lineto +59.087616 106.30469 lineto +59.238656 106.03907 59.435270 105.84245 59.677460 105.71484 curveto +59.919645 105.58464 60.213915 105.51954 60.560272 105.51953 curveto +60.609748 105.51954 60.664436 105.52344 60.724335 105.53125 curveto +60.784227 105.53646 60.850634 105.54558 60.923553 105.55859 curveto +60.927460 106.29688 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +65.185272 107.35938 moveto +65.185272 110.00000 lineto +64.466522 110.00000 lineto +64.466522 107.38281 lineto +64.466519 106.96875 64.385789 106.65886 64.224335 106.45312 curveto +64.062873 106.24740 63.820686 106.14454 63.497772 106.14453 curveto +63.109749 106.14454 62.803760 106.26823 62.579803 106.51562 curveto +62.355844 106.76302 62.243865 107.10026 62.243866 107.52734 curveto +62.243866 110.00000 lineto +61.521210 110.00000 lineto +61.521210 105.62500 lineto +62.243866 105.62500 lineto +62.243866 106.30469 lineto +62.415739 106.04167 62.617562 105.84506 62.849335 105.71484 curveto +63.083707 105.58464 63.353238 105.51954 63.657928 105.51953 curveto +64.160529 105.51954 64.540737 105.67579 64.798553 105.98828 curveto +65.056362 106.29818 65.185268 106.75521 65.185272 107.35938 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +70.368866 107.63281 moveto +70.368866 107.98438 lineto +67.064178 107.98438 lineto +67.095427 108.47917 67.243865 108.85677 67.509491 109.11719 curveto +67.777718 109.37500 68.150114 109.50391 68.626678 109.50391 curveto +68.902717 109.50391 69.169644 109.47005 69.427460 109.40234 curveto +69.687873 109.33464 69.945685 109.23307 70.200897 109.09766 curveto +70.200897 109.77734 lineto +69.943081 109.88672 69.678758 109.97005 69.407928 110.02734 curveto +69.137092 110.08464 68.862353 110.11328 68.583710 110.11328 curveto +67.885791 110.11328 67.332406 109.91016 66.923553 109.50391 curveto +66.517303 109.09766 66.314178 108.54818 66.314178 107.85547 curveto +66.314178 107.13933 66.506886 106.57162 66.892303 106.15234 curveto +67.280323 105.73047 67.802458 105.51954 68.458710 105.51953 curveto +69.047248 105.51954 69.512091 105.70964 69.853241 106.08984 curveto +70.196987 106.46745 70.368861 106.98177 70.368866 107.63281 curveto +69.650116 107.42188 moveto +69.644904 107.02865 69.534227 106.71485 69.318085 106.48047 curveto +69.104540 106.24610 68.820686 106.12891 68.466522 106.12891 curveto +68.065478 106.12891 67.743864 106.24219 67.501678 106.46875 curveto +67.262094 106.69532 67.124073 107.01433 67.087616 107.42578 curveto +69.650116 107.42188 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +71.548553 103.92188 moveto +72.267303 103.92188 lineto +72.267303 110.00000 lineto +71.548553 110.00000 lineto +71.548553 103.92188 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +79.462616 105.79297 moveto +79.462616 106.46484 lineto +79.259487 106.35287 79.055060 106.26953 78.849335 106.21484 curveto +78.646207 106.15756 78.440478 106.12891 78.232147 106.12891 curveto +77.765999 106.12891 77.404020 106.27735 77.146210 106.57422 curveto +76.888396 106.86849 76.759490 107.28255 76.759491 107.81641 curveto +76.759490 108.35026 76.888396 108.76563 77.146210 109.06250 curveto +77.404020 109.35677 77.765999 109.50391 78.232147 109.50391 curveto +78.440478 109.50391 78.646207 109.47656 78.849335 109.42188 curveto +79.055060 109.36458 79.259487 109.27995 79.462616 109.16797 curveto +79.462616 109.83203 lineto +79.262091 109.92578 79.053758 109.99609 78.837616 110.04297 curveto +78.624071 110.08984 78.396207 110.11328 78.154022 110.11328 curveto +77.495166 110.11328 76.971729 109.90625 76.583710 109.49219 curveto +76.195688 109.07813 76.001678 108.51953 76.001678 107.81641 curveto +76.001678 107.10287 76.196990 106.54167 76.587616 106.13281 curveto +76.980844 105.72396 77.518604 105.51954 78.200897 105.51953 curveto +78.422249 105.51954 78.638394 105.54297 78.849335 105.58984 curveto +79.060269 105.63412 79.264696 105.70183 79.462616 105.79297 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +82.415741 106.12891 moveto +82.030322 106.12891 81.725635 106.27995 81.501678 106.58203 curveto +81.277719 106.88151 81.165740 107.29297 81.165741 107.81641 curveto +81.165740 108.33985 81.276417 108.75261 81.497772 109.05469 curveto +81.721729 109.35417 82.027718 109.50391 82.415741 109.50391 curveto +82.798551 109.50391 83.101936 109.35287 83.325897 109.05078 curveto +83.549852 108.74870 83.661831 108.33724 83.661835 107.81641 curveto +83.661831 107.29818 83.549852 106.88802 83.325897 106.58594 curveto +83.101936 106.28125 82.798551 106.12891 82.415741 106.12891 curveto +82.415741 105.51953 moveto +83.040738 105.51954 83.531623 105.72266 83.888397 106.12891 curveto +84.245164 106.53516 84.423549 107.09766 84.423553 107.81641 curveto +84.423549 108.53255 84.245164 109.09505 83.888397 109.50391 curveto +83.531623 109.91016 83.040738 110.11328 82.415741 110.11328 curveto +81.788135 110.11328 81.295948 109.91016 80.939178 109.50391 curveto +80.585011 109.09505 80.407928 108.53255 80.407928 107.81641 curveto +80.407928 107.09766 80.585011 106.53516 80.939178 106.12891 curveto +81.295948 105.72266 81.788135 105.51954 82.415741 105.51953 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +89.247772 107.35938 moveto +89.247772 110.00000 lineto +88.529022 110.00000 lineto +88.529022 107.38281 lineto +88.529019 106.96875 88.448289 106.65886 88.286835 106.45312 curveto +88.125373 106.24740 87.883186 106.14454 87.560272 106.14453 curveto +87.172249 106.14454 86.866260 106.26823 86.642303 106.51562 curveto +86.418344 106.76302 86.306365 107.10026 86.306366 107.52734 curveto +86.306366 110.00000 lineto +85.583710 110.00000 lineto +85.583710 105.62500 lineto +86.306366 105.62500 lineto +86.306366 106.30469 lineto +86.478239 106.04167 86.680062 105.84506 86.911835 105.71484 curveto +87.146207 105.58464 87.415738 105.51954 87.720428 105.51953 curveto +88.223029 105.51954 88.603237 105.67579 88.861053 105.98828 curveto +89.118862 106.29818 89.247768 106.75521 89.247772 107.35938 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +91.400116 104.38281 moveto +91.400116 105.62500 lineto +92.880585 105.62500 lineto +92.880585 106.18359 lineto +91.400116 106.18359 lineto +91.400116 108.55859 lineto +91.400115 108.91537 91.448292 109.14453 91.544647 109.24609 curveto +91.643604 109.34766 91.842822 109.39844 92.142303 109.39844 curveto +92.880585 109.39844 lineto +92.880585 110.00000 lineto +92.142303 110.00000 lineto +91.587614 110.00000 91.204802 109.89714 90.993866 109.69141 curveto +90.782928 109.48307 90.677459 109.10547 90.677460 108.55859 curveto +90.677460 106.18359 lineto +90.150116 106.18359 lineto +90.150116 105.62500 lineto +90.677460 105.62500 lineto +90.677460 104.38281 lineto +91.400116 104.38281 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +96.364960 106.29688 moveto +96.284227 106.25000 96.195686 106.21615 96.099335 106.19531 curveto +96.005582 106.17188 95.901415 106.16016 95.786835 106.16016 curveto +95.380582 106.16016 95.068083 106.29297 94.849335 106.55859 curveto +94.633187 106.82162 94.525115 107.20052 94.525116 107.69531 curveto +94.525116 110.00000 lineto +93.802460 110.00000 lineto +93.802460 105.62500 lineto +94.525116 105.62500 lineto +94.525116 106.30469 lineto +94.676156 106.03907 94.872770 105.84245 95.114960 105.71484 curveto +95.357145 105.58464 95.651415 105.51954 95.997772 105.51953 curveto +96.047248 105.51954 96.101936 105.52344 96.161835 105.53125 curveto +96.221727 105.53646 96.288134 105.54558 96.361053 105.55859 curveto +96.364960 106.29688 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +98.650116 106.12891 moveto +98.264697 106.12891 97.960010 106.27995 97.736053 106.58203 curveto +97.512094 106.88151 97.400115 107.29297 97.400116 107.81641 curveto +97.400115 108.33985 97.510792 108.75261 97.732147 109.05469 curveto +97.956104 109.35417 98.262093 109.50391 98.650116 109.50391 curveto +99.032926 109.50391 99.336311 109.35287 99.560272 109.05078 curveto +99.784227 108.74870 99.896206 108.33724 99.896210 107.81641 curveto +99.896206 107.29818 99.784227 106.88802 99.560272 106.58594 curveto +99.336311 106.28125 99.032926 106.12891 98.650116 106.12891 curveto +98.650116 105.51953 moveto +99.275113 105.51954 99.765998 105.72266 100.12277 106.12891 curveto +100.47954 106.53516 100.65792 107.09766 100.65793 107.81641 curveto +100.65792 108.53255 100.47954 109.09505 100.12277 109.50391 curveto +99.765998 109.91016 99.275113 110.11328 98.650116 110.11328 curveto +98.022510 110.11328 97.530323 109.91016 97.173553 109.50391 curveto +96.819386 109.09505 96.642303 108.53255 96.642303 107.81641 curveto +96.642303 107.09766 96.819386 106.53516 97.173553 106.12891 curveto +97.530323 105.72266 98.022510 105.51954 98.650116 105.51953 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +101.84543 103.92188 moveto +102.56418 103.92188 lineto +102.56418 110.00000 lineto +101.84543 110.00000 lineto +101.84543 103.92188 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +104.06418 103.92188 moveto +104.78293 103.92188 lineto +104.78293 110.00000 lineto +104.06418 110.00000 lineto +104.06418 103.92188 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +110.02512 107.63281 moveto +110.02512 107.98438 lineto +106.72043 107.98438 lineto +106.75168 108.47917 106.90011 108.85677 107.16574 109.11719 curveto +107.43397 109.37500 107.80636 109.50391 108.28293 109.50391 curveto +108.55897 109.50391 108.82589 109.47005 109.08371 109.40234 curveto +109.34412 109.33464 109.60193 109.23307 109.85715 109.09766 curveto +109.85715 109.77734 lineto +109.59933 109.88672 109.33501 109.97005 109.06418 110.02734 curveto +108.79334 110.08464 108.51860 110.11328 108.23996 110.11328 curveto +107.54204 110.11328 106.98866 109.91016 106.57980 109.50391 curveto +106.17355 109.09766 105.97043 108.54818 105.97043 107.85547 curveto +105.97043 107.13933 106.16314 106.57162 106.54855 106.15234 curveto +106.93657 105.73047 107.45871 105.51954 108.11496 105.51953 curveto +108.70350 105.51954 109.16834 105.70964 109.50949 106.08984 curveto +109.85324 106.46745 110.02511 106.98177 110.02512 107.63281 curveto +109.30637 107.42188 moveto +109.30115 107.02865 109.19048 106.71485 108.97433 106.48047 curveto +108.76079 106.24610 108.47694 106.12891 108.12277 106.12891 curveto +107.72173 106.12891 107.40011 106.24219 107.15793 106.46875 curveto +106.91834 106.69532 106.78032 107.01433 106.74387 107.42578 curveto +109.30637 107.42188 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +113.73996 106.29688 moveto +113.65923 106.25000 113.57069 106.21615 113.47433 106.19531 curveto +113.38058 106.17188 113.27642 106.16016 113.16183 106.16016 curveto +112.75558 106.16016 112.44308 106.29297 112.22433 106.55859 curveto +112.00819 106.82162 111.90011 107.20052 111.90012 107.69531 curveto +111.90012 110.00000 lineto +111.17746 110.00000 lineto +111.17746 105.62500 lineto +111.90012 105.62500 lineto +111.90012 106.30469 lineto +112.05116 106.03907 112.24777 105.84245 112.48996 105.71484 curveto +112.73214 105.58464 113.02642 105.51954 113.37277 105.51953 curveto +113.42225 105.51954 113.47694 105.52344 113.53683 105.53125 curveto +113.59673 105.53646 113.66313 105.54558 113.73605 105.55859 curveto +113.73996 106.29688 lineto +fill +grestore +grestore +gsave [1.0000000 0.0000000 0.0000000 1.0000000 0.71428500 -21.071430] concat +gsave +1.0000000 0.15686275 0.15686275 setrgbcolor +newpath +56.353905 148.99956 moveto +100.07464 148.99956 lineto +104.96813 148.99956 108.90765 152.39253 108.90765 156.60712 curveto +108.90765 160.82172 104.96813 164.21469 100.07464 164.21469 curveto +56.353905 164.21469 lineto +51.460421 164.21469 47.520901 160.82172 47.520901 156.60712 curveto +47.520901 152.39253 51.460421 148.99956 56.353905 148.99956 curveto +closepath +fill +grestore +0.039215688 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.72725511 setlinewidth +1 setlinejoin +2 setlinecap +newpath +56.353905 148.99956 moveto +100.07464 148.99956 lineto +104.96813 148.99956 108.90765 152.39253 108.90765 156.60712 curveto +108.90765 160.82172 104.96813 164.21469 100.07464 164.21469 curveto +56.353905 164.21469 lineto +51.460421 164.21469 47.520901 160.82172 47.520901 156.60712 curveto +47.520901 152.39253 51.460421 148.99956 56.353905 148.99956 curveto +closepath +stroke +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +51.736885 153.57895 moveto +52.525948 153.57895 lineto +52.525948 156.04379 lineto +55.143135 153.57895 lineto +56.158760 153.57895 lineto +53.264229 156.29770 lineto +56.365791 159.41098 lineto +55.326729 159.41098 lineto +52.525948 156.60239 lineto +52.525948 159.41098 lineto +51.736885 159.41098 lineto +51.736885 153.57895 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +60.307198 157.04379 moveto +60.307198 157.39536 lineto +57.002510 157.39536 lineto +57.033759 157.89015 57.182196 158.26775 57.447823 158.52817 curveto +57.716050 158.78598 58.088445 158.91489 58.565010 158.91489 curveto +58.841049 158.91489 59.107976 158.88103 59.365791 158.81332 curveto +59.626204 158.74562 59.884016 158.64405 60.139229 158.50864 curveto +60.139229 159.18832 lineto +59.881412 159.29770 59.617090 159.38103 59.346260 159.43832 curveto +59.075423 159.49562 58.800684 159.52426 58.522041 159.52426 curveto +57.824123 159.52426 57.270738 159.32114 56.861885 158.91489 curveto +56.455634 158.50864 56.252510 157.95916 56.252510 157.26645 curveto +56.252510 156.55031 56.445218 155.98260 56.830635 155.56332 curveto +57.218654 155.14145 57.740789 154.93052 58.397041 154.93051 curveto +58.985580 154.93052 59.450423 155.12062 59.791573 155.50082 curveto +60.135318 155.87843 60.307193 156.39275 60.307198 157.04379 curveto +59.588448 156.83286 moveto +59.583235 156.43963 59.472558 156.12583 59.256416 155.89145 curveto +59.042871 155.65708 58.759018 155.53989 58.404854 155.53989 curveto +58.003810 155.53989 57.682196 155.65317 57.440010 155.87973 curveto +57.200425 156.10630 57.062405 156.42531 57.025948 156.83676 curveto +59.588448 156.83286 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +64.022041 155.70786 moveto +63.941309 155.66098 63.852767 155.62713 63.756416 155.60629 curveto +63.662663 155.58286 63.558497 155.57114 63.443916 155.57114 curveto +63.037664 155.57114 62.725164 155.70395 62.506416 155.96957 curveto +62.290269 156.23260 62.182196 156.61150 62.182198 157.10629 curveto +62.182198 159.41098 lineto +61.459541 159.41098 lineto +61.459541 155.03598 lineto +62.182198 155.03598 lineto +62.182198 155.71567 lineto +62.333238 155.45005 62.529852 155.25343 62.772041 155.12582 curveto +63.014227 154.99562 63.308497 154.93052 63.654854 154.93051 curveto +63.704330 154.93052 63.759017 154.93442 63.818916 154.94223 curveto +63.878809 154.94744 63.945215 154.95656 64.018135 154.96957 curveto +64.022041 155.70786 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +68.279854 156.77036 moveto +68.279854 159.41098 lineto +67.561104 159.41098 lineto +67.561104 156.79379 lineto +67.561100 156.37973 67.480371 156.06984 67.318916 155.86411 curveto +67.157455 155.65838 66.915267 155.55552 66.592354 155.55551 curveto +66.204331 155.55552 65.898341 155.67921 65.674385 155.92661 curveto +65.450425 156.17400 65.338446 156.51124 65.338448 156.93832 curveto +65.338448 159.41098 lineto +64.615791 159.41098 lineto +64.615791 155.03598 lineto +65.338448 155.03598 lineto +65.338448 155.71567 lineto +65.510321 155.45265 65.712144 155.25604 65.943916 155.12582 curveto +66.178289 154.99562 66.447820 154.93052 66.752510 154.93051 curveto +67.255111 154.93052 67.635319 155.08677 67.893135 155.39926 curveto +68.150943 155.70916 68.279849 156.16619 68.279854 156.77036 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +73.463448 157.04379 moveto +73.463448 157.39536 lineto +70.158760 157.39536 lineto +70.190009 157.89015 70.338446 158.26775 70.604073 158.52817 curveto +70.872300 158.78598 71.244695 158.91489 71.721260 158.91489 curveto +71.997299 158.91489 72.264226 158.88103 72.522041 158.81332 curveto +72.782454 158.74562 73.040266 158.64405 73.295479 158.50864 curveto +73.295479 159.18832 lineto +73.037662 159.29770 72.773340 159.38103 72.502510 159.43832 curveto +72.231673 159.49562 71.956934 159.52426 71.678291 159.52426 curveto +70.980373 159.52426 70.426988 159.32114 70.018135 158.91489 curveto +69.611884 158.50864 69.408760 157.95916 69.408760 157.26645 curveto +69.408760 156.55031 69.601468 155.98260 69.986885 155.56332 curveto +70.374904 155.14145 70.897039 154.93052 71.553291 154.93051 curveto +72.141830 154.93052 72.606673 155.12062 72.947823 155.50082 curveto +73.291568 155.87843 73.463443 156.39275 73.463448 157.04379 curveto +72.744698 156.83286 moveto +72.739485 156.43963 72.628808 156.12583 72.412666 155.89145 curveto +72.199121 155.65708 71.915268 155.53989 71.561104 155.53989 curveto +71.160060 155.53989 70.838446 155.65317 70.596260 155.87973 curveto +70.356675 156.10630 70.218655 156.42531 70.182198 156.83676 curveto +72.744698 156.83286 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +74.643135 153.33286 moveto +75.361885 153.33286 lineto +75.361885 159.41098 lineto +74.643135 159.41098 lineto +74.643135 153.33286 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +83.150948 157.04379 moveto +83.150948 157.39536 lineto +79.846260 157.39536 lineto +79.877509 157.89015 80.025946 158.26775 80.291573 158.52817 curveto +80.559800 158.78598 80.932195 158.91489 81.408760 158.91489 curveto +81.684799 158.91489 81.951726 158.88103 82.209541 158.81332 curveto +82.469954 158.74562 82.727766 158.64405 82.982979 158.50864 curveto +82.982979 159.18832 lineto +82.725162 159.29770 82.460840 159.38103 82.190010 159.43832 curveto +81.919173 159.49562 81.644434 159.52426 81.365791 159.52426 curveto +80.667873 159.52426 80.114488 159.32114 79.705635 158.91489 curveto +79.299384 158.50864 79.096260 157.95916 79.096260 157.26645 curveto +79.096260 156.55031 79.288968 155.98260 79.674385 155.56332 curveto +80.062404 155.14145 80.584539 154.93052 81.240791 154.93051 curveto +81.829330 154.93052 82.294173 155.12062 82.635323 155.50082 curveto +82.979068 155.87843 83.150943 156.39275 83.150948 157.04379 curveto +82.432198 156.83286 moveto +82.426985 156.43963 82.316308 156.12583 82.100166 155.89145 curveto +81.886621 155.65708 81.602768 155.53989 81.248604 155.53989 curveto +80.847560 155.53989 80.525946 155.65317 80.283760 155.87973 curveto +80.044175 156.10630 79.906155 156.42531 79.869698 156.83676 curveto +82.432198 156.83286 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +87.967354 156.77036 moveto +87.967354 159.41098 lineto +87.248604 159.41098 lineto +87.248604 156.79379 lineto +87.248600 156.37973 87.167871 156.06984 87.006416 155.86411 curveto +86.844955 155.65838 86.602767 155.55552 86.279854 155.55551 curveto +85.891831 155.55552 85.585841 155.67921 85.361885 155.92661 curveto +85.137925 156.17400 85.025946 156.51124 85.025948 156.93832 curveto +85.025948 159.41098 lineto +84.303291 159.41098 lineto +84.303291 155.03598 lineto +85.025948 155.03598 lineto +85.025948 155.71567 lineto +85.197821 155.45265 85.399644 155.25604 85.631416 155.12582 curveto +85.865789 154.99562 86.135320 154.93052 86.440010 154.93051 curveto +86.942611 154.93052 87.322819 155.08677 87.580635 155.39926 curveto +87.838443 155.70916 87.967349 156.16619 87.967354 156.77036 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +92.287666 157.17270 moveto +92.287663 156.65187 92.179590 156.24822 91.963448 155.96176 curveto +91.749903 155.67531 91.449122 155.53208 91.061104 155.53207 curveto +90.675685 155.53208 90.374904 155.67531 90.158760 155.96176 curveto +89.945217 156.24822 89.838446 156.65187 89.838448 157.17270 curveto +89.838446 157.69093 89.945217 158.09327 90.158760 158.37973 curveto +90.374904 158.66619 90.675685 158.80942 91.061104 158.80942 curveto +91.449122 158.80942 91.749903 158.66619 91.963448 158.37973 curveto +92.179590 158.09327 92.287663 157.69093 92.287666 157.17270 curveto +93.006416 158.86801 moveto +93.006412 159.61280 92.841048 160.16619 92.510323 160.52817 curveto +92.179590 160.89275 91.673080 161.07504 90.990791 161.07504 curveto +90.738185 161.07504 90.499904 161.05551 90.275948 161.01645 curveto +90.051988 160.97999 89.834540 160.92270 89.623604 160.84457 curveto +89.623604 160.14536 lineto +89.834540 160.25994 90.042873 160.34457 90.248604 160.39926 curveto +90.454331 160.45395 90.663966 160.48129 90.877510 160.48129 curveto +91.348862 160.48129 91.701726 160.35759 91.936104 160.11020 curveto +92.170475 159.86541 92.287663 159.49431 92.287666 158.99692 curveto +92.287666 158.64145 lineto +92.139225 158.89926 91.949121 159.09197 91.717354 159.21957 curveto +91.485580 159.34718 91.208237 159.41098 90.885323 159.41098 curveto +90.348863 159.41098 89.916571 159.20655 89.588448 158.79770 curveto +89.260322 158.38885 89.096260 157.84718 89.096260 157.17270 curveto +89.096260 156.49562 89.260322 155.95265 89.588448 155.54379 curveto +89.916571 155.13494 90.348863 154.93052 90.885323 154.93051 curveto +91.208237 154.93052 91.485580 154.99432 91.717354 155.12192 curveto +91.949121 155.24953 92.139225 155.44223 92.287666 155.70004 curveto +92.287666 155.03598 lineto +93.006416 155.03598 lineto +93.006416 158.86801 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +94.486885 155.03598 moveto +95.205635 155.03598 lineto +95.205635 159.41098 lineto +94.486885 159.41098 lineto +94.486885 155.03598 lineto +94.486885 153.33286 moveto +95.205635 153.33286 lineto +95.205635 154.24301 lineto +94.486885 154.24301 lineto +94.486885 153.33286 lineto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +100.34235 156.77036 moveto +100.34235 159.41098 lineto +99.623604 159.41098 lineto +99.623604 156.79379 lineto +99.623600 156.37973 99.542871 156.06984 99.381416 155.86411 curveto +99.219955 155.65838 98.977767 155.55552 98.654854 155.55551 curveto +98.266831 155.55552 97.960841 155.67921 97.736885 155.92661 curveto +97.512925 156.17400 97.400946 156.51124 97.400948 156.93832 curveto +97.400948 159.41098 lineto +96.678291 159.41098 lineto +96.678291 155.03598 lineto +97.400948 155.03598 lineto +97.400948 155.71567 lineto +97.572821 155.45265 97.774644 155.25604 98.006416 155.12582 curveto +98.240789 154.99562 98.510320 154.93052 98.815010 154.93051 curveto +99.317611 154.93052 99.697819 155.08677 99.955635 155.39926 curveto +100.21344 155.70916 100.34235 156.16619 100.34235 156.77036 curveto +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +105.52595 157.04379 moveto +105.52595 157.39536 lineto +102.22126 157.39536 lineto +102.25251 157.89015 102.40095 158.26775 102.66657 158.52817 curveto +102.93480 158.78598 103.30720 158.91489 103.78376 158.91489 curveto +104.05980 158.91489 104.32673 158.88103 104.58454 158.81332 curveto +104.84495 158.74562 105.10277 158.64405 105.35798 158.50864 curveto +105.35798 159.18832 lineto +105.10016 159.29770 104.83584 159.38103 104.56501 159.43832 curveto +104.29417 159.49562 104.01943 159.52426 103.74079 159.52426 curveto +103.04287 159.52426 102.48949 159.32114 102.08064 158.91489 curveto +101.67438 158.50864 101.47126 157.95916 101.47126 157.26645 curveto +101.47126 156.55031 101.66397 155.98260 102.04939 155.56332 curveto +102.43740 155.14145 102.95954 154.93052 103.61579 154.93051 curveto +104.20433 154.93052 104.66917 155.12062 105.01032 155.50082 curveto +105.35407 155.87843 105.52594 156.39275 105.52595 157.04379 curveto +104.80720 156.83286 moveto +104.80199 156.43963 104.69131 156.12583 104.47517 155.89145 curveto +104.26162 155.65708 103.97777 155.53989 103.62360 155.53989 curveto +103.22256 155.53989 102.90095 155.65317 102.65876 155.87973 curveto +102.41918 156.10630 102.28115 156.42531 102.24470 156.83676 curveto +104.80720 156.83286 lineto +fill +grestore +grestore +grestore +gsave [0.10525300 0.0000000 0.0000000 0.10824800 21.085250 83.537250] concat +gsave [2.8111660 0.0000000 0.0000000 2.8111660 777.98060 -1529.4070] concat +gsave [0.45302200 0.021941210 0.0000000 0.45982500 -103.55610 277.09760] concat +gsave [0.90340300 -0.42879300 0.81512300 0.57928800 0.0000000 0.0000000] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-1029.4145 785.48676 moveto +-987.83543 785.48676 -954.36205 836.45701 -954.36205 899.76984 curveto +-954.36205 963.08266 -987.83543 1014.0529 -1029.4145 1014.0529 curveto +-1070.9935 1014.0529 -1104.4669 963.08266 -1104.4669 899.76984 curveto +-1104.4669 836.45701 -1070.9935 785.48676 -1029.4145 785.48676 curveto +closepath +fill +grestore +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-233.62620 868.73161 moveto +-249.74825 870.62444 -263.21231 880.69710 -277.98594 886.65648 curveto +-299.14699 896.73853 -320.38325 906.73619 -341.28245 917.32536 curveto +-351.21372 923.34601 -350.16187 937.97686 -341.33408 944.46237 curveto +-292.07621 980.08233 -242.20158 1015.0358 -192.50120 1050.1066 curveto +-175.11022 1059.8082 -152.81608 1058.6073 -135.91987 1048.3874 curveto +-107.94024 1035.0901 -79.728672 1022.1189 -52.215528 1007.9567 curveto +-42.466101 1002.5533 -42.559433 988.33915 -50.839603 981.64806 curveto +-70.973454 966.23411 -92.249089 952.11287 -112.79652 937.16169 curveto +-142.66108 916.18094 -172.21562 894.65156 -202.41505 874.21218 curveto +-211.87394 869.07534 -223.03705 867.94578 -233.62620 868.73161 curveto +closepath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-233.68687 864.77149 moveto +-255.44119 868.65777 -274.03176 881.58436 -294.15667 889.98209 curveto +-311.57045 898.65062 -329.71682 906.19588 -346.21800 916.40403 curveto +-357.45519 926.38492 -351.44550 945.55121 -338.71528 951.27719 curveto +-290.09581 985.95567 -241.56486 1020.8620 -192.33540 1054.6148 curveto +-172.14105 1065.1561 -147.47770 1060.8370 -128.63311 1049.4222 curveto +-101.41875 1036.2313 -73.540925 1024.0485 -47.285804 1009.1334 curveto +-36.006186 999.87428 -40.912891 980.63594 -53.405731 974.90744 curveto +-102.57044 939.59978 -151.74102 904.16585 -201.79968 870.20477 curveto +-211.69912 865.41489 -222.81133 864.17867 -233.68687 864.77149 curveto +closepath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-233.72754 860.83701 moveto +-260.12444 866.43154 -283.09218 881.48812 -307.63145 892.02343 curveto +-322.19951 899.29754 -337.75850 905.48859 -350.57406 915.57711 curveto +-361.98018 928.42531 -353.73425 949.38907 -339.19397 955.91673 curveto +-290.35140 990.62600 -241.67223 1025.6577 -192.01732 1059.1134 curveto +-169.70706 1069.6871 -143.46215 1063.4288 -123.13927 1051.2611 curveto +-96.230292 1038.0562 -68.091354 1026.5553 -42.977164 1010.2442 curveto +-31.353682 998.09375 -38.511194 976.90166 -52.915942 970.41157 curveto +-102.49631 935.26610 -151.39993 898.96084 -202.29154 865.80560 curveto +-212.18496 861.53639 -223.04852 860.44790 -233.72754 860.83701 curveto +closepath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-234.18606 856.97474 moveto +-264.68110 864.36986 -291.70307 881.08009 -320.13163 893.78099 curveto +-332.42238 900.13661 -346.33197 905.41100 -355.48477 916.07159 curveto +-365.64049 931.32943 -356.00971 952.69145 -340.40194 959.99119 curveto +-291.26417 994.69628 -242.61903 1030.1571 -192.40481 1063.2872 curveto +-168.15553 1073.9241 -140.32506 1066.4349 -118.56435 1053.6075 curveto +-91.870878 1040.7356 -64.470866 1028.9066 -39.654806 1012.5997 curveto +-27.001569 998.10400 -35.013614 974.10207 -51.592306 966.44349 curveto +-101.70710 931.04406 -150.92771 894.11701 -202.85427 861.47334 curveto +-212.81594 857.62578 -223.58216 856.61602 -234.18606 856.97474 curveto +closepath +fill +grestore +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-234.63878 853.11788 moveto +-268.84654 862.36486 -299.82050 880.23208 -331.66605 895.29160 curveto +-345.36149 902.02146 -362.40876 910.75903 -363.42003 928.05538 curveto +-364.38546 944.35844 -353.08395 958.68797 -339.13261 965.83765 curveto +-290.20884 1000.1525 -242.18172 1035.9268 -191.68585 1067.7961 curveto +-165.43371 1078.0705 -136.35518 1069.0082 -113.11707 1055.5647 curveto +-86.901854 1042.6444 -59.590961 1031.2952 -35.732527 1014.2116 curveto +-23.028467 997.79592 -31.396128 971.92861 -49.388777 963.14913 curveto +-99.721954 927.43942 -149.40255 890.68554 -201.60753 857.74288 curveto +-212.20564 854.00586 -223.43809 852.67811 -234.63878 853.11788 curveto +closepath +fill +grestore +grestore +gsave [0.41150600 -0.039690940 0.0000000 0.42998500 -113.05430 239.93450] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-311.96457 1015.1920 moveto +-311.96457 1023.9854 -321.62884 1031.1221 -333.53659 1031.1221 curveto +-345.44435 1031.1221 -355.10861 1023.9854 -355.10861 1015.1920 curveto +-355.10861 1006.3986 -345.44435 999.26191 -333.53659 999.26191 curveto +-321.62884 999.26191 -311.96457 1006.3986 -311.96457 1015.1920 curveto +closepath +fill +grestore +grestore +gsave [0.41150600 0.0078638570 0.0000000 0.42998500 -44.246080 309.76670] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-311.96457 1015.1920 moveto +-311.96457 1023.9854 -321.62884 1031.1221 -333.53659 1031.1221 curveto +-345.44435 1031.1221 -355.10861 1023.9854 -355.10861 1015.1920 curveto +-355.10861 1006.3986 -345.44435 999.26191 -333.53659 999.26191 curveto +-321.62884 999.26191 -311.96457 1006.3986 -311.96457 1015.1920 curveto +closepath +fill +grestore +grestore +gsave [0.41150600 -0.039690940 0.0000000 0.42998500 0.48040800 274.07220] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-311.96457 1015.1920 moveto +-311.96457 1023.9854 -321.62884 1031.1221 -333.53659 1031.1221 curveto +-345.44435 1031.1221 -355.10861 1023.9854 -355.10861 1015.1920 curveto +-355.10861 1006.3986 -345.44435 999.26191 -333.53659 999.26191 curveto +-321.62884 999.26191 -311.96457 1006.3986 -311.96457 1015.1920 curveto +closepath +fill +grestore +grestore +gsave [0.51438300 0.0000000 0.0000000 0.51517700 -93.069760 213.13490] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-208.01276 671.68312 moveto +-209.30114 671.80549 -210.51183 672.16564 -211.60651 672.71437 curveto +-215.92559 674.87939 -308.61010 721.30723 -311.16901 722.58937 curveto +-311.44624 722.71257 -311.71713 722.84679 -311.98151 722.99562 curveto +-311.98747 722.99861 -312.54401 723.27687 -312.54401 723.27687 curveto +-312.54401 723.29868 -312.51321 723.37920 -312.51276 723.40187 curveto +-316.31509 725.89843 -318.70026 731.07225 -318.70026 738.80812 curveto +-318.70026 885.71437 lineto +-318.70026 902.46489 -307.87103 924.03502 -294.45026 934.05812 curveto +-183.85651 1016.6519 lineto +-177.42445 1021.4556 -171.65405 1022.6138 -167.32526 1020.7769 curveto +-167.30966 1020.7890 -167.27804 1020.8592 -167.26276 1020.8706 curveto +-166.79401 1020.6519 lineto +-166.73151 1020.6206 lineto +-166.71145 1020.6106 -166.68899 1020.5996 -166.66901 1020.5894 curveto +-66.731506 970.62062 lineto +-62.350318 968.43068 -59.637754 962.87089 -59.637756 954.49562 curveto +-59.637756 807.62062 lineto +-59.637756 790.87010 -70.435740 769.29998 -83.856506 759.27687 curveto +-194.45026 676.68312 lineto +-199.48304 672.92445 -204.14760 671.31600 -208.01276 671.68312 curveto +closepath +fill +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +27.924999 setlinewidth +1 setlinejoin +1 setlinecap +newpath +-208.01276 671.68312 moveto +-209.30114 671.80549 -210.51183 672.16564 -211.60651 672.71437 curveto +-215.92559 674.87939 -308.61010 721.30723 -311.16901 722.58937 curveto +-311.44624 722.71257 -311.71713 722.84679 -311.98151 722.99562 curveto +-311.98747 722.99861 -312.54401 723.27687 -312.54401 723.27687 curveto +-312.54401 723.29868 -312.51321 723.37920 -312.51276 723.40187 curveto +-316.31509 725.89843 -318.70026 731.07225 -318.70026 738.80812 curveto +-318.70026 885.71437 lineto +-318.70026 902.46489 -307.87103 924.03502 -294.45026 934.05812 curveto +-183.85651 1016.6519 lineto +-177.42445 1021.4556 -171.65405 1022.6138 -167.32526 1020.7769 curveto +-167.30966 1020.7890 -167.27804 1020.8592 -167.26276 1020.8706 curveto +-166.79401 1020.6519 lineto +-166.73151 1020.6206 lineto +-166.71145 1020.6106 -166.68899 1020.5996 -166.66901 1020.5894 curveto +-66.731506 970.62062 lineto +-62.350318 968.43068 -59.637754 962.87089 -59.637756 954.49562 curveto +-59.637756 807.62062 lineto +-59.637756 790.87010 -70.435740 769.29998 -83.856506 759.27687 curveto +-194.45026 676.68312 lineto +-199.48304 672.92445 -204.14760 671.31600 -208.01276 671.68312 curveto +closepath +stroke +grestore +gsave [0.51438300 0.0000000 0.0000000 0.51517700 -93.069760 213.13490] concat +gsave +0.0000000 0.0000000 0.0000000 setrgbcolor +newpath +-208.01275 671.68311 moveto +-209.30113 671.80548 -210.51182 672.16563 -211.60650 672.71436 curveto +-215.92558 674.87938 -308.61010 721.30722 -311.16901 722.58936 curveto +-311.44624 722.71256 -311.71713 722.84678 -311.98151 722.99561 curveto +-311.98747 722.99860 -312.54401 723.27686 -312.54401 723.27686 curveto +-312.54401 723.29867 -312.51321 723.37919 -312.51276 723.40186 curveto +-316.31509 725.89842 -318.70026 731.07224 -318.70026 738.80811 curveto +-318.70026 885.71436 lineto +-318.70026 902.46488 -307.87103 924.03501 -294.45026 934.05811 curveto +-183.85650 1016.6519 lineto +-177.42444 1021.4555 -171.65404 1022.6138 -167.32525 1020.7769 curveto +-167.30965 1020.7889 -167.27804 1020.8592 -167.26275 1020.8706 curveto +-166.79400 1020.6519 lineto +-166.73150 1020.6206 lineto +-166.71144 1020.6106 -166.68899 1020.5995 -166.66900 1020.5894 curveto +-66.731506 970.62061 lineto +-62.350316 968.43067 -59.637756 962.87088 -59.637756 954.49561 curveto +-59.637756 807.62061 lineto +-59.637756 790.87009 -70.435736 769.29997 -83.856506 759.27686 curveto +-194.45025 676.68311 lineto +-199.48304 672.92444 -204.14760 671.31599 -208.01275 671.68311 curveto +closepath +fill +grestore +grestore +gsave [0.51438300 0.0000000 0.0000000 0.51517700 -10.408570 186.85020] concat +gsave +<< +/ShadingType 2 +/ColorSpace /DeviceRGB +/Coords [-134.50366 557.39575 -80.057777 709.28973] +/Extend [true true] +/Domain [0 1] +/Function << +/FunctionType 3 +/Functions +[ +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.85098040 0.85882354 0.90196079] +/C1 [0.69803923 0.71372551 0.87450981] +/N 1 +>> +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.69803923 0.71372551 0.87450981] +/C1 [0.47058824 0.49803922 0.70196080] +/N 1 +>> +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.47058824 0.49803922 0.70196080] +/C1 [0.28235295 0.31372550 0.57647061] +/N 1 +>> +<< +/FunctionType 2 +/Domain [0 1] +/C0 [0.28235295 0.31372550 0.57647061] +/C1 [0.18431373 0.19215687 0.40784314] +/N 1 +>> +] +/Domain [0 1] +/Bounds [ 0.036697246 0.44082990 0.94495416 ] +/Encode [ 0 1 0 1 0 1 0 1 ] +>> +>> +newpath +-355.16960 727.65242 moveto +-244.56828 810.25344 lineto +-231.14751 820.27654 -220.34307 841.83076 -220.34307 858.58128 curveto +-220.34307 1005.4816 lineto +-220.34307 1013.8569 -223.04170 1019.4034 -227.42288 1021.5934 curveto +-327.97801 1071.8559 lineto +-341.39878 1061.8328 -473.23424 791.00014 -473.23424 774.24962 curveto +-473.23424 774.24962 -376.69370 725.87888 -372.31499 723.68397 curveto +-367.93629 721.48907 -361.87998 722.64086 -355.16960 727.65242 curveto +closepath +clip +gsave [0.85095900 0.0000000 0.0000000 1.1751450 -306.65450 88.943090] concat +shfill +grestore +grestore +0.0000000 0.0000000 0.0000000 setrgbcolor +[] 0 setdash +0.0000000 setlinewidth +0 setlinejoin +1 setlinecap +newpath +-355.16960 727.65242 moveto +-244.56828 810.25344 lineto +-231.14751 820.27654 -220.34307 841.83076 -220.34307 858.58128 curveto +-220.34307 1005.4816 lineto +-22... [truncated message content]
Revision: 4608 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4608&view=rev Author: astraw Date: 2007年12月04日 23:33:05 -0800 (2007年12月04日) Log Message: ----------- initial commit of new demo Added Paths: ----------- trunk/toolkits/mplsizer/demo/demo_gridsizer2.py Copied: trunk/toolkits/mplsizer/demo/demo_gridsizer2.py (from rev 2707, trunk/toolkits/mplsizer/demo/demo_gridsizer.py) =================================================================== --- trunk/toolkits/mplsizer/demo/demo_gridsizer2.py (rev 0) +++ trunk/toolkits/mplsizer/demo/demo_gridsizer2.py 2007年12月05日 07:33:05 UTC (rev 4608) @@ -0,0 +1,54 @@ +import pylab +import numpy + +# Demonstration of MplGridSizer use. + +def labelax(ax,label): + ax.text(0.5,0.5,label, + horizontalalignment='center', + verticalalignment='center', + transform = ax.transAxes, + ) + +fig = pylab.figure(figsize=(8,6)) + +# Axes placement doesn't matter, but to make sure matplotlib doesn't +# simply return a previous Axes instance with the same bounding box, +# assign a different label to each Axes instance. + +import matplotlib.toolkits.mplsizer as mplsizer + +frame = mplsizer.MplSizerFrame( fig ) +sizer = mplsizer.MplBoxSizer()#orientation='horizontal') +frame.SetSizer(sizer)#,expand=1) + +x = numpy.linspace(0,2*numpy.pi,100) +y = numpy.sin(1*x+numpy.pi/2) + .5*numpy.sin(3*x) +cols = 3 +rows = 4 +hsizer = mplsizer.MplGridSizer(cols=cols)#,vgap_inch=0.1) +for r in range(rows): + for c in range(cols): + if r==1 and c==1: + # This is how to add an empty element. + ax = mplsizer.MplSizerElement() + else: + + # The unique labels are required to generate separate Axes instances. + ax = fig.add_axes([0,0,1,1],label='row %d col %d'%(r,c)) + + ax.plot(x,y) + labelax(ax,'%d,%d'%(r,c)) + if not (r==2 and c==2): + # Draw tick labels on one Axes instance. + pylab.setp(ax,'xticks',[]) + pylab.setp(ax,'yticks',[]) + + # The "border" value below was hand-tuned to not overlap. + hsizer.Add(ax,name='row %d, col %d'%(r,c),all=1,border=0.3,expand=1) + +sizer.Add(hsizer,all=1,bottom=1,border=0.25,expand=1,option=1) + +frame.Layout() # Trigger the layout within mplsizer. + +pylab.show() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4607 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4607&view=rev Author: jdh2358 Date: 2007年12月04日 18:47:33 -0800 (2007年12月04日) Log Message: ----------- updated win32 requirements Modified Paths: -------------- trunk/py4science/doc/requirements.txt Modified: trunk/py4science/doc/requirements.txt =================================================================== --- trunk/py4science/doc/requirements.txt 2007年12月05日 02:47:07 UTC (rev 4606) +++ trunk/py4science/doc/requirements.txt 2007年12月05日 02:47:33 UTC (rev 4607) @@ -145,18 +145,31 @@ Microsoft Windows ================= -- Install the latest windows `python MSI installer`_ from +- Install the latest windows `python MSI installer`_ from the + python.org site. -- install the win32com_ extensions. IPython needs these to set up the start menu properly and they have lots of useful goodies for windows users anyhow, like the abiliy to read and write MS Office documents via the COM API. +- install the win32com_ extensions. IPython needs these to set up the + start menu properly and they have lots of useful goodies for windows + users anyhow, like the abiliy to read and write MS Office documents + via the COM API. -- ipython: grab the latest win32 exe installer from the `ipython distributions`_ page +- ipython: grab the latest win32 exe installer from the `ipython + distributions`_ page -- numpy: grab the latest exe or msi installer for your version of python at `numpy download`_ +- numpy: grab the latest exe or msi installer for your version of + python at `numpy download`_ -- scipy: grab the latest exe or msi installer from the "Binary installation for Windows" distribution from the `scipy download`_ page. +- scipy: grab the latest exe or msi installer from the "Binary + installation for Windows" distribution from the `scipy download`_ + page. -- matplotlib: grab the latest exe from the `matplotlib download`_ page +- matplotlib: grab the latest exe from the `matplotlib download`_ + page. matplotlib requires the msvcp71.dll library, which you can + download from `dll_files`. You will need to unzip the archive and + drag the dll into c:\\windows\\system32 + + .. _`python MSI installer`: http://www.python.org/download/releases/2.5.1/ .. _win32com: http://sourceforge.net/project/showfiles.php?group_id=78018&package_id=79063&release_id=449591 @@ -169,6 +182,8 @@ .. _`matplotlib download`: http://sourceforge.net/project/showfiles.php?group_id=80706&package_id=82474&release_id=558083 +.. _`dll files`: http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71 + Optional packages ================= This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4606 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4606&view=rev Author: jdh2358 Date: 2007年12月04日 18:47:07 -0800 (2007年12月04日) Log Message: ----------- updated install doc Modified Paths: -------------- trunk/matplotlib/INSTALL Modified: trunk/matplotlib/INSTALL =================================================================== --- trunk/matplotlib/INSTALL 2007年12月05日 02:31:36 UTC (rev 4605) +++ trunk/matplotlib/INSTALL 2007年12月05日 02:47:07 UTC (rev 4606) @@ -1,42 +1,42 @@ + INTRODUCTION - matplotlib requires at a minimum python 2.2+, Numeric or numarray - and freetype. To get the most out of matplotlib, you will want to - build some of the optional GUI and image extensions, discussed - below. Matplotlib is known to work on linux, unix, win32 and OS X + matplotlib requires at a minimum python 2.3, numpy, libpng and + freetype. To get the most out of matplotlib, you will want to build + some of the optional GUI and image extensions, discussed below. + Matplotlib is known to work on linux, unix, win32 and OS X platforms. There are two kinds of matplotlib backends: vector based and raster - based. The vector based backends, SVG and PS, produce ASCII text - output files *.svg and *.ps. The core raster based renderer is the - http://antigrain.com (agg) backend. This is a high quality 2D - library that supports fast antialiasing, alpha blending and much - more. If you want to produce PNGs or GUI images that support all of - matplotlib's features, you should compile matplotlib with agg - support and use one of the GUI agg backends: GTKAgg, WXAgg, TkAgg or - FLTKAgg. + based. The vector based backends, SVG, PDF and PS, produce ASCII + text output files *.svg, *.pdf and *.ps. The core raster based + renderer is the http://antigrain.com (agg) backend. This is a high + quality 2D library that supports fast antialiasing, alpha blending + and much more. If you want to produce PNGs or GUI images that + support all of matplotlib's features, you should compile matplotlib + with agg support and use one of the GUI agg backends: GTKAgg, WXAgg, + TkAgg or FLTKAgg. COMPILING - You will need to have recent versions of freetype (>= 2.1.7), libpng - and zlib installed on your system. If you are using a package - manager, also make sure the devel versions of these packages are - also installed (eg freetype-devel). + You will need to have recent versions of freetype, libpng and zlib + installed on your system. If you are using a package manager, also + make sure the devel versions of these packages are also installed + (eg freetype-devel). - The top of setup.py contains some flags controlling which backends - will be built. If you want to use a GUI backend, you will need - either Tkinter, pygtk or wxpython installed on your system, from src - or from a package manager including the devel packages. You can - choose which backends to enable by setting the flags in setup.py, - but the 'auto' flags will work in most cases, as matplotlib tries to - find a GUI and build the backend acccordingly. If you know you - don't want a particular backend or extension, you can set that flag - to False. + matplotlib ships with a setup.cfg.template which you can use to + customize the build process. Copy it to setup.cfg if you need to + customize something. See that files for details of the parameters + you can set. - As discussed above, most users will want to set 'BUILD_AGG = 1' and - one or more of the GUI backends to True. Exceptions to this are if - you know you don't need a GUI (eg a web server) or you only want to - produce vector graphics. + If you want to use a GUI backend, you will need either Tkinter, + pygtk or wxpython installed on your system, from src or from a + package manager including the devel packages. You can choose which + backends to enable by setting the flags in setup.py, but the default + is to automatically detect your installed GUIs and build support for + them. If you later find that you did not have a GUI toolkit like + pygtk installed when you built matplotlib, but now want it, you will + need to install the toolkit and rebuild matplotlib. If you have installed prerequisites to nonstandard places and need to inform matplotlib where they are, edit setupext.py an add the @@ -45,13 +45,6 @@ /some/path/include/somheader.h, put /some/path in the basedir list for your platform. - matplotlib works with with Numeric or numarray. At compile time, - setup.py will look for both packages and compile the appropriate - extensions into matplotlib. At runtime, the correct extension code - will be chosen based on your numerix setting in matplotlibrc. If - you want to be able to use either Numeric or numarray efficiently - with matplotlib, it is important that you have *both* present and in - your PYTHONPATH when you compile matplotlib. Once you have everything above set to your liking, just do the usual thing @@ -62,20 +55,19 @@ WINDOWS If you don't already have python installed, you may want to consider - using the enthought edition of python, which has (old) scipy, Numeric, and + using the enthought edition of python, which has scipy, numpy, and wxpython, plus a lot of other goodies, preinstalled - http://www.enthought.com/python . With the enthought edition of python + matplotlib installer, the following backends should work - out of the box: agg, wx, wxagg, tkagg, ps and svg. + out of the box: agg, wx, wxagg, tkagg, ps, pdf and svg. For standard python installations, you will also need to install - either numpy, Numeric or numarray in addition to the matplotlib installer. - With a standard python + Numeric/numarray + matplotlib, the - following backends should work on windows: agg, tkagg, ps, svg. If - you want others, eg a wx, wxagg, gtk or gtkagg, you'll need to - install the requisite GUI toolkits. This is fairly easy, as both - wxpython and pygtk come with windows friendly installers. The - latter includes an additional requirement of the GTK runtime. + either numpy, in addition to the matplotlib installer. On some + systems you will also need to download msvcp71.dll library, which + you can download from + http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71 or other + sites. You will need to unzip the archive and drag the dll into + c:\windows\system32 All of the GUI backends run on windows, but TkAgg is probably the best for interactive use from the standard python shell or ipython. @@ -113,18 +105,9 @@ DEBIAN - Vittorio Palmisano <re...@em...> maintails the debian - packages at http://mentors.debian.net + matplotlib is part of debian (and ubuntu) so you shoule be able to + apt-get install it. - - * add this lines to your /etc/apt/sources.list: - deb http://anakonda.altervista.org/debian packages/ - deb-src http://anakonda.altervista.org/debian sources/ - - * then run: - # apt-get update - # apt-get install python-matplotlib python-matplotlib-doc - FREEBSD http://www.freshports.org/math/py-matplotlib/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4605 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4605&view=rev Author: jswhit Date: 2007年12月04日 18:31:36 -0800 (2007年12月04日) Log Message: ----------- better way to handle backwards compatibility in axes.get_position() Modified Paths: -------------- trunk/toolkits/basemap/examples/contour_demo.py trunk/toolkits/basemap/examples/panelplot.py trunk/toolkits/basemap/examples/plotmap.py trunk/toolkits/basemap/examples/plotmap_masked.py trunk/toolkits/basemap/examples/plotmap_oo.py trunk/toolkits/basemap/examples/plotprecip.py trunk/toolkits/basemap/examples/pnganim.py trunk/toolkits/basemap/examples/simpletest_oo.py trunk/toolkits/basemap/examples/test.py Modified: trunk/toolkits/basemap/examples/contour_demo.py =================================================================== --- trunk/toolkits/basemap/examples/contour_demo.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/contour_demo.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -21,10 +21,12 @@ x, y = m(lons, lats) CS = m.contour(x,y,hgt,15,linewidths=0.5,colors='k') CS = m.contourf(x,y,hgt,15,cmap=cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +# setup colorbar axes instance. +# for matplotlib 0.91 and earlier, could do l,b,w,h = ax.get_position() +# for post 0.91, pos = ax.get_position(); l,b,w,h = pos.bounds +# this works for both. +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes colorbar(drawedges=True, cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -49,10 +51,8 @@ x, y = m(lons, lats) CS = m.contour(x,y,hgt,15,linewidths=0.5,colors='k') CS = m.contourf(x,y,hgt,15,cmap=cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes colorbar(drawedges=True, cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -77,10 +77,8 @@ x, y = m(lons, lats) CS = m.contour(x,y,hgt,15,linewidths=0.5,colors='k') CS = m.contourf(x,y,hgt,15,cmap=cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes colorbar(drawedges=True, cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -105,10 +103,8 @@ x, y = m(lons, lats) CS = m.contour(x,y,hgt,15,linewidths=0.5,colors='k') CS = m.contourf(x,y,hgt,15,cmap=cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes colorbar(drawedges=True, cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -134,10 +130,8 @@ x, y = m(lons, lats) CS = m.contour(x,y,hgt,15,linewidths=0.5,colors='k') CS = m.contourf(x,y,hgt,15,cmap=cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes colorbar(drawedges=True, cax=cax) # draw colorbar axes(ax) # make the original axes current again Modified: trunk/toolkits/basemap/examples/panelplot.py =================================================================== --- trunk/toolkits/basemap/examples/panelplot.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/panelplot.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -27,10 +27,8 @@ CS = mnh.contour(xnh,ynh,hgt,15,linewidths=0.5,colors='k') CS = mnh.contourf(xnh,ynh,hgt,15,cmap=P.cm.Spectral) # colorbar on bottom. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = P.axes([l, b-0.05, w, 0.025]) # setup colorbar axes P.colorbar(cax=cax, orientation='horizontal',ticks=CS.levels[0::4]) # draw colorbar P.axes(ax) # make the original axes current again @@ -52,11 +50,8 @@ CS = msh.contour(xsh,ysh,hgt,15,linewidths=0.5,colors='k') CS = msh.contourf(xsh,ysh,hgt,15,cmap=P.cm.Spectral) # colorbar on bottom. -ax.apply_aspect() -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = P.axes([l, b-0.05, w, 0.025]) # setup colorbar axes P.colorbar(cax=cax,orientation='horizontal',ticks=MultipleLocator(320)) # draw colorbar P.axes(ax) # make the original axes current again @@ -78,10 +73,8 @@ CS = mnh.contour(xnh,ynh,hgt,15,linewidths=0.5,colors='k') CS = mnh.contourf(xnh,ynh,hgt,15,cmap=P.cm.RdBu) # colorbar on right -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = P.axes([l+w+0.025, b, 0.025, h]) # setup colorbar axes P.colorbar(cax=cax, ticks=MultipleLocator(160), format='%4i') # draw colorbar P.axes(ax) # make the original axes current again @@ -95,10 +88,8 @@ CS = msh.contour(xsh,ysh,hgt,15,linewidths=0.5,colors='k') CS = msh.contourf(xsh,ysh,hgt,15,cmap=P.cm.RdBu) # colorbar on right. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = P.axes([l+w+0.025, b, 0.025, h]) # setup colorbar axes P.colorbar(cax=cax, ticks=MultipleLocator(160), format='%4i') # draw colorbar P.axes(ax) # make the original axes current again Modified: trunk/toolkits/basemap/examples/plotmap.py =================================================================== --- trunk/toolkits/basemap/examples/plotmap.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/plotmap.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -32,10 +32,11 @@ # plot image over map with imshow. im = m.imshow(topodat,cm.jet) # setup colorbar axes instance. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +# for matplotlib 0.91 and earlier, could do l,b,w,h = ax.get_position() +# for post 0.91, pos = ax.get_position(); l,b,w,h = pos.bounds +# this works for both. +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again Modified: trunk/toolkits/basemap/examples/plotmap_masked.py =================================================================== --- trunk/toolkits/basemap/examples/plotmap_masked.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/plotmap_masked.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -40,10 +40,11 @@ # plot image over map with imshow. im = m.imshow(topodatm,palette,norm=colors.normalize(vmin=0.0,vmax=3000.0,clip=False)) # setup colorbar axes instance. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +# for matplotlib 0.91 and earlier, could do l,b,w,h = ax.get_position() +# for post 0.91, pos = ax.get_position(); l,b,w,h = pos.bounds +# this works for both. +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again Modified: trunk/toolkits/basemap/examples/plotmap_oo.py =================================================================== --- trunk/toolkits/basemap/examples/plotmap_oo.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/plotmap_oo.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -44,10 +44,12 @@ topodat,x,y = m.transform_scalar(topoin,lons,lats,nx,ny,returnxy=True) # plot image over map with imshow. im = m.imshow(topodat,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +# setup colorbar axes instance. +# for matplotlib 0.91 and earlier, could do l,b,w,h = ax.get_position() +# for post 0.91, pos = ax.get_position(); l,b,w,h = pos.bounds +# this works for both. +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = fig.add_axes([l+w+0.075, b, 0.05, h],frameon=False) # setup colorbar axes fig.colorbar(im, cax=cax) # draw colorbar # plot blue dot on boulder, colorado and label it as such. Modified: trunk/toolkits/basemap/examples/plotprecip.py =================================================================== --- trunk/toolkits/basemap/examples/plotprecip.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/plotprecip.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -51,10 +51,8 @@ clevs = [0,1,2.5,5,7.5,10,15,20,30,40,50,70,100,150,200,250,300,400,500,600,750] cs = m.contourf(x,y,data,clevs,cmap=cm.s3pcpn) # new axis for colorbar. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = pylab.axes([l+w+0.025, b, 0.025, h]) # setup colorbar axes # draw colorbar. pylab.colorbar(cs, cax, format='%g', ticks=clevs, drawedges=False) @@ -79,10 +77,8 @@ im2 = copy.copy(im) im2.set_cmap(cm.s3pcpn_l) # new axis for colorbar. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = pylab.axes([l+w+0.025, b, 0.025, h]) # setup colorbar axes # using im2, not im (hack to prevent colors from being # too compressed at the low end on the colorbar - results Modified: trunk/toolkits/basemap/examples/pnganim.py =================================================================== --- trunk/toolkits/basemap/examples/pnganim.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/pnganim.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -8,34 +8,8 @@ import pylab from numpy import ma import datetime, sys, time, subprocess -from matplotlib.toolkits.basemap import Basemap, shiftgrid, NetCDFFile +from matplotlib.toolkits.basemap import Basemap, shiftgrid, NetCDFFile, num2date -hrsgregstart = 13865688 # hrs from 00010101 to 15821015 in Julian calendar. -# times in many datasets use mixed Gregorian/Julian calendar, datetime -# module uses a proleptic Gregorian calendar. So, I use datetime to compute -# hours since start of Greg. calendar (15821015) and add this constant to -# get hours since 1-Jan-0001 in the mixed Gregorian/Julian calendar. -gregstart = datetime.datetime(1582,10,15) # datetime.datetime instance - -def dateto_hrs_since_day1CE(curdate): - """given datetime.datetime instance, compute hours since 1-Jan-0001""" - if curdate < gregstart: - msg = 'date must be after start of gregorian calendar (15821015)!' - raise ValueError, msg - difftime = curdate-gregstart - hrsdiff = 24*difftime.days + difftime.seconds/3600 - return hrsdiff+hrsgregstart - -def hrs_since_day1CE_todate(hrs): - """return datetime.datetime instance given hours since 1-Jan-0001""" - if hrs < 0.0: - msg = "hrs must be positive!" - raise ValueError, msg - delta = datetime.timedelta(hours=1) - hrs_sincegreg = hrs - hrsgregstart - curdate = gregstart + hrs_sincegreg*delta - return curdate - # times for March 1993 'storm of the century' YYYYMMDDHH1 = '1993031000' YYYYMMDDHH2 = '1993031700' @@ -65,13 +39,11 @@ print datav.variables.keys() latitudes = data.variables['lat'][:] longitudes = data.variables['lon'][:].tolist() -times = data.variables['time'][:] +times = data.variables['time'] +# convert numeric time values to datetime objects. +fdates = num2date(times[:],times.units) # put times in YYYYMMDDHH format. -dates=[] -for t in times: - t = t*24 - fdate = hrs_since_day1CE_todate(int(t)) - dates.append(fdate.strftime('%Y%m%d%H')) +dates = [fdate.strftime('%Y%m%d%H') for fdate in fdates] if YYYYMMDDHH1 not in dates or YYYYMMDDHH2 not in dates: raise ValueError, 'date1 or date2 not a valid date (must be in form YYYYMMDDHH, where HH is 00,06,12 or 18)' # find indices bounding desired times. @@ -126,10 +98,8 @@ meridians = numpy.arange(0.,360.,20.) # number of repeated frames at beginning and end is n1. nframe = 0; n1 = 10 -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) # loop over times, make contour plots, draw coastlines, # parallels, meridians and title. for nt,date in enumerate(datelabels[1:]): Modified: trunk/toolkits/basemap/examples/simpletest_oo.py =================================================================== --- trunk/toolkits/basemap/examples/simpletest_oo.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/simpletest_oo.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -37,10 +37,11 @@ # add a title. ax.set_title('Robinson Projection') # add a colorbar. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +# for matplotlib 0.91 and earlier, could do l,b,w,h = ax.get_position() +# for post 0.91, pos = ax.get_position(); l,b,w,h = pos.bounds +# this works for both. +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = fig.add_axes([l, b-0.1, w, 0.03],frameon=False) # setup colorbar axes fig.colorbar(cs, cax=cax, orientation='horizontal',ticks=cs.levels[::3]) # save image (width 800 pixels with dpi=100 and fig width 8 inches). Modified: trunk/toolkits/basemap/examples/test.py =================================================================== --- trunk/toolkits/basemap/examples/test.py 2007年12月04日 21:53:43 UTC (rev 4604) +++ trunk/toolkits/basemap/examples/test.py 2007年12月05日 02:31:36 UTC (rev 4605) @@ -29,10 +29,12 @@ ax = fig.add_axes([0.1,0.1,0.7,0.7]) # plot image over map. im = m.imshow(topoin,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +# get axes position, add colorbar axes to right of this. +# for matplotlib 0.91 and earlier, could do l,b,w,h = ax.get_position() +# for post 0.91, pos = ax.get_position(); l,b,w,h = pos.bounds +# this works for both. +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -111,10 +113,8 @@ im = m.imshow(topodat,cm.jet) # get current axis instance. ax = gca() -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -145,10 +145,8 @@ im = m.imshow(topodat,cm.jet) # get current axis instance. ax = gca() -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -180,10 +178,8 @@ im = m.imshow(topodat,cm.jet) # get current axis instance. ax = gca() -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -214,10 +210,8 @@ im = m.imshow(topodat,cm.jet) # get current axis instance. ax = gca() -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -250,10 +244,8 @@ im = m.imshow(topodat,cm.jet) # get current axis instance. ax = gca() -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -283,10 +275,8 @@ ax = fig.add_axes([0.1,0.1,0.7,0.7]) # plot image over map. im = m.imshow(topodat,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -318,10 +308,8 @@ ax = fig.add_axes([0.1,0.1,0.7,0.7]) # plot image over map. im = m.imshow(topodat,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -355,10 +343,8 @@ # plot image over map. im = m.imshow(topodat,cm.jet) im.set_clim(-4000.,3000.) # adjust range of colors. -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -392,10 +378,8 @@ ax = fig.add_axes([0.1,0.1,0.7,0.7]) # plot image over map. im = m.imshow(topodat,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -425,10 +409,8 @@ ax = fig.add_axes([0.1,0.1,0.7,0.7]) # plot image over map. im = m.imshow(topodat,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -459,10 +441,8 @@ ax = fig.add_axes([0.1,0.1,0.7,0.7]) # plot image over map. im = m.imshow(topodat,cm.jet) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -502,10 +482,8 @@ # and values outside projection limb would be handled transparently # - see contour_demo.py) im = m.imshow(topo,palette,norm=colors.normalize(clip=False)) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -545,10 +523,8 @@ # and values outside projection limb would be handled transparently # - see contour_demo.py) im = m.imshow(topo,palette,norm=colors.normalize(clip=False)) -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.075, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -575,10 +551,8 @@ # plot image over map with pcolormesh. x,y = m(*meshgrid(lonsin,latsin)) p = m.pcolormesh(x,y,topodatin,shading='flat') -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -604,10 +578,8 @@ # plot image over map with pcolormesh. x,y = m(*meshgrid(lonsin,latsin)) p = m.pcolormesh(x,y,topodatin,shading='flat') -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again @@ -633,10 +605,8 @@ # plot image over map with pcolormesh. x,y = m(*meshgrid(lonsin,latsin)) p = m.pcolormesh(x,y,topodatin,shading='flat') -try: - l,b,w,h = ax.get_position() -except: - l,b,w,h = (ax.get_position()).bounds +pos = ax.get_position() +l, b, w, h = getattr(pos, 'bounds', pos) cax = axes([l+w+0.05, b, 0.05, h]) # setup colorbar axes. colorbar(cax=cax) # draw colorbar axes(ax) # make the original axes current again This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4604 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4604&view=rev Author: mdboom Date: 2007年12月04日 13:53:43 -0800 (2007年12月04日) Log Message: ----------- Fix xlabel on top axes to say what it is. Modified Paths: -------------- branches/transforms/examples/auto_layout.py Modified: branches/transforms/examples/auto_layout.py =================================================================== --- branches/transforms/examples/auto_layout.py 2007年12月04日 21:33:33 UTC (rev 4603) +++ branches/transforms/examples/auto_layout.py 2007年12月04日 21:53:43 UTC (rev 4604) @@ -10,7 +10,7 @@ ax1 = subplot(211) plot(t, s, '-', lw=2) -xlabel('xlabel for bottom axes') +xlabel('xlabel for top axes') ylabel('ylabel on the right') title('About as simple as it gets, folks') grid(True) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4603 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4603&view=rev Author: mdboom Date: 2007年12月04日 13:33:33 -0800 (2007年12月04日) Log Message: ----------- Add experimental support for auto-layout of axes on the figure, to prevent ticks and labels from overlapping things in other axes. Modified Paths: -------------- branches/transforms/examples/backend_driver.py branches/transforms/examples/colorbar_only.py branches/transforms/examples/figlegend_demo.py branches/transforms/examples/finance_demo.py branches/transforms/examples/mathtext_demo.py branches/transforms/examples/simple_plot.py branches/transforms/lib/matplotlib/axes.py branches/transforms/lib/matplotlib/axis.py branches/transforms/lib/matplotlib/figure.py branches/transforms/lib/matplotlib/projections/polar.py branches/transforms/lib/matplotlib/rcsetup.py Added Paths: ----------- branches/transforms/examples/auto_layout.py Added: branches/transforms/examples/auto_layout.py =================================================================== --- branches/transforms/examples/auto_layout.py (rev 0) +++ branches/transforms/examples/auto_layout.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -0,0 +1,34 @@ +#!/usr/bin/env python +""" +Example: simple line plot. +Show how to make and save a simple line plot with labels, title and grid +""" +from pylab import * + +t = arange(0.0, 1.0+0.01, 0.01) +s = cos(2*2*pi*t) +ax1 = subplot(211) +plot(t, s, '-', lw=2) + +xlabel('xlabel for bottom axes') +ylabel('ylabel on the right') +title('About as simple as it gets, folks') +grid(True) +ax1.yaxis.set_label_position('right') +ax1.xaxis.set_ticklabels(['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']) +for label in ax1.get_xticklabels(): + label.set_rotation(45) + +ax2 = subplot(212) +plot(t, s, '-', lw=2) +grid(True) +xlabel('xlabel for bottom axes (the ticks are on the top for no good reason)') +ylabel('I\'m a lefty') +ax2.xaxis.set_label_position('bottom') +ax2.xaxis.set_ticks_position('top') + + +#savefig('simple_plot.png') +savefig('simple_plot') + +show() Property changes on: branches/transforms/examples/auto_layout.py ___________________________________________________________________ Name: svn:executable + * Modified: branches/transforms/examples/backend_driver.py =================================================================== --- branches/transforms/examples/backend_driver.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/examples/backend_driver.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -23,6 +23,7 @@ 'alignment_test.py', 'arctest.py', 'arrow_demo.py', + 'auto_layout.py', 'axes_demo.py', 'axhspan_demo.py', 'bar_stacked.py', @@ -35,7 +36,7 @@ 'cohere_demo.py', 'contour_demo.py', 'contourf_demo.py', - 'csd_demo.py', + 'csd_demo.py', 'custom_ticker1.py', 'customize_rc.py', 'date_demo1.py', Modified: branches/transforms/examples/colorbar_only.py =================================================================== --- branches/transforms/examples/colorbar_only.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/examples/colorbar_only.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -7,7 +7,7 @@ # Make a figure and axes with dimensions as desired. fig = pylab.figure(figsize=(8,1.5)) -ax = fig.add_axes([0.05, 0.4, 0.9, 0.5]) +ax = fig.add_axes([0.05, 0.05, 0.9, 0.9]) # Set the colormap and norm to correspond to the data for which # the colorbar will be used. Modified: branches/transforms/examples/figlegend_demo.py =================================================================== --- branches/transforms/examples/figlegend_demo.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/examples/figlegend_demo.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -1,7 +1,7 @@ #!/usr/bin/env python from pylab import * -ax1 = axes([0.1, 0.1, 0.4, 0.7]) +ax1 = axes([0.05, 0.1, 0.4, 0.7]) ax2 = axes([0.55, 0.1, 0.4, 0.7]) x = arange(0.0, 2.0, 0.02) Modified: branches/transforms/examples/finance_demo.py =================================================================== --- branches/transforms/examples/finance_demo.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/examples/finance_demo.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -22,7 +22,7 @@ raise SystemExit fig = figure() -fig.subplots_adjust(bottom=0.2) +# fig.subplots_adjust(bottom=0.2) ax = fig.add_subplot(111) ax.xaxis.set_major_locator(mondays) ax.xaxis.set_minor_locator(alldays) Modified: branches/transforms/examples/mathtext_demo.py =================================================================== --- branches/transforms/examples/mathtext_demo.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/examples/mathtext_demo.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -7,7 +7,7 @@ from matplotlib.pyplot import figure, show fig = figure() -fig.subplots_adjust(bottom=0.2) +# fig.subplots_adjust(bottom=0.2) ax = fig.add_subplot(111, axisbg='y') ax.plot([1,2,3], 'r') Modified: branches/transforms/examples/simple_plot.py =================================================================== --- branches/transforms/examples/simple_plot.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/examples/simple_plot.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -13,6 +13,9 @@ ylabel('voltage (mV)') title('About as simple as it gets, folks') grid(True) +axes().xaxis.set_label_position('top') +axes().xaxis.set_ticks_position('top') +axes().yaxis.set_label_position('right') #savefig('simple_plot.png') savefig('simple_plot') Modified: branches/transforms/lib/matplotlib/axes.py =================================================================== --- branches/transforms/lib/matplotlib/axes.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/lib/matplotlib/axes.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -770,13 +770,14 @@ self.grid(self._gridOn) props = font_manager.FontProperties(size=rcParams['axes.titlesize']) + self.titleOffsetTrans = mtransforms.Affine2D().translate(0.0, 10.0) self.title = mtext.Text( - x=0.5, y=1.02, text='', + x=0.5, y=1.0, text='', fontproperties=props, verticalalignment='bottom', horizontalalignment='center', ) - self.title.set_transform(self.transAxes) + self.title.set_transform(self.transAxes + self.titleOffsetTrans) self.title.set_clip_box(None) self._set_artist_props(self.title) @@ -800,6 +801,8 @@ self.xaxis.set_clip_path(self.axesPatch) self.yaxis.set_clip_path(self.axesPatch) + self.titleOffsetTrans.clear() + def clear(self): 'clear the axes' self.cla() @@ -905,14 +908,14 @@ ysize = max(math.fabs(ymax-ymin), 1e-30) return ysize/xsize - def apply_aspect(self): + def apply_aspect(self, position): ''' Use self._aspect and self._adjustable to modify the axes box or the view limits. ''' aspect = self.get_aspect() if aspect == 'auto': - self.set_position( self._originalPosition , 'active') + self.set_position( position , 'active') return if aspect == 'equal': @@ -929,7 +932,7 @@ fig_aspect = figH/figW if self._adjustable == 'box': box_aspect = A * self.get_data_ratio() - pb = self._originalPosition.frozen() + pb = position.frozen() pb1 = pb.shrunk_to_aspect(box_aspect, pb, fig_aspect) self.set_position(pb1.anchored(self.get_anchor(), pb), 'active') return @@ -939,7 +942,7 @@ ymin,ymax = self.get_ybound() ysize = max(math.fabs(ymax-ymin), 1e-30) - l,b,w,h = self.get_position(original=True).bounds + l,b,w,h = position.bounds box_aspect = fig_aspect * (h/w) data_ratio = box_aspect / A @@ -1014,7 +1017,7 @@ self.set_autoscale_on(True) self.set_aspect('auto') self.autoscale_view() - self.apply_aspect() + # self.apply_aspect() if s=='equal': self.set_aspect('equal', adjustable='datalim') elif s == 'scaled': @@ -1289,6 +1292,32 @@ YL = ylocator.autoscale() self.set_ybound(YL) + def update_layout(self, renderer): + pad_pixels = rcParams['xtick.major.pad'] * self.figure.dpi / 72.0 + inverse_transFigure = self.figure.transFigure.inverted() + t_text, b_text = self.xaxis.get_text_heights(renderer) + l_text, r_text = self.yaxis.get_text_widths(renderer) + title_height = self.title.get_window_extent(renderer).height + title_height += pad_pixels * 2.0 + original_t_text = t_text + + ((l_text, t_text), + (r_text, b_text), + (dummy, title_height)) = inverse_transFigure.transform( + ((l_text, t_text), + (r_text, b_text), + (0.0, title_height))) + x0, y0, x1, y1 = self.get_position(True).extents + # Adjust the title + self.titleOffsetTrans.clear().translate( + 0, original_t_text + pad_pixels * 2.0) + + new_position = mtransforms.Bbox.from_extents( + x0 + l_text, y0 + b_text, + x1 - r_text, y1 - t_text - title_height) + + self.set_position(new_position, 'active') + #### Drawing def draw(self, renderer=None, inframe=False): "Draw everything (plot lines, axes, labels)" @@ -1299,8 +1328,9 @@ raise RuntimeError('No renderer defined') if not self.get_visible(): return renderer.open_group('axes') - self.apply_aspect() + self.apply_aspect(self.get_position()) + if self.axison and self._frameon: self.axesPatch.draw(renderer) Modified: branches/transforms/lib/matplotlib/axis.py =================================================================== --- branches/transforms/lib/matplotlib/axis.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/lib/matplotlib/axis.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -130,11 +130,11 @@ ACCEPTS: float """ - self._pad.set(val) + self._pad = val def get_pad(self, val): 'Get the value of the tick label pad in points' - return self._pad.get() + return self._pad def _get_text1(self): 'Get the default Text 1 instance' @@ -578,30 +578,43 @@ if a is None: return a.set_figure(self.figure) - def draw(self, renderer, *args, **kwargs): - 'Draw the axis lines, grid lines, tick lines and labels' - if not self.get_visible(): return - renderer.open_group(__name__) - ticklabelBoxes = [] - ticklabelBoxes2 = [] - + def iter_ticks(self): + """ + Iterate through all of the major and minor ticks. + """ majorLocs = self.major.locator() majorTicks = self.get_major_ticks(len(majorLocs)) self.major.formatter.set_locs(majorLocs) majorLabels = [self.major.formatter(val, i) for i, val in enumerate(majorLocs)] + minorLocs = self.minor.locator() + minorTicks = self.get_minor_ticks(len(minorLocs)) + self.minor.formatter.set_locs(minorLocs) + minorLabels = [self.minor.formatter(val, i) for i, val in enumerate(minorLocs)] - seen = {} + major_minor = [ + (majorTicks, majorLocs, majorLabels), + (minorTicks, minorLocs, minorLabels)] + for group in major_minor: + for tick in zip(*group): + yield tick + + def get_ticklabel_extents(self, renderer): + """ + Get the extents of the tick labels on either side + of the axes. + """ + ticklabelBoxes = [] + ticklabelBoxes2 = [] + interval = self.get_view_interval() - for tick, loc, label in zip(majorTicks, majorLocs, majorLabels): + for tick, loc, label in self.iter_ticks(): if tick is None: continue if not interval_contains(interval, loc): continue - seen[loc] = 1 tick.update_position(loc) tick.set_label1(label) tick.set_label2(label) - tick.draw(renderer) if tick.label1On and tick.label1.get_visible(): extent = tick.label1.get_window_extent(renderer) ticklabelBoxes.append(extent) @@ -609,19 +622,30 @@ extent = tick.label2.get_window_extent(renderer) ticklabelBoxes2.append(extent) - minorLocs = self.minor.locator() - minorTicks = self.get_minor_ticks(len(minorLocs)) - self.minor.formatter.set_locs(minorLocs) - minorLabels = [self.minor.formatter(val, i) for i, val in enumerate(minorLocs)] + if len(ticklabelBoxes): + bbox = Bbox.union(ticklabelBoxes) + else: + bbox = Bbox.from_extents(0, 0, 0, 0) + if len(ticklabelBoxes2): + bbox2 = Bbox.union(ticklabelBoxes2) + else: + bbox2 = Bbox.from_extents(0, 0, 0, 0) + return bbox, bbox2 - for tick, loc, label in zip(minorTicks, minorLocs, minorLabels): + def draw(self, renderer, *args, **kwargs): + 'Draw the axis lines, grid lines, tick lines and labels' + ticklabelBoxes = [] + ticklabelBoxes2 = [] + + if not self.get_visible(): return + renderer.open_group(__name__) + interval = self.get_view_interval() + for tick, loc, label in self.iter_ticks(): if tick is None: continue if not interval_contains(interval, loc): continue - #if seen.has_key(loc): continue tick.update_position(loc) tick.set_label1(label) tick.set_label2(label) - tick.draw(renderer) if tick.label1On and tick.label1.get_visible(): extent = tick.label1.get_window_extent(renderer) @@ -1142,6 +1166,28 @@ bottom = bbox.y0 self.offsetText.set_position((x, bottom-self.OFFSETTEXTPAD*self.figure.dpi/72.0)) + def get_text_heights(self, renderer): + """ + Returns the amount of space one should reserve for text + above and below the axes. Returns a tuple (above, below) + """ + bbox, bbox2 = self.get_ticklabel_extents(renderer) + # MGDTODO: Need a better way to get the pad + padPixels = self.majorTicks[0]._padPixels + + above = 0.0 + if bbox2.height: + above += bbox2.height + padPixels + below = 0.0 + if bbox.height: + below += bbox.height + padPixels + + if self.get_label_position() == 'top': + above += self.label.get_window_extent(renderer).height + padPixels + else: + below += self.label.get_window_extent(renderer).height + padPixels + return above, below + def set_ticks_position(self, position): """ Set the ticks position (top, bottom, both, default or none) @@ -1360,6 +1406,24 @@ self.offsetText.set_ha(position) self.offsetText.set_position((x,y)) + def get_text_widths(self, renderer): + bbox, bbox2 = self.get_ticklabel_extents(renderer) + # MGDTODO: Need a better way to get the pad + padPixels = self.majorTicks[0]._padPixels + + left = 0.0 + if bbox.width: + left += bbox.width + padPixels + right = 0.0 + if bbox2.width: + right += bbox2.width + padPixels + + if self.get_label_position() == 'left': + left += self.label.get_window_extent(renderer).width + padPixels + else: + right += self.label.get_window_extent(renderer).width + padPixels + return left, right + def set_ticks_position(self, position): """ Set the ticks position (left, right, both or default) Modified: branches/transforms/lib/matplotlib/figure.py =================================================================== --- branches/transforms/lib/matplotlib/figure.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/lib/matplotlib/figure.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -6,7 +6,7 @@ import artist from artist import Artist from axes import Axes, SubplotBase, subplot_class_factory -from cbook import flatten, allequal, Stack, iterable, dedent +from cbook import flatten, allequal, Stack, iterable, dedent, set import _image import colorbar as cbar from image import FigureImage @@ -100,7 +100,7 @@ def __str__(self): return "Figure(%gx%g)" % tuple(self.bbox.size) - + def __init__(self, figsize = None, # defaults to rc figure.figsize dpi = None, # defaults to rc figure.dpi @@ -126,7 +126,7 @@ self.dpi = dpi self.bbox_inches = Bbox.from_bounds(0, 0, *figsize) self.bbox = TransformedBbox(self.bbox_inches, self._dpi_scale_trans) - + self.frameon = frameon self.transFigure = BboxTransformTo(self.bbox) @@ -158,7 +158,7 @@ self._dpi = dpi self._dpi_scale_trans.clear().scale(dpi, dpi) dpi = property(_get_dpi, _set_dpi) - + def autofmt_xdate(self, bottom=0.2, rotation=30, ha='right'): """ A common use case is a number of subplots with shared xaxes @@ -181,7 +181,7 @@ else: for label in ax.get_xticklabels(): label.set_visible(False) - self.subplots_adjust(bottom=bottom) + #self.subplots_adjust(bottom=bottom) def get_children(self): 'get a list of artists contained in the figure' @@ -322,7 +322,7 @@ dpival = self.dpi self.bbox_inches.p1 = w, h - + if forward: dpival = self.dpi canvasw = w*dpival @@ -389,7 +389,7 @@ ACCEPTS: float """ self.bbox_inches.x1 = val - + def set_figheight(self, val): """ Set the height of the figure in inches @@ -448,7 +448,7 @@ provided, which is equivalent to projection='polar'). Valid values for "projection" are: %s. Some of these projections support additional kwargs, which may be provided to add_axes. - + rect = l,b,w,h add_axes(rect) add_axes(rect, frameon=False, axisbg='g') @@ -469,7 +469,7 @@ add_axes(rect, label='axes2') The Axes instance will be returned - + The following kwargs are supported: %s """ % (", ".join(get_projection_names()), '%(Axes)s') @@ -496,7 +496,7 @@ "Only one of these arguments should be supplied." % projection) projection = 'polar' - + a = projection_factory(projection, self, rect, **kwargs) self.axes.append(a) @@ -524,7 +524,7 @@ be provided to add_axes. The Axes instance will be returned. - + If the figure already has a subplot with key *args, *kwargs then it will simply make that subplot current and return it @@ -623,7 +623,40 @@ renderer.draw_image(l, b, im, self.bbox, *self.get_transformed_clip_path_and_affine()) + # update the positions of the axes + # This gives each of the axes the opportunity to resize itself + # based on the tick and axis labels etc., and then makes sure + # that any axes that began life aligned to another axes remains + # aligned after these adjustments + if len(self.axes) > 1: + aligned_positions = [{}, {}, {}, {}] + for a in self.axes: + a.update_layout(renderer) + orig_pos = a.get_position(True) + curr_pos = a.get_position() + for pos, orig, curr in zip(aligned_positions, + orig_pos.get_points().flatten(), + curr_pos.get_points().flatten()): + if orig in pos: + pos[orig][0].append(a) + pos[orig][1].add(curr) + else: + pos[orig] = [[a], set([curr])] + for i, pos in enumerate(aligned_positions): + for axes, places in pos.values(): + if len(places) > 1: + if i < 2: + curr = max(places) + else: + curr = min(places) + for a in axes: + curr_pos = a.get_position().frozen() + curr_pos.get_points()[i/2, i%2] = curr + a.set_position(curr_pos, 'active') + else: + for a in self.axes: a.update_layout(renderer) + # render the axes for a in self.axes: a.draw(renderer) Modified: branches/transforms/lib/matplotlib/projections/polar.py =================================================================== --- branches/transforms/lib/matplotlib/projections/polar.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/lib/matplotlib/projections/polar.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -20,7 +20,7 @@ Theta starts pointing east and goes anti-clockwise. """ name = 'polar' - + class PolarTransform(Transform): """ The base polar transform. This handles projection theta and r into @@ -61,10 +61,10 @@ ipath = path.interpolated(self._resolution) return Path(self.transform(ipath.vertices), ipath.codes) transform_path.__doc__ = Transform.transform_path.__doc__ - + transform_path_non_affine = transform_path transform_path_non_affine.__doc__ = Transform.transform_path_non_affine.__doc__ - + def inverted(self): return PolarAxes.InvertedPolarTransform() inverted.__doc__ = Transform.inverted.__doc__ @@ -95,7 +95,7 @@ self._invalid = 0 return self._mtx get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__ - + class InvertedPolarTransform(Transform): """ The inverse of the polar transform, mapping Cartesian @@ -130,7 +130,7 @@ class RadialLocator(Locator): """ Used to locate radius ticks. - + Ensures that all ticks are strictly positive. For all other tasks, it delegates to the base Locator (which may be different depending on the scale of the r-axis. @@ -155,12 +155,12 @@ return self.base.refresh() RESOLUTION = 75 - + def __init__(self, *args, **kwargs): """ Create a new Polar Axes for a polar plot. """ - + self._rpad = 0.05 Axes.__init__(self, *args, **kwargs) self.set_aspect('equal', adjustable='box', anchor='C') @@ -179,8 +179,6 @@ self.xaxis.set_ticks_position('none') self.yaxis.set_ticks_position('none') - self.title.set_y(1.06) - def _set_lim_and_transforms(self): self.dataLim = Bbox.unit() self.viewLim = Bbox.unit() @@ -239,9 +237,17 @@ self._yaxis_transform ) + def update_layout(self, renderer): + t_text, b_text = self.xaxis.get_text_heights(renderer) + l_text, r_text = self.yaxis.get_text_widths(renderer) + originalPosition = self.get_position(True) + title_offset = (b_text - originalPosition.transformed( + self.figure.transFigure).height) / 2.0 + self.titleOffsetTrans.clear().translate(0, title_offset) + def get_xaxis_transform(self): return self._xaxis_transform - + def get_xaxis_text1_transform(self, pixelPad): return self._xaxis_text1_transform, 'center', 'center' @@ -250,16 +256,16 @@ def get_yaxis_transform(self): return self._yaxis_transform - + def get_yaxis_text1_transform(self, pixelPad): return self._yaxis_text1_transform, 'center', 'center' def get_yaxis_text2_transform(self, pixelPad): return self._yaxis_text2_transform, 'center', 'center' - + def get_axes_patch(self): return Circle((0.5, 0.5), 0.5) - + def set_rmax(self, rmax): self.viewLim.y1 = rmax angle = self._r_label1_position.to_values()[4] @@ -275,7 +281,7 @@ Axes.set_yscale(self, *args, **kwargs) self.yaxis.set_major_locator( self.RadialLocator(self.yaxis.get_major_locator())) - + set_rscale = Axes.set_yscale set_rticks = Axes.set_yticks @@ -313,7 +319,7 @@ for t in self.xaxis.get_ticklabels(): t.update(kwargs) set_thetagrids.__doc__ = cbook.dedent(set_thetagrids.__doc__) % kwdocd - + def set_rgrids(self, radii, labels=None, angle=None, rpad=None, **kwargs): """ set the radial locations and labels of the r grids @@ -354,9 +360,9 @@ self._r_label2_position.clear().translate(angle, -self._rpad * rmax) for t in self.yaxis.get_ticklabels(): t.update(kwargs) - + set_rgrids.__doc__ = cbook.dedent(set_rgrids.__doc__) % kwdocd - + def set_xscale(self, scale, *args, **kwargs): if scale != 'linear': raise NotImplementedError("You can not set the xscale on a polar plot.") @@ -364,7 +370,7 @@ def set_xlim(self, *args, **kargs): # The xlim is fixed, no matter what you do self.viewLim.intervalx = (0.0, npy.pi * 2.0) - + def format_coord(self, theta, r): 'return a format string formatting the coordinate' theta /= math.pi @@ -387,7 +393,7 @@ Return True if this axes support the zoom box """ return False - + def start_pan(self, x, y, button): angle = self._r_label1_position.to_values()[4] / 180.0 * npy.pi mode = '' @@ -398,7 +404,7 @@ mode = 'drag_r_labels' elif button == 3: mode = 'zoom' - + self._pan_start = cbook.Bunch( rmax = self.get_rmax(), trans = self.transData.frozen(), @@ -411,14 +417,14 @@ def end_pan(self): del self._pan_start - + def drag_pan(self, button, key, x, y): p = self._pan_start - + if p.mode == 'drag_r_labels': startt, startr = p.trans_inverse.transform_point((p.x, p.y)) t, r = p.trans_inverse.transform_point((x, y)) - + # Deal with theta dt0 = t - startt dt1 = startt - t @@ -433,24 +439,24 @@ p.r_label_angle - dt, rpad) self._r_label2_position.clear().translate( p.r_label_angle - dt, -rpad) - + elif p.mode == 'zoom': startt, startr = p.trans_inverse.transform_point((p.x, p.y)) t, r = p.trans_inverse.transform_point((x, y)) - + dr = r - startr # Deal with r scale = r / startr self.set_rmax(p.rmax / scale) - + # These are a couple of aborted attempts to project a polar plot using # cubic bezier curves. - + # def transform_path(self, path): # twopi = 2.0 * npy.pi # halfpi = 0.5 * npy.pi - + # vertices = path.vertices # t0 = vertices[0:-1, 0] # t1 = vertices[1: , 0] @@ -469,7 +475,7 @@ # kappa = 4.0 * ((npy.sqrt(2.0) - 1.0) / 3.0) # kappa = 0.5 - + # p0 = vertices[0:-1] # p1 = vertices[1: ] @@ -497,17 +503,17 @@ # result[2::3, 0:1] = xk # result[2::3, 1: ] = yk - + # result[3::3] = p1 # print vertices[-2:] # print result[-2:] - + # return mpath.Path(result, codes) - + # twopi = 2.0 * npy.pi # halfpi = 0.5 * npy.pi - + # vertices = path.vertices # t0 = vertices[0:-1, 0] # t1 = vertices[1: , 0] @@ -518,7 +524,7 @@ # print "interpolate", interpolate # if interpolate > 1.0: # vertices = self.interpolate(vertices, interpolate) - + # result = npy.zeros((len(vertices) * 3 - 2, 2), npy.float_) # codes = mpath.Path.CURVE4 * npy.ones((len(vertices) * 3 - 2, ), mpath.Path.code_type) # result[0] = vertices[0] @@ -547,7 +553,7 @@ # result[2::3, 0] = t1 - (tkappa * td_scaled) # result[2::3, 1] = r1*hyp_kappa # # result[2::3, 1] = r1 / npy.cos(tkappa * td_scaled) # npy.sqrt(r1*r1 + ravg_kappa*ravg_kappa) - + # result[3::3, 0] = t1 # result[3::3, 1] = r1 @@ -556,4 +562,4 @@ # return mpath.Path(result, codes) # transform_path_non_affine = transform_path - + Modified: branches/transforms/lib/matplotlib/rcsetup.py =================================================================== --- branches/transforms/lib/matplotlib/rcsetup.py 2007年12月04日 21:30:06 UTC (rev 4602) +++ branches/transforms/lib/matplotlib/rcsetup.py 2007年12月04日 21:33:33 UTC (rev 4603) @@ -143,7 +143,7 @@ if len(s)==6 and s.isalnum(): # looks like hex return '#' + s - + if len(s)==7 and s.startswith('#') and s[1:].isalnum(): return s @@ -198,7 +198,7 @@ return float(s) except ValueError: raise ValueError('not a valid font size') - + def validate_font_properties(s): parse_fontconfig_pattern(s) return s @@ -369,7 +369,7 @@ 'mathtext.sf' : ['sans\-serif', validate_font_properties], 'mathtext.fontset' : ['cm', validate_fontset], 'mathtext.fallback_to_cm' : [True, validate_bool], - + 'image.aspect' : ['equal', validate_aspect], # equal, auto, a number 'image.interpolation' : ['bilinear', str], 'image.cmap' : ['jet', str], # one of gray, jet, etc @@ -440,12 +440,12 @@ 'figure.facecolor' : [ '0.75', validate_color], # facecolor; scalar gray 'figure.edgecolor' : [ 'w', validate_color], # edgecolor; white - 'figure.subplot.left' : [0.125, ValidateInterval(0, 1, closedmin=False, closedmax=False)], + 'figure.subplot.left' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=False)], 'figure.subplot.right' : [0.9, ValidateInterval(0, 1, closedmin=False, closedmax=False)], 'figure.subplot.bottom' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=False)], 'figure.subplot.top' : [0.9, ValidateInterval(0, 1, closedmin=False, closedmax=False)], - 'figure.subplot.wspace' : [0.2, ValidateInterval(0, 1, closedmin=False, closedmax=True)], - 'figure.subplot.hspace' : [0.2, ValidateInterval(0, 1, closedmin=False, closedmax=True)], + 'figure.subplot.wspace' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=True)], + 'figure.subplot.hspace' : [0.1, ValidateInterval(0, 1, closedmin=False, closedmax=True)], 'savefig.dpi' : [100, validate_float], # DPI This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4602 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4602&view=rev Author: mdboom Date: 2007年12月04日 13:30:06 -0800 (2007年12月04日) Log Message: ----------- Bugfix. Modified Paths: -------------- branches/transforms/lib/matplotlib/axis.py Modified: branches/transforms/lib/matplotlib/axis.py =================================================================== --- branches/transforms/lib/matplotlib/axis.py 2007年12月04日 20:56:05 UTC (rev 4601) +++ branches/transforms/lib/matplotlib/axis.py 2007年12月04日 21:30:06 UTC (rev 4602) @@ -1125,7 +1125,7 @@ if not len(bboxes2): top = self.axes.bbox.ymax else: - bbox = bbox_union(bboxes2) + bbox = Bbox.union(bboxes2) top = bbox.y1 self.label.set_position( (x, top+self.LABELPAD*self.figure.dpi / 72.0)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4601 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4601&view=rev Author: jswhit Date: 2007年12月04日 12:56:05 -0800 (2007年12月04日) Log Message: ----------- bump version number Modified Paths: -------------- trunk/toolkits/basemap/Changelog trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py trunk/toolkits/basemap/setup.py Modified: trunk/toolkits/basemap/Changelog =================================================================== --- trunk/toolkits/basemap/Changelog 2007年12月04日 20:55:04 UTC (rev 4600) +++ trunk/toolkits/basemap/Changelog 2007年12月04日 20:56:05 UTC (rev 4601) @@ -1,5 +1,6 @@ +version 0.9.9 (not yet released) * added num2date and date2num functions, which use - included netcdftime module. + included netcdftime module. version 0.9.8 (svn revision 4526) * fixes for filling continents in orthographic projection. * added 'maskandscale' kwarg to NetCDFFile to Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月04日 20:55:04 UTC (rev 4600) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月04日 20:56:05 UTC (rev 4601) @@ -37,7 +37,7 @@ # basemap data files now installed in lib/matplotlib/toolkits/basemap/data basemap_datadir = os.sep.join([os.path.dirname(__file__), 'data']) -__version__ = '0.9.8' +__version__ = '0.9.9' # supported map projections. _projnames = {'cyl' : 'Cylindrical Equidistant', Modified: trunk/toolkits/basemap/setup.py =================================================================== --- trunk/toolkits/basemap/setup.py 2007年12月04日 20:55:04 UTC (rev 4600) +++ trunk/toolkits/basemap/setup.py 2007年12月04日 20:56:05 UTC (rev 4601) @@ -134,7 +134,7 @@ package_data = {'matplotlib.toolkits.basemap':pyproj_datafiles+basemap_datafiles} setup( name = "basemap", - version = "0.9.8", + version = "0.9.9", description = "Plot data on map projections with matplotlib", long_description = """ An add-on toolkit for matplotlib that lets you plot data This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4600 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4600&view=rev Author: mdboom Date: 2007年12月04日 12:55:04 -0800 (2007年12月04日) Log Message: ----------- Fix inverted x-axis bug. Modified Paths: -------------- branches/transforms/lib/matplotlib/axes.py Modified: branches/transforms/lib/matplotlib/axes.py =================================================================== --- branches/transforms/lib/matplotlib/axes.py 2007年12月04日 20:53:52 UTC (rev 4599) +++ branches/transforms/lib/matplotlib/axes.py 2007年12月04日 20:55:04 UTC (rev 4600) @@ -1599,7 +1599,7 @@ if xmin is None: xmin = old_xmin if xmax is None: xmax = old_xmax - xmin, xmax = mtransforms.nonsingular(xmin, xmax) + xmin, xmax = mtransforms.nonsingular(xmin, xmax, increasing=False) xmin, xmax = self.xaxis.limit_range_for_scale(xmin, xmax) self.viewLim.intervalx = (xmin, xmax) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4599 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4599&view=rev Author: jswhit Date: 2007年12月04日 12:53:52 -0800 (2007年12月04日) Log Message: ----------- docstring addition. Modified Paths: -------------- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月04日 20:48:55 UTC (rev 4598) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/basemap.py 2007年12月04日 20:53:52 UTC (rev 4599) @@ -2928,7 +2928,7 @@ (http://cf-pcmdi.llnl.gov/documents/cf-conventions/) are supported. Valid calendars 'standard', 'gregorian', 'proleptic_gregorian' 'noleap', '365_day', '360_day', 'julian', 'all_leap', '366_day'. - Default is 'standard'. + Default is 'standard', which is a mixed Julian/Gregorian calendar. Returns a numeric time value, or an array of numeric time values. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 4598 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4598&view=rev Author: jswhit Date: 2007年12月04日 12:48:55 -0800 (2007年12月04日) Log Message: ----------- check for time zone offset. Modified Paths: -------------- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py Modified: trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py =================================================================== --- trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月04日 20:43:54 UTC (rev 4597) +++ trunk/toolkits/basemap/lib/matplotlib/toolkits/basemap/netcdftime.py 2007年12月04日 20:48:55 UTC (rev 4598) @@ -446,7 +446,8 @@ # parse the date string. n = timestr.find('since')+6 year,month,day,hour,minute,second,utc_offset = _parse_date(timestr[n:]) - + if utc_offset: + raise ValueError("time zone offset not allowed") return units, datetime(year, month, day, hour, minute, second) class utime: @@ -572,8 +573,9 @@ it is divisible by 400. - C{'noleap'} or C{'365_day'}: Gregorian calendar without leap years, i.e., all years are 365 days long. - all_leap or 366_day Gregorian calendar with every year being a leap year, - i.e., all years are 366 days long. + - C{all_leap} or C{'366_day'}: + Gregorian calendar with every year being a leap year, i.e., + all years are 366 days long. -C{'360_day'}: All years are 360 days divided into 30 day months. -C{'julian'}: @@ -773,19 +775,8 @@ m = p.match(origin.strip()) if m: c = m.groupdict(0) - - # Instantiate timezone object. + # UTC offset. offset = int(c['ho'])*60 + int(c['mo']) - #tz = FixedOffset(offset, 'Unknown') - - #return datetime(int(c['year']), - # int(c['month']), - # int(c['day']), - # int(c['hour']), - # int(c['min']), - # int(c['sec']), - # int(c['dsec']) * 100000, - # tz) return int(c['year']),int(c['month']),int(c['day']),int(c['hour']),int(c['min']),int(c['sec']),offset raise Exception('Invalid date origin: %s' % origin) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.