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
(5) |
2
(1) |
3
(1) |
4
(1) |
5
(5) |
6
(7) |
7
(2) |
8
|
9
(6) |
10
|
11
(9) |
12
(8) |
13
(2) |
14
(3) |
15
|
16
(4) |
17
(1) |
18
|
19
(4) |
20
|
21
(5) |
22
(2) |
23
(4) |
24
|
25
(3) |
26
(2) |
27
|
28
|
29
(1) |
30
|
31
|
Revision: 7911 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7911&view=rev Author: leejjoon Date: 2009年10月29日 19:04:42 +0000 (2009年10月29日) Log Message: ----------- fix patheffect to work w/ MixedModeRenederer Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/patheffects.py trunk/matplotlib/lib/matplotlib/text.py Modified: trunk/matplotlib/lib/matplotlib/patheffects.py =================================================================== --- trunk/matplotlib/lib/matplotlib/patheffects.py 2009年10月26日 17:08:35 UTC (rev 7910) +++ trunk/matplotlib/lib/matplotlib/patheffects.py 2009年10月29日 19:04:42 UTC (rev 7911) @@ -5,6 +5,7 @@ """ from matplotlib.backend_bases import RendererBase +from matplotlib.backends.backend_mixed import MixedModeRenderer import matplotlib.transforms as transforms @@ -57,6 +58,9 @@ def _draw_text_as_path(self, renderer, gc, x, y, s, prop, angle, ismath): + if isinstance(renderer, MixedModeRenderer): + renderer = renderer._renderer + path, transform = RendererBase._get_text_path_transform(renderer, x, y, s, prop, angle, Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2009年10月26日 17:08:35 UTC (rev 7910) +++ trunk/matplotlib/lib/matplotlib/text.py 2009年10月29日 19:04:42 UTC (rev 7911) @@ -278,9 +278,15 @@ horizLayout = np.zeros((len(lines), 4)) if self.get_path_effects(): - def get_text_width_height_descent(*kl, **kwargs): - return RendererBase.get_text_width_height_descent(renderer, - *kl, **kwargs) + from matplotlib.backends.backend_mixed import MixedModeRenderer + if isinstance(renderer, MixedModeRenderer): + def get_text_width_height_descent(*kl, **kwargs): + return RendererBase.get_text_width_height_descent(renderer._renderer, + *kl, **kwargs) + else: + def get_text_width_height_descent(*kl, **kwargs): + return RendererBase.get_text_width_height_descent(renderer, + *kl, **kwargs) else: get_text_width_height_descent = renderer.get_text_width_height_descent This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7910 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7910&view=rev Author: mdboom Date: 2009年10月26日 17:08:35 +0000 (2009年10月26日) Log Message: ----------- Disable test that's failing on the build bots for (probably) environmental reasons. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/tests/test_image.py Modified: trunk/matplotlib/lib/matplotlib/tests/test_image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_image.py 2009年10月26日 14:19:04 UTC (rev 7909) +++ trunk/matplotlib/lib/matplotlib/tests/test_image.py 2009年10月26日 17:08:35 UTC (rev 7910) @@ -38,14 +38,14 @@ buffer.seek(0) plt.imread(buffer) -def test_image_unicode_io(): - fig = plt.figure() - ax = fig.add_subplot(111) - ax.plot([1,2,3]) - fname = u"\u0a3a\u0a3a.png" - fig.savefig(fname) - plt.imread(fname) - os.remove(fname) +# def test_image_unicode_io(): +# fig = plt.figure() +# ax = fig.add_subplot(111) +# ax.plot([1,2,3]) +# fname = u"\u0a3a\u0a3a.png" +# fig.savefig(fname) +# plt.imread(fname) +# os.remove(fname) if __name__=='__main__': import nose This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7909 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7909&view=rev Author: mdboom Date: 2009年10月26日 14:19:04 +0000 (2009年10月26日) Log Message: ----------- Support Python file-like objects in readpng Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/image.py trunk/matplotlib/lib/matplotlib/tests/test_image.py trunk/matplotlib/src/_png.cpp Modified: trunk/matplotlib/lib/matplotlib/image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/image.py 2009年10月25日 23:29:31 UTC (rev 7908) +++ trunk/matplotlib/lib/matplotlib/image.py 2009年10月26日 14:19:04 UTC (rev 7909) @@ -938,10 +938,15 @@ -def imread(fname): +def imread(fname, format=None): """ - Return image file in *fname* as :class:`numpy.array`. + Return image file in *fname* as :class:`numpy.array`. *fname* may + be a string path or a Python file-like object. + If *format* is provided, will try to read file of that type, + otherwise the format is deduced from the filename. If nothing can + be deduced, PNG is tried. + Return value is a :class:`numpy.array`. For grayscale images, the return array is MxN. For RGB images, the return value is MxNx3. For RGBA images the return value is MxNx4. @@ -959,12 +964,16 @@ image = Image.open( fname ) return pil_to_array(image) + handlers = {'png' :_png.read_png, } + if format is None: + if cbook.is_string_like(fname): + basename, ext = os.path.splitext(fname) + ext = ext.lower()[1:] + else: + ext = 'png' + else: + ext = format - handlers = {'png' :_png.read_png, - } - basename, ext = os.path.splitext(fname) - ext = ext.lower()[1:] - if ext not in handlers.keys(): im = pilread() if im is None: @@ -972,6 +981,13 @@ return im handler = handlers[ext] + + # To handle Unicode filenames, we pass a file object to the PNG + # reader extension, since Python handles them quite well, but it's + # tricky in C. + if cbook.is_string_like(fname): + fname = open(fname, 'rb') + return handler(fname) Modified: trunk/matplotlib/lib/matplotlib/tests/test_image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_image.py 2009年10月25日 23:29:31 UTC (rev 7908) +++ trunk/matplotlib/lib/matplotlib/tests/test_image.py 2009年10月26日 14:19:04 UTC (rev 7909) @@ -4,6 +4,9 @@ import matplotlib.pyplot as plt from nose.tools import assert_raises +import cStringIO +import os + @image_comparison(baseline_images=['image_interps']) def test_image_interps(): 'make the basic nearest, bilinear and bicubic interps' @@ -26,6 +29,24 @@ fig.savefig('image_interps') +def test_image_python_io(): + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot([1,2,3]) + buffer = cStringIO.StringIO() + fig.savefig(buffer) + buffer.seek(0) + plt.imread(buffer) + +def test_image_unicode_io(): + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot([1,2,3]) + fname = u"\u0a3a\u0a3a.png" + fig.savefig(fname) + plt.imread(fname) + os.remove(fname) + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False) Modified: trunk/matplotlib/src/_png.cpp =================================================================== --- trunk/matplotlib/src/_png.cpp 2009年10月25日 23:29:31 UTC (rev 7908) +++ trunk/matplotlib/src/_png.cpp 2009年10月26日 14:19:04 UTC (rev 7909) @@ -130,12 +130,12 @@ png_init_io(png_ptr, fp); } else { png_set_write_fn(png_ptr, (void*)py_fileobj.ptr(), - &write_png_data, &flush_png_data); + &write_png_data, &flush_png_data); } png_set_IHDR(png_ptr, info_ptr, - width, height, 8, - PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); + width, height, 8, + PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); // Save the dpi of the image in the file if (args.size() == 5) { @@ -157,14 +157,14 @@ png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); } catch (...) { - if (fp && close_file) fclose(fp); - delete [] row_pointers; - /* Changed calls to png_destroy_write_struct to follow - http://www.libpng.org/pub/png/libpng-manual.txt. - This ensures the info_ptr memory is released. - */ - if (png_ptr && info_ptr) png_destroy_write_struct(&png_ptr, &info_ptr); - throw; + if (fp && close_file) fclose(fp); + delete [] row_pointers; + /* Changed calls to png_destroy_write_struct to follow + http://www.libpng.org/pub/png/libpng-manual.txt. + This ensures the info_ptr memory is released. + */ + if (png_ptr && info_ptr) png_destroy_write_struct(&png_ptr, &info_ptr); + throw; } png_destroy_write_struct(&png_ptr, &info_ptr); @@ -174,39 +174,85 @@ return Py::Object(); } +static void _read_png_data(PyObject* py_file_obj, png_bytep data, png_size_t length) { + PyObject* read_method = PyObject_GetAttrString(py_file_obj, "read"); + PyObject* result = NULL; + char *buffer; + Py_ssize_t bufflen; + if (read_method) + result = PyObject_CallFunction(read_method, (char *)"i", length); + if (PyString_AsStringAndSize(result, &buffer, &bufflen) == 0) { + if (bufflen == (Py_ssize_t)length) { + memcpy(data, buffer, length); + } + } + Py_XDECREF(read_method); + Py_XDECREF(result); +} +static void read_png_data(png_structp png_ptr, png_bytep data, png_size_t length) { + PyObject* py_file_obj = (PyObject*)png_get_io_ptr(png_ptr); + _read_png_data(py_file_obj, data, length); +} + Py::Object _png_module::read_png(const Py::Tuple& args) { args.verify_length(1); - std::string fname = Py::String(args[0]); + png_byte header[8]; // 8 is the maximum size that can be checked + FILE* fp = NULL; + bool close_file = false; - png_byte header[8]; // 8 is the maximum size that can be checked + Py::Object py_fileobj = Py::Object(args[0]); + if (py_fileobj.isString()) { + std::string fileName = Py::String(py_fileobj); + const char *file_name = fileName.c_str(); + if ((fp = fopen(file_name, "rb")) == NULL) + throw Py::RuntimeError( Printf("Could not open file %s for reading", file_name).str() ); + close_file = true; + } else if (PyFile_CheckExact(py_fileobj.ptr())) { + fp = PyFile_AsFile(py_fileobj.ptr()); + } else { + PyObject* read_method = PyObject_GetAttrString(py_fileobj.ptr(), "read"); + if (!(read_method && PyCallable_Check(read_method))) { + Py_XDECREF(read_method); + throw Py::TypeError("Object does not appear to be a 8-bit string path or a Python file-like object"); + } + Py_XDECREF(read_method); + } - FILE *fp = fopen(fname.c_str(), "rb"); - if (!fp) - throw Py::RuntimeError(Printf("_image_module::readpng could not open PNG file %s for reading", fname.c_str()).str()); - - if (fread(header, 1, 8, fp) != 8) - throw Py::RuntimeError("_image_module::readpng: error reading PNG header"); - if (png_sig_cmp(header, 0, 8)) + if (fp) { + if (fread(header, 1, 8, fp) != 8) { + throw Py::RuntimeError("_image_module::readpng: error reading PNG header"); + } + } else { + _read_png_data(py_fileobj.ptr(), header, 8); + } + if (png_sig_cmp(header, 0, 8)) { throw Py::RuntimeError("_image_module::readpng: file not recognized as a PNG file"); + } - /* initialize stuff */ png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); - if (!png_ptr) + if (!png_ptr) { throw Py::RuntimeError("_image_module::readpng: png_create_read_struct failed"); + } png_infop info_ptr = png_create_info_struct(png_ptr); - if (!info_ptr) + if (!info_ptr) { throw Py::RuntimeError("_image_module::readpng: png_create_info_struct failed"); + } - if (setjmp(png_jmpbuf(png_ptr))) + if (setjmp(png_jmpbuf(png_ptr))) { throw Py::RuntimeError("_image_module::readpng: error during init_io"); + } - png_init_io(png_ptr, fp); + if (fp) { + png_init_io(png_ptr, fp); + } else { + png_set_read_fn(png_ptr, (void*)py_fileobj.ptr(), &read_png_data); + } png_set_sig_bytes(png_ptr, 8); png_read_info(png_ptr, info_ptr); @@ -272,26 +318,28 @@ for (png_uint_32 y = 0; y < height; y++) { png_byte* row = row_pointers[y]; - for (png_uint_32 x = 0; x < width; x++) { - size_t offset = y*A->strides[0] + x*A->strides[1]; - if (bit_depth == 16) { - png_uint_16* ptr = &reinterpret_cast<png_uint_16*> (row)[x * dimensions[2]]; + for (png_uint_32 x = 0; x < width; x++) { + size_t offset = y*A->strides[0] + x*A->strides[1]; + if (bit_depth == 16) { + png_uint_16* ptr = &reinterpret_cast<png_uint_16*> (row)[x * dimensions[2]]; for (png_uint_32 p = 0; p < (png_uint_32)dimensions[2]; p++) - *(float*)(A->data + offset + p*A->strides[2]) = (float)(ptr[p]) / max_value; - } else { - png_byte* ptr = &(row[x * dimensions[2]]); - for (png_uint_32 p = 0; p < (png_uint_32)dimensions[2]; p++) - { - *(float*)(A->data + offset + p*A->strides[2]) = (float)(ptr[p]) / max_value; - } - } + *(float*)(A->data + offset + p*A->strides[2]) = (float)(ptr[p]) / max_value; + } else { + png_byte* ptr = &(row[x * dimensions[2]]); + for (png_uint_32 p = 0; p < (png_uint_32)dimensions[2]; p++) + { + *(float*)(A->data + offset + p*A->strides[2]) = (float)(ptr[p]) / max_value; + } + } } } //free the png memory png_read_end(png_ptr, info_ptr); png_destroy_read_struct(&png_ptr, &info_ptr, png_infopp_NULL); - fclose(fp); + if (close_file) { + fclose(fp); + } for (row = 0; row < height; row++) delete [] row_pointers[row]; delete [] row_pointers; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7908 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7908&view=rev Author: leejjoon Date: 2009年10月25日 23:29:31 +0000 (2009年10月25日) Log Message: ----------- add example multiple_yaxis_with_spines.py Added Paths: ----------- trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py Added: trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py (rev 0) +++ trunk/matplotlib/examples/pylab_examples/multiple_yaxis_with_spines.py 2009年10月25日 23:29:31 UTC (rev 7908) @@ -0,0 +1,61 @@ +import matplotlib.pyplot as plt + +def make_patch_spines_invisible(ax): + par2.set_frame_on(True) + par2.patch.set_visible(False) + for sp in par2.spines.itervalues(): + sp.set_visible(False) + +def make_spine_invisible(ax, direction): + if direction in ["right", "left"]: + ax.yaxis.set_ticks_position(direction) + ax.yaxis.set_label_position(direction) + elif direction in ["top", "bottom"]: + ax.xaxis.set_ticks_position(direction) + ax.xaxis.set_label_position(direction) + else: + raise ValueError("Unknown Direction : %s" % (direction,)) + + ax.spines[direction].set_visible(True) + + +if 1: + fig = plt.figure(1) + + host = fig.add_subplot(111) + + host.set_xlabel("Distance") + + par1 = host.twinx() + par2 = host.twinx() + + par2.spines["right"].set_position(("axes", 1.2)) + make_patch_spines_invisible(par2) + make_spine_invisible(par2, "right") + + plt.subplots_adjust(right=0.75) + + + p1, = host.plot([0, 1, 2], [0, 1, 2], "b-", label="Density") + p2, = par1.plot([0, 1, 2], [0, 3, 2], "r-", label="Temperature") + p3, = par2.plot([0, 1, 2], [50, 30, 15], "g-", label="Velocity") + + host.set_xlim(0, 2) + host.set_ylim(0, 2) + par1.set_ylim(0, 4) + par2.set_ylim(1, 65) + + host.set_xlabel("Distance") + host.set_ylabel("Density") + par1.set_ylabel("Temperature") + par2.set_ylabel("Velocity") + + host.yaxis.label.set_color(p1.get_color()) + par1.yaxis.label.set_color(p2.get_color()) + par2.yaxis.label.set_color(p3.get_color()) + + lines = [p1, p2, p3] + host.legend(lines, [l.get_label() for l in lines]) + plt.draw() + plt.show() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7907 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7907&view=rev Author: leejjoon Date: 2009年10月25日 19:33:49 +0000 (2009年10月25日) Log Message: ----------- Merged revisions 7906 via svnmerge from https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/v0_99_maint ........ r7906 | leejjoon | 2009年10月25日 15:30:43 -0400 (2009年10月25日) | 2 lines axes_divider.py : fix a bug that axes has a wrong size when pack_start is True. ........ Modified Paths: -------------- trunk/matplotlib/lib/mpl_toolkits/axes_grid/axes_divider.py Property Changed: ---------------- trunk/matplotlib/ Property changes on: trunk/matplotlib ___________________________________________________________________ Modified: svnmerge-integrated - /branches/mathtex:1-7263 /branches/v0_99_maint:1-7903 + /branches/mathtex:1-7263 /branches/v0_99_maint:1-7906 Modified: trunk/matplotlib/lib/mpl_toolkits/axes_grid/axes_divider.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/axes_grid/axes_divider.py 2009年10月25日 19:30:43 UTC (rev 7906) +++ trunk/matplotlib/lib/mpl_toolkits/axes_grid/axes_divider.py 2009年10月25日 19:33:49 UTC (rev 7907) @@ -441,7 +441,7 @@ fraction_ref=self._xref) if pack_start: - self._horizontal.insert(0, pad) + self._horizontal.insert(0, size) self._xrefindex += 1 locator = self.new_locator(nx=0, ny=0) else: @@ -489,7 +489,7 @@ fraction_ref=self._yref) if pack_start: - self._vertical.insert(0, pad) + self._vertical.insert(0, size) self._yrefindex += 1 locator = self.new_locator(nx=0, ny=0) else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7906 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7906&view=rev Author: leejjoon Date: 2009年10月25日 19:30:43 +0000 (2009年10月25日) Log Message: ----------- axes_divider.py : fix a bug that axes has a wrong size when pack_start is True. Modified Paths: -------------- branches/v0_99_maint/lib/mpl_toolkits/axes_grid/axes_divider.py Modified: branches/v0_99_maint/lib/mpl_toolkits/axes_grid/axes_divider.py =================================================================== --- branches/v0_99_maint/lib/mpl_toolkits/axes_grid/axes_divider.py 2009年10月23日 17:44:29 UTC (rev 7905) +++ branches/v0_99_maint/lib/mpl_toolkits/axes_grid/axes_divider.py 2009年10月25日 19:30:43 UTC (rev 7906) @@ -441,7 +441,7 @@ fraction_ref=self._xref) if pack_start: - self._horizontal.insert(0, pad) + self._horizontal.insert(0, size) self._xrefindex += 1 locator = self.new_locator(nx=0, ny=0) else: @@ -489,7 +489,7 @@ fraction_ref=self._yref) if pack_start: - self._vertical.insert(0, pad) + self._vertical.insert(0, size) self._yrefindex += 1 locator = self.new_locator(nx=0, ny=0) else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7905 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7905&view=rev Author: jrevans Date: 2009年10月23日 17:44:29 +0000 (2009年10月23日) Log Message: ----------- Changed the algorithm that determines what converter to use for unitized data to allow for strings and numpy arrays of types other than 'object'. The new algorithm takes into account the possibility of infinite recursion for strings or any other type. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/units.py Modified: trunk/matplotlib/lib/matplotlib/units.py =================================================================== --- trunk/matplotlib/lib/matplotlib/units.py 2009年10月23日 16:43:08 UTC (rev 7904) +++ trunk/matplotlib/lib/matplotlib/units.py 2009年10月23日 17:44:29 UTC (rev 7905) @@ -128,18 +128,14 @@ if classx is not None: converter = self.get(classx) - # Check explicity for strings here because they would otherwise - # lead to an infinite recursion, because a single character will - # pass the iterable() check. - if converter is None and iterable(x) and not is_string_like(x): - # if this is anything but an object array, we'll assume - # there are no custom units - if isinstance(x, np.ndarray) and x.dtype != np.object: - return None - + if converter is None and iterable(x): for thisx in x: - converter = self.get_converter( thisx ) - return converter + # Make sure that recursing might actually lead to a solution, if + # we are just going to re-examine another item of the same kind, + # then do not look at it. + if classx and classx != getattr(thisx, '__class__', None): + converter = self.get_converter( thisx ) + return converter #DISABLED self._cached[idx] = converter return converter This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7904 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7904&view=rev Author: mdboom Date: 2009年10月23日 16:43:08 +0000 (2009年10月23日) Log Message: ----------- Merged revisions 7901,7903 via svnmerge from https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_99_maint ........ r7901 | mdboom | 2009年10月22日 09:46:08 -0400 (2009年10月22日) | 2 lines Fix path simplification so the path always starts with a MOVETO. ........ r7903 | mdboom | 2009年10月23日 11:02:21 -0400 (2009年10月23日) | 2 lines Support \# in mathtext. ........ Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/_mathtext_data.py Property Changed: ---------------- trunk/matplotlib/ trunk/matplotlib/doc/pyplots/README trunk/matplotlib/doc/sphinxext/gen_gallery.py trunk/matplotlib/doc/sphinxext/gen_rst.py trunk/matplotlib/examples/misc/multiprocess.py trunk/matplotlib/examples/mplot3d/contour3d_demo.py trunk/matplotlib/examples/mplot3d/contourf3d_demo.py trunk/matplotlib/examples/mplot3d/polys3d_demo.py trunk/matplotlib/examples/mplot3d/scatter3d_demo.py trunk/matplotlib/examples/mplot3d/surface3d_demo.py trunk/matplotlib/examples/mplot3d/wire3d_demo.py trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png Property changes on: trunk/matplotlib ___________________________________________________________________ Modified: svnmerge-integrated - /branches/mathtex:1-7263 /branches/v0_99_maint:1-7896 + /branches/mathtex:1-7263 /branches/v0_99_maint:1-7903 Modified: svn:mergeinfo - /branches/v0_91_maint:5753-5771 /branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint:5753-5771 /branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/doc/pyplots/README ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/doc/sphinxext/gen_gallery.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/doc/sphinxext/gen_rst.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/misc/multiprocess.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/misc/log.py:5753-5771 /branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/misc/log.py:5753-5771 /branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/mplot3d/contour3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/mplot3d/contourf3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/mplot3d/polys3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/mplot3d/scatter3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/mplot3d/surface3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/examples/mplot3d/wire3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Modified: trunk/matplotlib/lib/matplotlib/_mathtext_data.py =================================================================== --- trunk/matplotlib/lib/matplotlib/_mathtext_data.py 2009年10月23日 15:02:21 UTC (rev 7903) +++ trunk/matplotlib/lib/matplotlib/_mathtext_data.py 2009年10月23日 16:43:08 UTC (rev 7904) @@ -118,6 +118,7 @@ r'%' : ('cmr10', 48), r'\$' : ('cmr10', 99), r'@' : ('cmr10', 111), + r'\#' : ('cmr10', 39), r'\_' : ('cmtt10', 79), r'\Gamma' : ('cmr10', 19), r'\Delta' : ('cmr10', 6), @@ -401,6 +402,7 @@ r'\}' : ('pncr8a', 125), r'\backslash' : ('pncr8a', 92), r'\ast' : ('pncr8a', 42), + r'\#' : ('pncr8a', 35), r'\circumflexaccent' : ('pncri8a', 124), # for \hat r'\combiningbreve' : ('pncri8a', 81), # for \breve @@ -2288,6 +2290,7 @@ '{': 123, '}': 125, '_': 95, +'#': 35, 'imath': 0x131, 'circumflexaccent' : 770, 'combiningbreve' : 774, Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 + /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896,7901-7903 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7903 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7903&view=rev Author: mdboom Date: 2009年10月23日 15:02:21 +0000 (2009年10月23日) Log Message: ----------- Support \# in mathtext. Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/_mathtext_data.py Modified: branches/v0_99_maint/lib/matplotlib/_mathtext_data.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/_mathtext_data.py 2009年10月23日 02:44:32 UTC (rev 7902) +++ branches/v0_99_maint/lib/matplotlib/_mathtext_data.py 2009年10月23日 15:02:21 UTC (rev 7903) @@ -118,6 +118,7 @@ r'%' : ('cmr10', 48), r'\$' : ('cmr10', 99), r'@' : ('cmr10', 111), + r'\#' : ('cmr10', 39), r'\_' : ('cmtt10', 79), r'\Gamma' : ('cmr10', 19), r'\Delta' : ('cmr10', 6), @@ -401,6 +402,7 @@ r'\}' : ('pncr8a', 125), r'\backslash' : ('pncr8a', 92), r'\ast' : ('pncr8a', 42), + r'\#' : ('pncr8a', 35), r'\circumflexaccent' : ('pncri8a', 124), # for \hat r'\combiningbreve' : ('pncri8a', 81), # for \breve @@ -2288,6 +2290,7 @@ '{': 123, '}': 125, '_': 95, +'#': 35, 'imath': 0x131, 'circumflexaccent' : 770, 'combiningbreve' : 774, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7902 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7902&view=rev Author: efiring Date: 2009年10月23日 02:44:32 +0000 (2009年10月23日) Log Message: ----------- Fixed two bugs involving reversal of colormaps. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/cm.py Modified: trunk/matplotlib/lib/matplotlib/cm.py =================================================================== --- trunk/matplotlib/lib/matplotlib/cm.py 2009年10月22日 13:46:08 UTC (rev 7901) +++ trunk/matplotlib/lib/matplotlib/cm.py 2009年10月23日 02:44:32 UTC (rev 7902) @@ -19,11 +19,20 @@ # reverse all the colormaps. # reversed colormaps have '_r' appended to the name. +def _reverser(f): + def freversed(x): + return f(1-x) + return freversed + def revcmap(data): data_r = {} for key, val in data.iteritems(): if callable(val): - valnew = lambda x: 1 - val(x) + valnew = _reverser(val) + # This doesn't work: lambda x: val(1-x) + # The same "val" (the first one) is used + # each time, so the colors are identical + # and the result is shades of gray. else: valnew = [(1.0 - a, b, c) for a, b, c in reversed(val)] data_r[key] = valnew @@ -43,13 +52,15 @@ cmap_d[cmapname_r] = colors.LinearSegmentedColormap( cmapname_r, datad[cmapname_r], LUTSIZE) else: - datad[cmapname] = list(cmapspec) - datad[cmapname_r] = list(datad[cmapname]) - datad[cmapname_r].reverse() + revspec = list(reversed(cmapspec)) + if len(revspec[0]) == 2: # e.g., (1, (1.0, 0.0, 1.0)) + revspec = [(1.0 - a, b) for a, b in revspec] + datad[cmapname_r] = revspec + cmap_d[cmapname] = colors.LinearSegmentedColormap.from_list( - cmapname, datad[cmapname], LUTSIZE) + cmapname, cmapspec, LUTSIZE) cmap_d[cmapname_r] = colors.LinearSegmentedColormap.from_list( - cmapname_r, datad[cmapname_r], LUTSIZE) + cmapname_r, revspec, LUTSIZE) locals().update(cmap_d) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7901 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7901&view=rev Author: mdboom Date: 2009年10月22日 13:46:08 +0000 (2009年10月22日) Log Message: ----------- Fix path simplification so the path always starts with a MOVETO. Modified Paths: -------------- branches/v0_99_maint/src/path_converters.h Modified: branches/v0_99_maint/src/path_converters.h =================================================================== --- branches/v0_99_maint/src/path_converters.h 2009年10月22日 13:43:31 UTC (rev 7900) +++ branches/v0_99_maint/src/path_converters.h 2009年10月22日 13:46:08 UTC (rev 7901) @@ -684,9 +684,15 @@ { if (m_origdNorm2 != 0.0) { - queue_push(agg::path_cmd_line_to, m_nextX, m_nextY); + queue_push((m_moveto || m_after_moveto) ? + agg::path_cmd_move_to : agg::path_cmd_line_to, + m_nextX, m_nextY); + m_moveto = false; } - queue_push(agg::path_cmd_line_to, m_lastx, m_lasty); + queue_push((m_moveto || m_after_moveto) ? + agg::path_cmd_move_to : agg::path_cmd_line_to, + m_lastx, m_lasty); + m_moveto = false; queue_push(agg::path_cmd_stop, 0.0, 0.0); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7900 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7900&view=rev Author: mdboom Date: 2009年10月22日 13:43:31 +0000 (2009年10月22日) Log Message: ----------- Fix path simplification so the path always starts with a MOVETO. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/path.py trunk/matplotlib/lib/matplotlib/tests/test_simplification.py trunk/matplotlib/src/path_converters.h Modified: trunk/matplotlib/lib/matplotlib/path.py =================================================================== --- trunk/matplotlib/lib/matplotlib/path.py 2009年10月21日 18:41:35 UTC (rev 7899) +++ trunk/matplotlib/lib/matplotlib/path.py 2009年10月22日 13:43:31 UTC (rev 7900) @@ -115,6 +115,8 @@ codes = np.asarray(codes, self.code_type) assert codes.ndim == 1 assert len(codes) == len(vertices) + if len(codes): + assert codes[0] == self.MOVETO assert vertices.ndim == 2 assert vertices.shape[1] == 2 Modified: trunk/matplotlib/lib/matplotlib/tests/test_simplification.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_simplification.py 2009年10月21日 18:41:35 UTC (rev 7899) +++ trunk/matplotlib/lib/matplotlib/tests/test_simplification.py 2009年10月22日 13:43:31 UTC (rev 7900) @@ -2,11 +2,10 @@ import matplotlib from matplotlib.testing.decorators import image_comparison, knownfailureif import matplotlib.pyplot as plt -from matplotlib import patches, path from pylab import * import numpy as np -from matplotlib import patches, path +from matplotlib import patches, path, transforms nan = np.nan Path = path.Path @@ -134,6 +133,38 @@ assert len(simplified) == 13 +def test_start_with_moveto(): + # Should be entirely clipped away to a single MOVETO + data = """ +ZwAAAAku+v9UAQAA+Tj6/z8CAADpQ/r/KAMAANlO+v8QBAAAyVn6//UEAAC6ZPr/2gUAAKpv+v+8 +BgAAm3r6/50HAACLhfr/ewgAAHyQ+v9ZCQAAbZv6/zQKAABepvr/DgsAAE+x+v/lCwAAQLz6/7wM +AAAxx/r/kA0AACPS+v9jDgAAFN36/zQPAAAF6Pr/AxAAAPfy+v/QEAAA6f36/5wRAADbCPv/ZhIA +AMwT+/8uEwAAvh77//UTAACwKfv/uRQAAKM0+/98FQAAlT/7/z0WAACHSvv//RYAAHlV+/+7FwAA +bGD7/3cYAABea/v/MRkAAFF2+//pGQAARIH7/6AaAAA3jPv/VRsAACmX+/8JHAAAHKL7/7ocAAAP +rfv/ah0AAAO4+/8YHgAA9sL7/8QeAADpzfv/bx8AANzY+/8YIAAA0OP7/78gAADD7vv/ZCEAALf5 ++/8IIgAAqwT8/6kiAACeD/z/SiMAAJIa/P/oIwAAhiX8/4QkAAB6MPz/HyUAAG47/P+4JQAAYkb8 +/1AmAABWUfz/5SYAAEpc/P95JwAAPmf8/wsoAAAzcvz/nCgAACd9/P8qKQAAHIj8/7cpAAAQk/z/ +QyoAAAWe/P/MKgAA+aj8/1QrAADus/z/2isAAOO+/P9eLAAA2Mn8/+AsAADM1Pz/YS0AAMHf/P/g +LQAAtur8/10uAACr9fz/2C4AAKEA/f9SLwAAlgv9/8ovAACLFv3/QDAAAIAh/f+1MAAAdSz9/ycx +AABrN/3/mDEAAGBC/f8IMgAAVk39/3UyAABLWP3/4TIAAEFj/f9LMwAANm79/7MzAAAsef3/GjQA +ACKE/f9+NAAAF4/9/+E0AAANmv3/QzUAAAOl/f+iNQAA+a/9/wA2AADvuv3/XDYAAOXF/f+2NgAA +29D9/w83AADR2/3/ZjcAAMfm/f+7NwAAvfH9/w44AACz/P3/XzgAAKkH/v+vOAAAnxL+//04AACW +Hf7/SjkAAIwo/v+UOQAAgjP+/905AAB5Pv7/JDoAAG9J/v9pOgAAZVT+/606AABcX/7/7zoAAFJq +/v8vOwAASXX+/207AAA/gP7/qjsAADaL/v/lOwAALZb+/x48AAAjof7/VTwAABqs/v+LPAAAELf+ +/788AAAHwv7/8TwAAP7M/v8hPQAA9df+/1A9AADr4v7/fT0AAOLt/v+oPQAA2fj+/9E9AADQA/// ++T0AAMYO//8fPgAAvRn//0M+AAC0JP//ZT4AAKsv//+GPgAAojr//6U+AACZRf//wj4AAJBQ///d +PgAAh1v///c+AAB+Zv//Dz8AAHRx//8lPwAAa3z//zk/AABih///TD8AAFmS//9dPwAAUJ3//2w/ +AABHqP//ej8AAD6z//+FPwAANb7//48/AAAsyf//lz8AACPU//+ePwAAGt///6M/AAAR6v//pj8A +AAj1//+nPwAA/////w==""" + + verts = np.fromstring(data.decode('base64'), dtype='<i4') + verts = verts.reshape((len(verts) / 2, 2)) + path = Path(verts) + segs = path.iter_segments(transforms.IdentityTransform, clip=(0.0, 0.0, 100.0, 100.0)) + segs = list(segs) + assert len(segs) == 1 + assert segs[0][1] == Path.MOVETO + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False) Modified: trunk/matplotlib/src/path_converters.h =================================================================== --- trunk/matplotlib/src/path_converters.h 2009年10月21日 18:41:35 UTC (rev 7899) +++ trunk/matplotlib/src/path_converters.h 2009年10月22日 13:43:31 UTC (rev 7900) @@ -684,9 +684,15 @@ { if (m_origdNorm2 != 0.0) { - queue_push(agg::path_cmd_line_to, m_nextX, m_nextY); + queue_push((m_moveto || m_after_moveto) ? + agg::path_cmd_move_to : agg::path_cmd_line_to, + m_nextX, m_nextY); + m_moveto = false; } - queue_push(agg::path_cmd_line_to, m_lastx, m_lasty); + queue_push((m_moveto || m_after_moveto) ? + agg::path_cmd_move_to : agg::path_cmd_line_to, + m_lastx, m_lasty); + m_moveto = false; queue_push(agg::path_cmd_stop, 0.0, 0.0); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7899 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7899&view=rev Author: jouni Date: 2009年10月21日 18:41:35 +0000 (2009年10月21日) Log Message: ----------- Raise an error in the pdf backend instead of outputting an invalid path if a Path object lacks initial moveto Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2009年10月21日 18:09:45 UTC (rev 7898) +++ trunk/matplotlib/lib/matplotlib/backends/backend_pdf.py 2009年10月21日 18:41:35 UTC (rev 7899) @@ -1206,8 +1206,12 @@ last_points = None for points, code in path.iter_segments(transform, clip=clip): if code == Path.MOVETO: + # This is allowed anywhere in the path cmds.extend(points) cmds.append(Op.moveto) + elif last_points is None: + # The other operations require a previous point + raise ValueError, 'Path lacks initial MOVETO' elif code == Path.LINETO: cmds.extend(points) cmds.append(Op.lineto) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7898 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7898&view=rev Author: ryanmay Date: 2009年10月21日 18:09:45 +0000 (2009年10月21日) Log Message: ----------- Make AutoDateLocator more configurable by moving hard-coded behavior to a structure the user can tweak. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/dates.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年10月21日 13:28:26 UTC (rev 7897) +++ trunk/matplotlib/CHANGELOG 2009年10月21日 18:09:45 UTC (rev 7898) @@ -1,7 +1,13 @@ -2009年10月19日 Add "path_effects" support for Text and Patch. See +2009年10月21日 Make AutoDateLocator more configurable by adding options + to control the maximum and minimum number of ticks. Also + add control of the intervals to be used for ticking. This + does not change behavior but opens previously hard-coded + behavior to runtime modification`. - RMM + +2009年10月19日 Add "path_effects" support for Text and Patch. See examples/pylab_examples/patheffect_demo.py -JJL -2009年10月19日 Add "use_clabeltext" option to clabel. If True, clabels +2009年10月19日 Add "use_clabeltext" option to clabel. If True, clabels will be created with ClabelText class, which recalculates rotation angle of the label during the drawing time. -JJL Modified: trunk/matplotlib/lib/matplotlib/dates.py =================================================================== --- trunk/matplotlib/lib/matplotlib/dates.py 2009年10月21日 13:28:26 UTC (rev 7897) +++ trunk/matplotlib/lib/matplotlib/dates.py 2009年10月21日 18:09:45 UTC (rev 7898) @@ -603,11 +603,79 @@ :class:`MultipleDateLocator` to set the view limits and the tick locations. """ - def __init__(self, tz=None): + def __init__(self, tz=None, minticks=5, maxticks=None, + interval_multiples=False): + """ + *minticks* is the minimum number of ticks desired, which is used to + select the type of ticking (yearly, monthly, etc.). + + *maxticks* is the maximum number of ticks desired, which controls + any interval between ticks (ticking every other, every 3, etc.). + For really fine-grained control, this can be a dictionary mapping + individual rrule frequency constants (YEARLY, MONTHLY, etc.) + to their own maximum number of ticks. This can be used to keep + the number of ticks appropriate to the format chosen in + class:`AutoDateFormatter`. Any frequency not specified in this + dictionary is given a default value. + + *tz* is a :class:`tzinfo` instance. + + *interval_multiples* is a boolean that indicates whether ticks + should be chosen to be multiple of the interval. This will lock + ticks to 'nicer' locations. For example, this will force the + ticks to be at hours 0,6,12,18 when hourly ticking is done at + 6 hour intervals. + + The AutoDateLocator has an interval dictionary that maps the + frequency of the tick (a constant from dateutil.rrule) and a + multiple allowed for that ticking. The default looks like this:: + + self.intervald = { + YEARLY : [1, 2, 4, 5, 10], + MONTHLY : [1, 2, 3, 4, 6], + DAILY : [1, 2, 3, 7, 14], + HOURLY : [1, 2, 3, 4, 6, 12], + MINUTELY: [1, 5, 10, 15, 30], + SECONDLY: [1, 5, 10, 15, 30] + } + + The interval is used to specify multiples that are appropriate for + the frequency of ticking. For instance, every 7 days is sensible + for daily ticks, but for minutes/seconds, 15 or 30 make sense. + You can customize this dictionary by doing:: + + locator = AutoDateLocator() + locator.intervald[HOURLY] = [3] # only show every 3 hours + """ DateLocator.__init__(self, tz) self._locator = YearLocator() self._freq = YEARLY + self._freqs = [YEARLY, MONTHLY, DAILY, HOURLY, MINUTELY, SECONDLY] + self.minticks = minticks + self.maxticks = {YEARLY : 16, MONTHLY : 12, DAILY : 11, HOURLY : 16, + MINUTELY : 11, SECONDLY : 11} + if maxticks is not None: + try: + self.maxticks.update(maxticks) + except TypeError: + # Assume we were given an integer. Use this as the maximum + # number of ticks for every frequency and create a + # dictionary for this + self.maxticks = dict(zip(self._freqs, + [maxticks]*len(self._freqs))) + self.interval_multiples = interval_multiples + self.intervald = { + YEARLY : [1, 2, 4, 5, 10], + MONTHLY : [1, 2, 3, 4, 6], + DAILY : [1, 2, 3, 7, 14], + HOURLY : [1, 2, 3, 4, 6, 12], + MINUTELY: [1, 5, 10, 15, 30], + SECONDLY: [1, 5, 10, 15, 30] + } + self._byranges = [None, range(1, 13), range(1, 32), range(0, 24), + range(0, 60), range(0, 60)] + def __call__(self): 'Return the locations of the ticks' self.refresh() @@ -659,89 +727,59 @@ numMinutes = (numHours * 60.0) + delta.minutes numSeconds = (numMinutes * 60.0) + delta.seconds - numticks = 5 + nums = [numYears, numMonths, numDays, numHours, numMinutes, numSeconds] - # self._freq = YEARLY - interval = 1 - bymonth = 1 - bymonthday = 1 - byhour = 0 - byminute = 0 - bysecond = 0 + # Default setting of bymonth, etc. to pass to rrule + # [unused (for year), bymonth, bymonthday, byhour, byminute, bysecond] + byranges = [None, 1, 1, 0, 0, 0] - if ( numYears >= numticks ): - self._freq = YEARLY - elif ( numMonths >= numticks ): - self._freq = MONTHLY - bymonth = range(1, 13) - if ( (0 <= numMonths) and (numMonths <= 14) ): - interval = 1 # show every month - elif ( (15 <= numMonths) and (numMonths <= 29) ): - interval = 3 # show every 3 months - elif ( (30 <= numMonths) and (numMonths <= 44) ): - interval = 4 # show every 4 months - else: # 45 <= numMonths <= 59 - interval = 6 # show every 6 months - elif ( numDays >= numticks ): - self._freq = DAILY - bymonth = None - bymonthday = range(1, 32) - if ( (0 <= numDays) and (numDays <= 9) ): - interval = 1 # show every day - elif ( (10 <= numDays) and (numDays <= 19) ): - interval = 2 # show every 2 days - elif ( (20 <= numDays) and (numDays <= 49) ): - interval = 3 # show every 3 days - elif ( (50 <= numDays) and (numDays <= 99) ): - interval = 7 # show every 1 week - else: # 100 <= numDays <= ~150 - interval = 14 # show every 2 weeks - elif ( numHours >= numticks ): - self._freq = HOURLY - bymonth = None - bymonthday = None - byhour = range(0, 24) # show every hour - if ( (0 <= numHours) and (numHours <= 14) ): - interval = 1 # show every hour - elif ( (15 <= numHours) and (numHours <= 30) ): - interval = 2 # show every 2 hours - elif ( (30 <= numHours) and (numHours <= 45) ): - interval = 3 # show every 3 hours - elif ( (45 <= numHours) and (numHours <= 68) ): - interval = 4 # show every 4 hours - elif ( (68 <= numHours) and (numHours <= 90) ): - interval = 6 # show every 6 hours - else: # 90 <= numHours <= 120 - interval = 12 # show every 12 hours - elif ( numMinutes >= numticks ): - self._freq = MINUTELY - bymonth = None - bymonthday = None - byhour = None - byminute = range(0, 60) - if ( numMinutes > (10.0 * numticks) ): - interval = 10 - # end if - elif ( numSeconds >= numticks ): - self._freq = SECONDLY - bymonth = None - bymonthday = None - byhour = None - byminute = None - bysecond = range(0, 60) - if ( numSeconds > (10.0 * numticks) ): - interval = 10 - # end if + # Loop over all the frequencies and try to find one that gives at + # least a minticks tick positions. Once this is found, look for + # an interval from an list specific to that frequency that gives no + # more than maxticks tick positions. Also, set up some ranges + # (bymonth, etc.) as appropriate to be passed to rrulewrapper. + for i, (freq, num) in enumerate(zip(self._freqs, nums)): + # If this particular frequency doesn't give enough ticks, continue + if num < self.minticks: + # Since we're not using this particular frequency, set + # the corresponding by_ to None so the rrule can act as + # appropriate + byranges[i] = None + continue + + # Find the first available interval that doesn't give too many ticks + for interval in self.intervald[freq]: + if num <= interval * (self.maxticks[freq] - 1): + break + else: + # We went through the whole loop without breaking, default to 1 + interval = 1 + + # Set some parameters as appropriate + self._freq = freq + + if self._byranges[i] and self.interval_multiples: + byranges[i] = self._byranges[i][::interval] + interval = 1 + else: + byranges[i] = self._byranges[i] + + # We found what frequency to use + break else: + # We couldn't find a good frequency. # do what? # microseconds as floats, but floats from what reference point? - pass + byranges = [None, 1, 1, 0, 0, 0] + interval = 1 + unused, bymonth, bymonthday, byhour, byminute, bysecond = byranges + del unused - rrule = rrulewrapper( self._freq, interval=interval, \ - dtstart=dmin, until=dmax, \ - bymonth=bymonth, bymonthday=bymonthday, \ - byhour=byhour, byminute = byminute, \ + rrule = rrulewrapper( self._freq, interval=interval, + dtstart=dmin, until=dmax, + bymonth=bymonth, bymonthday=bymonthday, + byhour=byhour, byminute = byminute, bysecond=bysecond ) locator = RRuleLocator(rrule, self.tz) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7897 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7897&view=rev Author: mdboom Date: 2009年10月21日 13:28:26 +0000 (2009年10月21日) Log Message: ----------- Merged revisions 7896 via svnmerge from https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_99_maint ........ r7896 | mdboom | 2009年10月21日 09:24:33 -0400 (2009年10月21日) | 2 lines Fix bug in simplification code that was clipping peaks. ........ Property Changed: ---------------- trunk/matplotlib/ trunk/matplotlib/doc/pyplots/README trunk/matplotlib/doc/sphinxext/gen_gallery.py trunk/matplotlib/doc/sphinxext/gen_rst.py trunk/matplotlib/examples/misc/multiprocess.py trunk/matplotlib/examples/mplot3d/contour3d_demo.py trunk/matplotlib/examples/mplot3d/contourf3d_demo.py trunk/matplotlib/examples/mplot3d/polys3d_demo.py trunk/matplotlib/examples/mplot3d/scatter3d_demo.py trunk/matplotlib/examples/mplot3d/surface3d_demo.py trunk/matplotlib/examples/mplot3d/wire3d_demo.py trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png Property changes on: trunk/matplotlib ___________________________________________________________________ Modified: svnmerge-integrated - /branches/mathtex:1-7263 /branches/v0_99_maint:1-7893 + /branches/mathtex:1-7263 /branches/v0_99_maint:1-7896 Modified: svn:mergeinfo - /branches/v0_91_maint:5753-5771 /branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint:5753-5771 /branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/doc/pyplots/README ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/pyplots/README:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/doc/sphinxext/gen_gallery.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_gallery.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/doc/sphinxext/gen_rst.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771 /branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/doc/sphinxext/gen_rst.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/misc/multiprocess.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/misc/log.py:5753-5771 /branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/misc/log.py:5753-5771 /branches/v0_98_5_maint/examples/misc/log.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/misc/multiprocess.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/mplot3d/contour3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/mplot3d/contour.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contour.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contour3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/mplot3d/contourf3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/mplot3d/contourf.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/contourf.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/contourf3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/mplot3d/polys3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/mplot3d/polys.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/polys.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/polys3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/mplot3d/scatter3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/mplot3d/scatter.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/scatter.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/scatter3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/mplot3d/surface3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/mplot3d/surface.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/surface.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/surface3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/examples/mplot3d/wire3d_demo.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/examples/mplot3d/wire.py:5753-5771 /branches/v0_98_5_maint/examples/mplot3d/wire.py:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918,6920-6925,6927-6928,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080 /branches/v0_99_maint/examples/mplot3d/wire3d_demo.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/mathmpl.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/doc/sphinxext/mathmpl.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/mathmpl.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/mathmpl.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/only_directives.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/doc/sphinxext/only_directives.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/only_directives.py:6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/only_directives.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_91_maint/doc/sphinxext/plot_directive.py:5753-5771 /branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py:6920-6925,6934,6941,6946,6948,6950,6952,6960,6972,6984-6985,6990,6995,6997-7001,7014,7016,7018,7024-7025,7033,7035,7042,7072,7080,7176,7209-7211,7227,7245 /branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py:7338,7393,7395-7404,7407-7424,7428-7433,7442-7444,7446,7475-7482,7484,7486,7489-7523,7567,7569,7582-7584,7616-7618,7633,7638,7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png ___________________________________________________________________ Modified: svn:mergeinfo - /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884 + /branches/v0_99_maint/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.png:7703,7727-7734,7740-7741,7745,7751,7756,7762,7770,7772,7774,7776-7778,7780,7784,7788,7790,7792,7794,7796,7800,7803,7808,7822,7827,7834,7837,7844,7846-7847,7849,7858,7864,7866-7867,7874,7884,7896 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7896 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7896&view=rev Author: mdboom Date: 2009年10月21日 13:24:33 +0000 (2009年10月21日) Log Message: ----------- Fix bug in simplification code that was clipping peaks. Modified Paths: -------------- branches/v0_99_maint/src/path_converters.h Modified: branches/v0_99_maint/src/path_converters.h =================================================================== --- branches/v0_99_maint/src/path_converters.h 2009年10月21日 13:23:47 UTC (rev 7895) +++ branches/v0_99_maint/src/path_converters.h 2009年10月21日 13:24:33 UTC (rev 7896) @@ -568,11 +568,15 @@ } m_after_moveto = false; + /* NOTE: We used to skip this very short segments, but if + you have a lot of them cumulatively, you can miss + maxima or minima in the data. */ + /* Don't render line segments less than one pixel long */ - if (fabs(*x - m_lastx) < 1.0 && fabs(*y - m_lasty) < 1.0) - { - continue; - } + /* if (fabs(*x - m_lastx) < 1.0 && fabs(*y - m_lasty) < 1.0) */ + /* { */ + /* continue; */ + /* } */ /* if we have no orig vector, set it to this vector and continue. this orig vector is the reference vector we @@ -649,7 +653,7 @@ } else { - if (paradNorm2 > m_dnorm2Min) + if (paradNorm2 < m_dnorm2Min) { m_dnorm2Min = paradNorm2; m_nextX = *x; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7895 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7895&view=rev Author: mdboom Date: 2009年10月21日 13:23:47 +0000 (2009年10月21日) Log Message: ----------- Fix bug in simplification code that was clipping peaks. Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.png trunk/matplotlib/lib/matplotlib/tests/test_simplification.py trunk/matplotlib/src/path_converters.h Added Paths: ----------- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg Modified: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.png =================================================================== (Binary files differ) Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.pdf ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg (rev 0) +++ trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg 2009年10月21日 13:23:47 UTC (rev 7895) @@ -0,0 +1,50 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<!-- Created with matplotlib (http://matplotlib.sourceforge.net/) --> +<svg width="576pt" height="432pt" viewBox="0 0 576 432" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + version="1.1" + id="svg1"> +<filter id="colorAdd"><feComposite in="SourceGraphic" in2="BackgroundImage" operator="arithmetic" k2="1" k3="1"/></filter> +<g id="figure1"> +<g id="patch1"> +<path style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M0.000000 432.000000L576.000000 432.000000L576.000000 0.000000 +L0.000000 0.000000L0.000000 432.000000"/> +</g> +<g id="axes1"> +<g id="patch2"> +<path style="fill: #ffffff; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000L518.400000 43.200000 +L72.000000 43.200000L72.000000 388.800000"/> +</g> +<g id="line2d1"> +<defs> + <clipPath id="p50431ccdcb28178602d99d9270004dde"> +<rect x="72.000000" y="43.200000" width="446.400000" height="345.600000"/> + </clipPath> +</defs><path style="fill: none; stroke: #0000ff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p50431ccdcb28178602d99d9270004dde)" d="M72.000000 388.800000L76.145143 388.578724L76.151520 388.455734 +L76.157897 388.474541L76.177029 70.552590L76.489509 388.799636 +L175.303337 388.800000L485.723520 388.493668L485.736274 386.681411 +L485.755406 70.552590L486.067886 388.799652L489.926057 388.800000 +L489.926057 388.800000"/> +</g> +<g id="matplotlib.axis1"> +</g> +<g id="matplotlib.axis2"> +</g> +<g id="patch3"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 43.200000L518.400000 43.200000"/> +</g> +<g id="patch4"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M518.400000 388.800000L518.400000 43.200000"/> +</g> +<g id="patch5"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000"/> +</g> +<g id="patch6"> +<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 388.800000L72.000000 43.200000"/> +</g> +</g> +</g> +</svg> Modified: trunk/matplotlib/lib/matplotlib/tests/test_simplification.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_simplification.py 2009年10月19日 09:04:42 UTC (rev 7894) +++ trunk/matplotlib/lib/matplotlib/tests/test_simplification.py 2009年10月21日 13:23:47 UTC (rev 7895) @@ -70,7 +70,7 @@ path = transform.transform_path(path) simplified = list(path.iter_segments(simplify=(800, 600))) - assert len(simplified) == 2662 + assert len(simplified) == 2675 def test_sine_plus_noise(): np.random.seed(0) @@ -87,7 +87,7 @@ path = transform.transform_path(path) simplified = list(path.iter_segments(simplify=(800, 600))) - assert len(simplified) == 279 + assert len(simplified) == 628 @image_comparison(baseline_images=['simplify_curve']) def test_simplify_curve(): @@ -116,7 +116,24 @@ fig.savefig('hatch_simplify') +@image_comparison(baseline_images=['fft_peaks']) +def test_fft_peaks(): + fig = plt.figure() + t = arange(65536) + ax = fig.add_subplot(111) + p1 = ax.plot(abs(fft(sin(2*pi*.01*t)*blackman(len(t))))) + ax.set_xticks([]) + ax.set_yticks([]) + fig.savefig('fft_peaks') + + path = p1[0].get_path() + transform = p1[0].get_transform() + path = transform.transform_path(path) + simplified = list(path.iter_segments(simplify=(800, 600))) + + assert len(simplified) == 13 + if __name__=='__main__': import nose nose.runmodule(argv=['-s','--with-doctest'], exit=False) Modified: trunk/matplotlib/src/path_converters.h =================================================================== --- trunk/matplotlib/src/path_converters.h 2009年10月19日 09:04:42 UTC (rev 7894) +++ trunk/matplotlib/src/path_converters.h 2009年10月21日 13:23:47 UTC (rev 7895) @@ -568,11 +568,15 @@ } m_after_moveto = false; + /* NOTE: We used to skip this very short segments, but if + you have a lot of them cumulatively, you can miss + maxima or minima in the data. */ + /* Don't render line segments less than one pixel long */ - if (fabs(*x - m_lastx) < 1.0 && fabs(*y - m_lasty) < 1.0) - { - continue; - } + /* if (fabs(*x - m_lastx) < 1.0 && fabs(*y - m_lasty) < 1.0) */ + /* { */ + /* continue; */ + /* } */ /* if we have no orig vector, set it to this vector and continue. this orig vector is the reference vector we @@ -649,7 +653,7 @@ } else { - if (paradNorm2 > m_dnorm2Min) + if (paradNorm2 < m_dnorm2Min) { m_dnorm2Min = paradNorm2; m_nextX = *x; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7894 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7894&view=rev Author: leejjoon Date: 2009年10月19日 09:04:42 +0000 (2009年10月19日) Log Message: ----------- Merged revisions 7893 via svnmerge from https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/v0_99_maint ........ r7893 | leejjoon | 2009年10月19日 05:02:08 -0400 (2009年10月19日) | 1 line fix a bug in plot_directive ........ Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py Property Changed: ---------------- trunk/matplotlib/ Property changes on: trunk/matplotlib ___________________________________________________________________ Modified: svnmerge-integrated - /branches/mathtex:1-7263 /branches/v0_99_maint:1-7887 + /branches/mathtex:1-7263 /branches/v0_99_maint:1-7893 Modified: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py =================================================================== --- trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py 2009年10月19日 09:02:08 UTC (rev 7893) +++ trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py 2009年10月19日 09:04:42 UTC (rev 7894) @@ -113,7 +113,10 @@ i+=1 rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:] - return os.path.join(*rel_list) + if rel_list: + return os.path.join(*rel_list) + else: + return "" template = """ .. htmlonly:: @@ -294,7 +297,7 @@ outdir = os.path.join('plot_directive', basedir) reldir = relpath(setup.confdir, rstdir) linkdir = os.path.join(reldir, outdir) - + # tmpdir is where we build all the output files. This way the # plots won't have to be redone when generating latex after html. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7893 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7893&view=rev Author: leejjoon Date: 2009年10月19日 09:02:08 +0000 (2009年10月19日) Log Message: ----------- fix a bug in plot_directive Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py Modified: branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py 2009年10月19日 06:50:44 UTC (rev 7892) +++ branches/v0_99_maint/lib/matplotlib/sphinxext/plot_directive.py 2009年10月19日 09:02:08 UTC (rev 7893) @@ -81,7 +81,10 @@ i+=1 rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:] - return os.path.join(*rel_list) + if rel_list: + return os.path.join(*rel_list) + else: + return "" def write_char(s): sys.stdout.write(s) @@ -263,7 +266,7 @@ outdir = os.path.join('plot_directive', basedir) reldir = relpath(setup.confdir, rstdir) linkdir = os.path.join(reldir, outdir) - + # tmpdir is where we build all the output files. This way the # plots won't have to be redone when generating latex after html. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7892 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7892&view=rev Author: leejjoon Date: 2009年10月19日 06:50:44 +0000 (2009年10月19日) Log Message: ----------- Add "path_effects" support for Text and Patch. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/patches.py trunk/matplotlib/lib/matplotlib/text.py Added Paths: ----------- trunk/matplotlib/examples/pylab_examples/patheffect_demo.py trunk/matplotlib/lib/matplotlib/patheffects.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年10月19日 04:17:32 UTC (rev 7891) +++ trunk/matplotlib/CHANGELOG 2009年10月19日 06:50:44 UTC (rev 7892) @@ -1,6 +1,9 @@ +2009年10月19日 Add "path_effects" support for Text and Patch. See + examples/pylab_examples/patheffect_demo.py -JJL + 2009年10月19日 Add "use_clabeltext" option to clabel. If True, clabels will be created with ClabelText class, which recalculates - rotation angle of the label during the drawing time. + rotation angle of the label during the drawing time. -JJL 2009年10月16日 Make AutoDateFormatter actually use any specified timezone setting.This was only working correctly Added: trunk/matplotlib/examples/pylab_examples/patheffect_demo.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/patheffect_demo.py (rev 0) +++ trunk/matplotlib/examples/pylab_examples/patheffect_demo.py 2009年10月19日 06:50:44 UTC (rev 7892) @@ -0,0 +1,37 @@ +import matplotlib.pyplot as plt +import matplotlib.patheffects as PathEffects +import numpy as np + +if 1: + plt.figure(1, figsize=(8,3)) + ax1 = plt.subplot(131) + ax1.imshow([[1,2],[2,3]]) + txt = ax1.annotate("test", (1., 1.), (0., 0), + arrowprops=dict(arrowstyle="->", + connectionstyle="angle3", lw=2), + size=20, ha="center") + + txt.set_path_effects([PathEffects.withStroke(linewidth=3, + foreground="w")]) + txt.arrow_patch.set_path_effects([PathEffects.Stroke(linewidth=5, + foreground="w"), + PathEffects.Normal()]) + + ax2 = plt.subplot(132) + arr = np.arange(25).reshape((5,5)) + ax2.imshow(arr) + cntr = ax2.contour(arr, colors="k") + clbls = ax2.clabel(cntr, fmt="%2.0f", use_clabeltext=True) + plt.setp(clbls, + path_effects=[PathEffects.withStroke(linewidth=3, + foreground="w")]) + + + # shadow as a path effect + ax3 = plt.subplot(133) + p1, = ax3.plot([0, 1], [0, 1]) + leg = ax3.legend([p1], ["Line 1"], fancybox=True, loc=2) + leg.legendPatch.set_path_effects([PathEffects.withSimplePatchShadow()]) + + plt.show() + Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2009年10月19日 04:17:32 UTC (rev 7891) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2009年10月19日 06:50:44 UTC (rev 7892) @@ -381,9 +381,9 @@ self._draw_text_as_path(gc, x, y, s, prop, angle, ismath) - def _draw_text_as_path(self, gc, x, y, s, prop, angle, ismath): + def _get_text_path_transform(self, x, y, s, prop, angle, ismath): """ - draw the text by converting them to paths using textpath module. + return the text path and transform *prop* font property @@ -399,7 +399,6 @@ """ text2path = self._text2path - color = gc.get_rgb()[:3] fontsize = self.points_to_pixels(prop.get_size_in_points()) if ismath == "TeX": @@ -418,6 +417,29 @@ fontsize/text2path.FONT_SCALE).\ rotate(angle).translate(x, y) + return path, transform + + + def _draw_text_as_path(self, gc, x, y, s, prop, angle, ismath): + """ + draw the text by converting them to paths using textpath module. + + *prop* + font property + + *s* + text to be converted + + *usetex* + If True, use matplotlib usetex mode. + + *ismath* + If True, use mathtext parser. If "TeX", use *usetex* mode. + """ + + path, transform = self._get_text_path_transform(x, y, s, prop, angle, ismath) + color = gc.get_rgb()[:3] + gc.set_linewidth(0.0) self.draw_path(gc, path, transform, rgbFace=color) Modified: trunk/matplotlib/lib/matplotlib/patches.py =================================================================== --- trunk/matplotlib/lib/matplotlib/patches.py 2009年10月19日 04:17:32 UTC (rev 7891) +++ trunk/matplotlib/lib/matplotlib/patches.py 2009年10月19日 06:50:44 UTC (rev 7892) @@ -53,15 +53,16 @@ return str(self.__class__).split('.')[-1] def __init__(self, - edgecolor=None, - facecolor=None, - linewidth=None, - linestyle=None, - antialiased = None, - hatch = None, - fill=True, - **kwargs - ): + edgecolor=None, + facecolor=None, + linewidth=None, + linestyle=None, + antialiased = None, + hatch = None, + fill=True, + path_effects = None, + **kwargs + ): """ The following kwarg properties are supported @@ -89,6 +90,8 @@ self.fill = fill self._combined_transform = transforms.IdentityTransform() + self.set_path_effects(path_effects) + if len(kwargs): artist.setp(self, **kwargs) def get_verts(self): @@ -324,6 +327,16 @@ 'Return the current hatching pattern' return self._hatch + def set_path_effects(self, path_effects): + """ + set path_effects, which should be a list of instances of + matplotlib.patheffect._Base class or its derivatives. + """ + self._path_effects = path_effects + + def get_path_effects(self): + return self._path_effects + @allow_rasterization def draw(self, renderer): 'Draw the :class:`Patch` to the given *renderer*.' @@ -363,7 +376,11 @@ tpath = transform.transform_path_non_affine(path) affine = transform.get_affine() - renderer.draw_path(gc, tpath, affine, rgbFace) + if self.get_path_effects(): + for path_effect in self.get_path_effects(): + path_effect.draw_path(renderer, gc, tpath, affine, rgbFace) + else: + renderer.draw_path(gc, tpath, affine, rgbFace) gc.restore() renderer.close_group('patch') @@ -3752,11 +3769,19 @@ renderer.open_group('patch', self.get_gid()) - for p, f in zip(path, fillable): - if f: - renderer.draw_path(gc, p, affine, rgbFace) - else: - renderer.draw_path(gc, p, affine, None) + if self.get_path_effects(): + for path_effect in self.get_path_effects(): + for p, f in zip(path, fillable): + if f: + path_effect.draw_path(renderer, gc, p, affine, rgbFace) + else: + path_effect.draw_path(renderer, gc, p, affine, None) + else: + for p, f in zip(path, fillable): + if f: + renderer.draw_path(gc, p, affine, rgbFace) + else: + renderer.draw_path(gc, p, affine, None) gc.restore() Added: trunk/matplotlib/lib/matplotlib/patheffects.py =================================================================== --- trunk/matplotlib/lib/matplotlib/patheffects.py (rev 0) +++ trunk/matplotlib/lib/matplotlib/patheffects.py 2009年10月19日 06:50:44 UTC (rev 7892) @@ -0,0 +1,209 @@ +""" +Defines classes for path effects. The path effects are supported in +:class:`~matplotlib.text.Text` and :class:`~matplotlib.patches.Patch` +matplotlib.text.Text. +""" + +from matplotlib.backend_bases import RendererBase +import matplotlib.transforms as transforms + + + +class _Base(object): + """ + A base class for PathEffect. Derived must override draw_path method. + """ + + def __init__(self): + """ + initializtion. + """ + super(_Base, self).__init__() + + + def _update_gc(self, gc, new_gc_dict): + new_gc_dict = new_gc_dict.copy() + + dashes = new_gc_dict.pop("dashes", None) + if dashes: + gc.set_dashes(**dashes) + + for k, v in new_gc_dict.iteritems(): + set_method = getattr(gc, 'set_'+k, None) + if set_method is None or not callable(set_method): + raise AttributeError('Unknown property %s'%k) + set_method(v) + + return gc + + + def draw_path(self, renderer, gc, tpath, affine, rgbFace): + """ + Derived should override this method. The argument is same + as *draw_path* method of :class:`matplotlib.backend_bases.RendererBase` + except the first argument is a renderer. The base definition is :: + + def draw_path(self, renderer, gc, tpath, affine, rgbFace): + renderer.draw_path(gc, tpath, affine, rgbFace) + + """ + renderer.draw_path(gc, tpath, affine, rgbFace) + + def draw_tex(self, renderer, gc, x, y, s, prop, angle, ismath='TeX!'): + self._draw_text_as_path(renderer, gc, x, y, s, prop, angle, ismath="TeX") + + def draw_text(self, renderer, gc, x, y, s, prop, angle, ismath=False): + self._draw_text_as_path(renderer, gc, x, y, s, prop, angle, ismath) + + def _draw_text_as_path(self, renderer, gc, x, y, s, prop, angle, ismath): + + path, transform = RendererBase._get_text_path_transform(renderer, + x, y, s, + prop, angle, + ismath) + color = gc.get_rgb()[:3] + + gc.set_linewidth(0.0) + self.draw_path(renderer, gc, path, transform, rgbFace=color) + + +# def draw_path_collection(self, renderer, +# gc, master_transform, paths, all_transforms, +# offsets, offsetTrans, facecolors, edgecolors, +# linewidths, linestyles, antialiaseds, urls): +# path_ids = [] +# for path, transform in renderer._iter_collection_raw_paths( +# master_transform, paths, all_transforms): +# path_ids.append((path, transform)) + +# for xo, yo, path_id, gc0, rgbFace in renderer._iter_collection( +# gc, path_ids, offsets, offsetTrans, facecolors, edgecolors, +# linewidths, linestyles, antialiaseds, urls): +# path, transform = path_id +# transform = transforms.Affine2D(transform.get_matrix()).translate(xo, yo) +# self.draw_path(renderer, gc0, path, transform, rgbFace) + + +class Normal(_Base): + """ + path effect with no effect + """ + pass + +class Stroke(_Base): + """ + stroke the path with updated gc. + """ + + def __init__(self, **kwargs): + """ + The path will be stroked with its gc updated with the given + keyword arguments, i.e., the keyword arguments should be valid + gc parameter values. + """ + super(Stroke, self).__init__() + self._gc = kwargs + + def draw_path(self, renderer, gc, tpath, affine, rgbFace): + """ + draw the path with update gc. + """ + # Do not modify the input! Use copy instead. + + gc0 = renderer.new_gc() + gc0.copy_properties(gc) + + gc0 = self._update_gc(gc0, self._gc) + renderer.draw_path(gc0, tpath, affine, None) + + +class withStroke(Stroke): + + """ + Same as Stroke, but add a stroke with the original gc at the end. + """ + + def draw_path(self, renderer, gc, tpath, affine, rgbFace): + + Stroke.draw_path(self, renderer, gc, tpath, affine, rgbFace) + renderer.draw_path(gc, tpath, affine, rgbFace) + + +import matplotlib.transforms as mtransforms + +class SimplePatchShadow(_Base): + """ + simple shadow + """ + + def __init__(self, offset_xy=(2,-2), + shadow_rgbFace=None, patch_alpha=0.7, + **kwargs): + """ + """ + super(_Base, self).__init__() + self._offset_xy = offset_xy + self._shadow_rgbFace = shadow_rgbFace + self._patch_alpha = patch_alpha + + self._gc = kwargs + self._offset_tran = mtransforms.Affine2D() + + def draw_path(self, renderer, gc, tpath, affine, rgbFace): + """ + """ + # Do not modify the input! Use copy instead. + + offset_x = renderer.points_to_pixels(self._offset_xy[0]) + offset_y = renderer.points_to_pixels(self._offset_xy[1]) + + affine0 = affine + self._offset_tran.clear().translate(offset_x, offset_y) + + gc0 = renderer.new_gc() + gc0.copy_properties(gc) + + if self._shadow_rgbFace is None: + r,g,b = rgbFace + rho = 0.3 + r = rho*r + g = rho*g + b = rho*b + + shadow_rgbFace = (r,g,b) + else: + shadow_rgbFace = self._shadow_rgbFace + + gc0.set_foreground("none") + gc0.set_alpha(1.-self._patch_alpha) + gc0.set_linewidth(0) + + gc0 = self._update_gc(gc0, self._gc) + renderer.draw_path(gc0, tpath, affine0, shadow_rgbFace) + + +class withSimplePatchShadow(SimplePatchShadow): + """ + simple shadow + """ + + def draw_path(self, renderer, gc, tpath, affine, rgbFace): + + SimplePatchShadow.draw_path(self, renderer, gc, tpath, affine, rgbFace) + + gc1 = renderer.new_gc() + gc1.copy_properties(gc) + gc1.set_alpha(gc1.get_alpha()*self._patch_alpha) + renderer.draw_path(gc1, tpath, affine, rgbFace) + + +if __name__ == '__main__': + clf() + imshow([[1,2],[2,3]]) + #eff = PathEffects.Thicken() + txt = annotate("test", (1., 1.), (0., 0), + arrowprops=dict(arrowstyle="->", connectionstyle="angle3", lw=2), + size=12, ha="center") + txt.set_path_effects([withStroke(linewidth=3, foreground="w")]) + #txt.arrow_patch.set_path_effects([PathEffects.withStroke(width=3, color="w")]) + txt.arrow_patch.set_path_effects([Stroke(linewidth=5, foreground="w"), + Normal()]) Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2009年10月19日 04:17:32 UTC (rev 7891) +++ trunk/matplotlib/lib/matplotlib/text.py 2009年10月19日 06:50:44 UTC (rev 7892) @@ -27,6 +27,7 @@ import matplotlib.font_manager as font_manager from matplotlib.ft2font import FT2Font +from matplotlib.backend_bases import RendererBase def _process_text_args(override, fontdict=None, **kwargs): "Return an override dict. See :func:`~pyplot.text' docstring for info" @@ -154,6 +155,7 @@ rotation=None, linespacing=None, rotation_mode=None, + path_effects=None, **kwargs ): """ @@ -172,6 +174,7 @@ if fontproperties is None: fontproperties=FontProperties() elif is_string_like(fontproperties): fontproperties=FontProperties(fontproperties) + self.set_path_effects(path_effects) self.set_text(text) self.set_color(color) self._verticalalignment = verticalalignment @@ -274,17 +277,26 @@ whs = np.zeros((len(lines), 2)) horizLayout = np.zeros((len(lines), 4)) + if self.get_path_effects(): + def get_text_width_height_descent(*kl, **kwargs): + return RendererBase.get_text_width_height_descent(renderer, + *kl, **kwargs) + else: + get_text_width_height_descent = renderer.get_text_width_height_descent + # Find full vertical extent of font, # including ascenders and descenders: - tmp, lp_h, lp_bl = renderer.get_text_width_height_descent( - 'lp', self._fontproperties, ismath=False) + tmp, lp_h, lp_bl = get_text_width_height_descent('lp', + self._fontproperties, + ismath=False) offsety = lp_h * self._linespacing baseline = None for i, line in enumerate(lines): clean_line, ismath = self.is_math_text(line) - w, h, d = renderer.get_text_width_height_descent( - clean_line, self._fontproperties, ismath=ismath) + w, h, d = get_text_width_height_descent(clean_line, + self._fontproperties, + ismath=ismath) if baseline is None: baseline = h - d whs[i] = w, h @@ -387,6 +399,13 @@ self.cached[key] = ret return ret + def set_path_effects(self, path_effects): + self._path_effects = path_effects + + def get_path_effects(self): + return self._path_effects + + def set_bbox(self, rectprops): """ Draw a bounding box around self. rectprops are any settable @@ -558,8 +577,13 @@ y = canvash-y clean_line, ismath = self.is_math_text(line) - renderer.draw_tex(gc, x, y, clean_line, - self._fontproperties, angle) + if self.get_path_effects(): + for path_effect in self.get_path_effects(): + path_effect.draw_tex(renderer, gc, x, y, clean_line, + self._fontproperties, angle) + else: + renderer.draw_tex(gc, x, y, clean_line, + self._fontproperties, angle) renderer.close_group('text') return @@ -570,9 +594,15 @@ y = canvash-y clean_line, ismath = self.is_math_text(line) - renderer.draw_text(gc, x, y, clean_line, - self._fontproperties, angle, - ismath=ismath) + if self.get_path_effects(): + for path_effect in self.get_path_effects(): + path_effect.draw_text(renderer, gc, x, y, clean_line, + self._fontproperties, angle, + ismath=ismath) + else: + renderer.draw_text(gc, x, y, clean_line, + self._fontproperties, angle, + ismath=ismath) gc.restore() renderer.close_group('text') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7891 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7891&view=rev Author: leejjoon Date: 2009年10月19日 04:17:32 +0000 (2009年10月19日) Log Message: ----------- Add "use_clabeltext" option to clabel. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/contour.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年10月17日 13:02:30 UTC (rev 7890) +++ trunk/matplotlib/CHANGELOG 2009年10月19日 04:17:32 UTC (rev 7891) @@ -1,3 +1,7 @@ +2009年10月19日 Add "use_clabeltext" option to clabel. If True, clabels + will be created with ClabelText class, which recalculates + rotation angle of the label during the drawing time. + 2009年10月16日 Make AutoDateFormatter actually use any specified timezone setting.This was only working correctly when no timezone was specified. - RMM Modified: trunk/matplotlib/lib/matplotlib/contour.py =================================================================== --- trunk/matplotlib/lib/matplotlib/contour.py 2009年10月17日 13:02:30 UTC (rev 7890) +++ trunk/matplotlib/lib/matplotlib/contour.py 2009年10月19日 04:17:32 UTC (rev 7891) @@ -29,6 +29,21 @@ # per level. +class ClabelText(text.Text): + """ + Unlike the ordinary text, the get_rotation returns an updated + angle in the pixel coordinate assuming that the input rotation is + an angle in data coordinate (or whatever transform set). + """ + def get_rotation(self): + angle = text.Text.get_rotation(self) + trans = self.get_transform() + x, y = self.get_position() + new_angles = trans.transform_angles(np.array([angle]), + np.array([[x, y]])) + return new_angles[0] + + class ContourLabeler: '''Mixin to provide labelling capability to ContourSet''' @@ -95,6 +110,12 @@ if *True* (default), label rotations will always be plus or minus 90 degrees from level. + *use_clabeltext*: + if *True* (default is False), ClabelText class (instead of + matplotlib.Text) is used to create labels. ClabelText + recalculates rotation angles of texts during the drawing time, + therefore this can be used if aspect of the axes changes. + .. plot:: mpl_examples/pylab_examples/contour_demo.py """ @@ -117,6 +138,8 @@ self.labelFmt = kwargs.get('fmt', '%1.3f') _colors = kwargs.get('colors', None) + self._use_clabeltext = kwargs.get('use_clabeltext', False) + # Detect if manual selection is desired and remove from argument list self.labelManual=kwargs.get('manual',False) @@ -435,13 +458,29 @@ return (rotation,nlc) - - def add_label(self,x,y,rotation,lev,cvalue): + def _get_label_text(self,x,y,rotation): dx,dy = self.ax.transData.inverted().transform_point((x,y)) t = text.Text(dx, dy, rotation = rotation, horizontalalignment='center', verticalalignment='center') + return t + def _get_label_clabeltext(self,x,y,rotation): + # x, y, rotation is given in pixel coordinate. Convert them to + # the data coordinate and create a label using ClabelText + # class. This way, the roation of the clabel is along the + # contour line always. + transDataInv = self.ax.transData.inverted() + dx,dy = transDataInv.transform_point((x,y)) + drotation = transDataInv.transform_angles(np.array([rotation]), + np.array([[x,y]])) + t = ClabelText(dx, dy, rotation = drotation[0], + horizontalalignment='center', + verticalalignment='center') + + return t + + def _add_label(self, t, x, y, lev, cvalue): color = self.labelMappable.to_rgba(cvalue,alpha=self.alpha) _text = self.get_text(lev,self.labelFmt) @@ -453,6 +492,28 @@ # Add label to plot here - useful for manual mode label selection self.ax.add_artist(t) + def add_label(self,x,y,rotation,lev,cvalue): + """ + Addd contour label using Text class. + """ + + t = self._get_label_text(x,y,rotation) + self._add_label(t, x, y, lev, cvalue) + + def add_label_clabeltext(self,x,y,rotation,lev,cvalue): + """ + Addd contour label using ClabelText class. + """ + # x, y, rotation is given in pixel coordinate. Convert them to + # the data coordinate and create a label using ClabelText + # class. This way, the roation of the clabel is along the + # contour line always. + + t = self._get_label_clabeltext(x,y,rotation) + self._add_label(t, x, y, lev, cvalue) + + + def pop_label(self,index=-1): '''Defaults to removing last label, but any index can be supplied''' self.labelCValues.pop(index) @@ -462,6 +523,11 @@ def labels(self, inline, inline_spacing): trans = self.ax.transData # A bit of shorthand + if self._use_clabeltext: + add_label = self.add_label_clabeltext + else: + add_label = self.add_label + for icon, lev, fsize, cvalue in zip( self.labelIndiceList, self.labelLevelList, self.labelFontSizeList, self.labelCValueList ): @@ -493,7 +559,7 @@ inline_spacing ) # Actually add the label - self.add_label(x,y,rotation,lev,cvalue) + add_label(x,y,rotation,lev,cvalue) # If inline, add new contours if inline: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7890 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7890&view=rev Author: jswhit Date: 2009年10月17日 13:02:30 +0000 (2009年10月17日) Log Message: ----------- remove restriction that cyclic point be included in shiftgrid function (patch from Eric Bruning). Add unit tests for shiftgrid in test.py Modified Paths: -------------- trunk/toolkits/basemap/Changelog trunk/toolkits/basemap/README trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py trunk/toolkits/basemap/lib/mpl_toolkits/basemap/test.py Modified: trunk/toolkits/basemap/Changelog =================================================================== --- trunk/toolkits/basemap/Changelog 2009年10月16日 17:31:42 UTC (rev 7889) +++ trunk/toolkits/basemap/Changelog 2009年10月17日 13:02:30 UTC (rev 7890) @@ -1,4 +1,6 @@ version 0.99.5 (not yet released) + * shiftgrid no longer requires a cyclic point to be present + (patch from Eric Bruning). * fix date2index bugs. * update date2index function with a bug-fix from netcdf4-python. * in contourf method, mask data outside map projection region Modified: trunk/toolkits/basemap/README =================================================================== --- trunk/toolkits/basemap/README 2009年10月16日 17:31:42 UTC (rev 7889) +++ trunk/toolkits/basemap/README 2009年10月17日 13:02:30 UTC (rev 7890) @@ -140,5 +140,6 @@ Chris Murphy Pierre Gerard-Marchant Christoph Gohlke +Eric Bruning for valuable contributions. Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py =================================================================== --- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2009年10月16日 17:31:42 UTC (rev 7889) +++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2009年10月17日 13:02:30 UTC (rev 7890) @@ -3677,10 +3677,9 @@ dataout = np.where(xymask,masked,dataout) return dataout -def shiftgrid(lon0,datain,lonsin,start=True): +def shiftgrid(lon0,datain,lonsin,start=True,cyclic=360.0): """ Shift global lat/lon grid east or west. - assumes wraparound (or cyclic point) is included. .. tabularcolumns:: |l|L| @@ -3702,15 +3701,21 @@ start if True, lon0 represents the starting longitude of the new grid. if False, lon0 is the ending longitude. Default True. + cyclic width of periodic domain (default 360) ============== ==================================================== returns ``dataout,lonsout`` (data and longitudes on shifted grid). """ - if np.fabs(lonsin[-1]-lonsin[0]-360.) > 1.e-4: - raise ValueError, 'cyclic point not included' + if np.fabs(lonsin[-1]-lonsin[0]-cyclic) > 1.e-4: + # Use all data instead of raise ValueError, 'cyclic point not included' + start_idx = 0 + else: + # If cyclic, remove the duplicate point + start_idx = 1 if lon0 < lonsin[0] or lon0 > lonsin[-1]: raise ValueError, 'lon0 outside of range of lonsin' i0 = np.argmin(np.fabs(lonsin-lon0)) + i0_shift = len(lonsin)-i0 if hasattr(datain,'mask'): dataout = ma.zeros(datain.shape,datain.dtype) else: @@ -3720,15 +3725,15 @@ else: lonsout = np.zeros(lonsin.shape,lonsin.dtype) if start: - lonsout[0:len(lonsin)-i0] = lonsin[i0:] + lonsout[0:i0_shift] = lonsin[i0:] else: - lonsout[0:len(lonsin)-i0] = lonsin[i0:]-360. - dataout[:,0:len(lonsin)-i0] = datain[:,i0:] + lonsout[0:i0_shift] = lonsin[i0:]-cyclic + dataout[:,0:i0_shift] = datain[:,i0:] if start: - lonsout[len(lonsin)-i0:] = lonsin[1:i0+1]+360. + lonsout[i0_shift:] = lonsin[start_idx:i0+start_idx]+cyclic else: - lonsout[len(lonsin)-i0:] = lonsin[1:i0+1] - dataout[:,len(lonsin)-i0:] = datain[:,1:i0+1] + lonsout[i0_shift:] = lonsin[start_idx:i0+start_idx] + dataout[:,i0_shift:] = datain[:,start_idx:i0+start_idx] return dataout,lonsout def addcyclic(arrin,lonsin): Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/test.py =================================================================== --- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/test.py 2009年10月16日 17:31:42 UTC (rev 7889) +++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/test.py 2009年10月17日 13:02:30 UTC (rev 7890) @@ -1,10 +1,12 @@ -from mpl_toolkits.basemap import Basemap +from mpl_toolkits.basemap import Basemap, shiftgrid import numpy as np # beginnings of a test suite. -from numpy.testing import NumpyTestCase,assert_almost_equal -class TestRotateVector(NumpyTestCase): +from numpy.testing import TestCase,assert_almost_equal + +class TestRotateVector(TestCase): + def make_array(self): lat = np.array([0, 45, 75, 90]) lon = np.array([0,90,180,270]) @@ -17,7 +19,6 @@ B = Basemap() u,v,lat,lon=self.make_array() ru, rv = B.rotate_vector(u,v, lon, lat) - # Check that the vectors are identical. assert_almost_equal(ru, u) assert_almost_equal(rv, v) @@ -37,20 +38,74 @@ B=Basemap(projection='npstere', boundinglat=50., lon_0=0.) u,v,lat,lon=self.make_array() v = np.ones((len(lat), len(lon))) - ru, rv = B.rotate_vector(u,v, lon, lat) - assert_almost_equal(ru[2, :],[1,-1,-1,1], 6) assert_almost_equal(rv[2, :],[1,1,-1,-1], 6) +class TestShiftGrid(TestCase): + + def make_data_cyc(self): + loncyc = np.array([0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300,\ + 330, 360],dtype=np.float) + gridcyc = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,\ + 11, 0]],dtype=np.float) + lonoutcyc = np.array([-180, -150, -120, -90, -60, -30, 0, 30,60,90,\ + 120, 150, 180],dtype=np.float) + gridoutcyc = np.array([[ 6, 7, 8, 9, 10, 11, 0, 1, 2,3,\ + 4, 5, 6]],dtype=np.float) + return loncyc, gridcyc, lonoutcyc, gridoutcyc + + def make_data_nocyc(self): + lonnocyc = np.array([0, 30, 60, 90, 120, 150, 180, 210, 240, 270,\ + 300, 330],dtype=np.float) + gridnocyc = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\ + 10, 11]],dtype=np.float) + lonoutnocyc = np.array([-180, -150, -120, -90, -60, -30, 0, 30, 60,\ + 90, 120, 150],dtype=np.float) + gridoutnocyc = np.array([[ 6, 7, 8, 9, 10, 11, 0, 1, 2,\ + 3, 4, 5]],dtype=np.float) + return lonnocyc, gridnocyc, lonoutnocyc, gridoutnocyc + + def make_data_nocyc2(self): + lonnocyc2 = np.array([15, 45, 75, 105, 135, 165, 195, 225, 255, 285,\ + 315, 345],dtype=np.float) + gridnocyc2 = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9,\ + 10, 11]],dtype=np.float) + lonoutnocyc2 = np.array([-165, -135, -105, -75, -45, -15, 15,45,75,\ + 105, 135, 165],dtype=np.float) + gridoutnocyc2 = np.array([[ 6, 7, 8, 9, 10, 11, 0, 1, 2,\ + 3, 4, 5]],dtype=np.float) + return lonnocyc2, gridnocyc2, lonoutnocyc2, gridoutnocyc2 + + def test_cyc(self): + lonin, gridin, lonout, gridout = self.make_data_cyc() + grid, lon = shiftgrid(lonin[len(lonin)/2], gridin, lonin, start=False) + assert (lon==lonout).all() + assert (grid==gridout).all() + + def test_no_cyc(self): + lonin, gridin, lonout, gridout = self.make_data_nocyc() + grid, lon = shiftgrid(lonin[len(lonin)/2], gridin, lonin, start=False) + assert (lon==lonout).all() + assert (grid==gridout).all() + + def test_no_cyc2(self): + lonin, gridin, lonout, gridout = self.make_data_nocyc2() + grid, lon = shiftgrid(lonin[len(lonin)/2], gridin, lonin, start=False) + assert (lon==lonout).all() + assert (grid==gridout).all() + + def test(): """ Run some tests. """ import unittest - suite = unittest.makeSuite(TestRotateVector,'test') + rotatevector_suite = unittest.makeSuite(TestRotateVector,'test') + shiftgrid_suite = unittest.makeSuite(TestShiftGrid,'test') runner = unittest.TextTestRunner() - runner.run(suite) + runner.run(rotatevector_suite) + runner.run(shiftgrid_suite) if __name__ == '__main__': test() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7889 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7889&view=rev Author: ryanmay Date: 2009年10月16日 17:31:42 +0000 (2009年10月16日) Log Message: ----------- Make AutoDateFormatter actually use any specified timezone setting. This was only working correctly when no timezone was specified. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/dates.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年10月16日 04:38:36 UTC (rev 7888) +++ trunk/matplotlib/CHANGELOG 2009年10月16日 17:31:42 UTC (rev 7889) @@ -1,6 +1,10 @@ +2009年10月16日 Make AutoDateFormatter actually use any specified + timezone setting.This was only working correctly + when no timezone was specified. - RMM + 2009年09月27日 Beginnings of a capability to test the pdf backend. - JKS -2009年09月27日 Add a savefig.extension rcparam to control the default +2009年09月27日 Add a savefig.extension rcparam to control the default filename extension used by savefig. - JKS =============================================== @@ -15,18 +19,18 @@ against exceptions in case a dvi font is missing some metrics. - JKS 2009年09月15日 Implement draw_text and draw_tex method of backend_base using - the textpath module. Implement draw_tex method of the svg + the textpath module. Implement draw_tex method of the svg backend. - JJL 2009年09月15日 Don't fail on AFM files containing floating-point bounding boxes - JKS -2009年09月13日 AxesGrid : add modified version of colorbar. Add colorbar +2009年09月13日 AxesGrid : add modified version of colorbar. Add colorbar location howto. - JJL -2009年09月07日 AxesGrid : implemented axisline style. +2009年09月07日 AxesGrid : implemented axisline style. Added a demo examples/axes_grid/demo_axisline_style.py- JJL -2009年09月04日 Make the textpath class as a separate moduel +2009年09月04日 Make the textpath class as a separate moduel (textpath.py). Add support for mathtext and tex.- JJL 2009年09月01日 Added support for Gouraud interpolated triangles. Modified: trunk/matplotlib/lib/matplotlib/dates.py =================================================================== --- trunk/matplotlib/lib/matplotlib/dates.py 2009年10月16日 04:38:36 UTC (rev 7888) +++ trunk/matplotlib/lib/matplotlib/dates.py 2009年10月16日 17:31:42 UTC (rev 7889) @@ -450,7 +450,7 @@ fmt = self.scaled[k] break - self._formatter = DateFormatter(fmt) + self._formatter = DateFormatter(fmt, self._tz) return self._formatter(x, pos) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7888 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7888&view=rev Author: leejjoon Date: 2009年10月16日 04:38:36 +0000 (2009年10月16日) Log Message: ----------- Merged revisions 7887 via svnmerge from https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/branches/v0_99_maint ........ r7887 | leejjoon | 2009年10月16日 00:35:20 -0400 (2009年10月16日) | 1 line fix Text.get_prop_tup omitting _rotation_mode. patch by Stan West ........ Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/text.py Property Changed: ---------------- trunk/matplotlib/ Property changes on: trunk/matplotlib ___________________________________________________________________ Modified: svnmerge-integrated - /branches/mathtex:1-7263 /branches/v0_99_maint:1-7884 + /branches/mathtex:1-7263 /branches/v0_99_maint:1-7887 Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2009年10月16日 04:35:20 UTC (rev 7887) +++ trunk/matplotlib/lib/matplotlib/text.py 2009年10月16日 04:38:36 UTC (rev 7888) @@ -674,7 +674,8 @@ x, y = self.get_position() return (x, y, self.get_text(), self._color, self._verticalalignment, self._horizontalalignment, - hash(self._fontproperties), self._rotation, + hash(self._fontproperties), + self._rotation, self._rotation_mode, self.figure.dpi, id(self._renderer), ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 7887 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7887&view=rev Author: leejjoon Date: 2009年10月16日 04:35:20 +0000 (2009年10月16日) Log Message: ----------- fix Text.get_prop_tup omitting _rotation_mode. patch by Stan West Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/text.py Modified: branches/v0_99_maint/lib/matplotlib/text.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/text.py 2009年10月16日 02:11:14 UTC (rev 7886) +++ branches/v0_99_maint/lib/matplotlib/text.py 2009年10月16日 04:35:20 UTC (rev 7887) @@ -664,7 +664,8 @@ x, y = self.get_position() return (x, y, self.get_text(), self._color, self._verticalalignment, self._horizontalalignment, - hash(self._fontproperties), self._rotation, + hash(self._fontproperties), + self._rotation, self._rotation_mode, self.figure.dpi, id(self._renderer), ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.