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
(6) |
2
(1) |
3
(6) |
4
|
5
(1) |
6
|
7
(4) |
8
(2) |
9
(1) |
10
(5) |
11
(4) |
12
(2) |
13
(7) |
14
|
15
(2) |
16
(2) |
17
(1) |
18
(3) |
19
|
20
(1) |
21
(8) |
22
(3) |
23
|
24
|
25
|
26
|
27
(1) |
28
(2) |
29
|
30
|
31
(4) |
|
|
Revision: 8059 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8059&view=rev Author: mdboom Date: 2009年12月31日 16:45:59 +0000 (2009年12月31日) Log Message: ----------- Add support for mathtext markers (thanks to tcb for original work) Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/examples/pylab_examples/line_styles.py trunk/matplotlib/lib/matplotlib/cbook.py trunk/matplotlib/lib/matplotlib/lines.py trunk/matplotlib/lib/matplotlib/text.py trunk/matplotlib/src/_path.cpp Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月31日 15:48:55 UTC (rev 8058) +++ trunk/matplotlib/CHANGELOG 2009年12月31日 16:45:59 UTC (rev 8059) @@ -1,3 +1,6 @@ +2009年12月31日 Add support for using math text as marker symbols (Thanks to tcb) + - MGD + 2009年12月31日 Commit a workaround for a regression in PyQt4-4.6.{0,1} - DSD 2009年12月22日 Fix cmap data for gist_earth_r, etc. -JJL @@ -20,7 +23,7 @@ Added new examples. - JJL 2009年12月01日 Applied Laurent Dufrechou's patch to improve blitting with - the qt4 backend - DSD + the qt4 backend - DSD 2009年11月13日 The pdf backend now allows changing the contents of a pdf file's information dictionary via PdfPages.infodict. - JKS @@ -153,35 +156,35 @@ 2009年08月06日 Tagging the 0.99.0 release at svn r7397 - JDH - * fixed an alpha colormapping bug posted on sf 2832575 + * fixed an alpha colormapping bug posted on sf 2832575 - * fix typo in axes_divider.py. use nanmin, nanmax in angle_helper.py + * fix typo in axes_divider.py. use nanmin, nanmax in angle_helper.py (patch by Christoph Gohlke) - * remove dup gui event in enter/leave events in gtk + * remove dup gui event in enter/leave events in gtk - * lots of fixes for os x binaries (Thanks Russell Owen) + * lots of fixes for os x binaries (Thanks Russell Owen) - * attach gtk events to mpl events -- fixes sf bug 2816580 + * attach gtk events to mpl events -- fixes sf bug 2816580 - * applied sf patch 2815064 (middle button events for wx) and + * applied sf patch 2815064 (middle button events for wx) and patch 2818092 (resize events for wx) - * fixed boilerplate.py so it doesn't break the ReST docs. + * fixed boilerplate.py so it doesn't break the ReST docs. - * removed a couple of cases of mlab.load + * removed a couple of cases of mlab.load - * fixed rec2csv win32 file handle bug from sf patch 2831018 + * fixed rec2csv win32 file handle bug from sf patch 2831018 - * added two examples from Josh Hemann: examples/pylab_examples/barchart_demo2.py + * added two examples from Josh Hemann: examples/pylab_examples/barchart_demo2.py and examples/pylab_examples/boxplot_demo2.py - * handled sf bugs 2831556 and 2830525; better bar error messages and + * handled sf bugs 2831556 and 2830525; better bar error messages and backend driver configs - * added miktex win32 patch from sf patch 2820194 + * added miktex win32 patch from sf patch 2820194 - * apply sf patches 2830233 and 2823885 for osx setup and 64 bit; thanks Michiel + * apply sf patches 2830233 and 2823885 for osx setup and 64 bit; thanks Michiel 2009年08月04日 Made cbook.get_sample_data make use of the ETag and Last-Modified headers of mod_dav_svn. - JKS Modified: trunk/matplotlib/examples/pylab_examples/line_styles.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/line_styles.py 2009年12月31日 15:48:55 UTC (rev 8058) +++ trunk/matplotlib/examples/pylab_examples/line_styles.py 2009年12月31日 16:45:59 UTC (rev 8059) @@ -17,19 +17,28 @@ except TypeError: pass -styles = linestyles + markers +styles = markers + [ + r'$\lambda$', + r'$\bowtie$', + r'$\circlearrowleft$', + r'$\clubsuit$', + r'$\checkmark$'] colors = ('b', 'g', 'r', 'c', 'm', 'y', 'k') +plt.figure(figsize=(8,8)) axisNum = 0 -for row in range(5): +for row in range(6): for col in range(5): axisNum += 1 - ax = plt.subplot(5, 5, axisNum) - style = styles[axisNum % len(styles) ] - color = colors[axisNum % len(colors) ] - plt.plot(t,s, style + color, markersize=10) + ax = plt.subplot(6, 5, axisNum) + color = colors[axisNum % len(colors)] + if axisNum < len(linestyles): + plt.plot(t, s, linestyles[axisNum], color=color, markersize=10) + else: + style = styles[(axisNum - len(linestyles)) % len(styles)] + plt.plot(t, s, linestyle='None', marker=style, color=color, markersize=10) ax.set_yticklabels([]) ax.set_xticklabels([]) Modified: trunk/matplotlib/lib/matplotlib/cbook.py =================================================================== --- trunk/matplotlib/lib/matplotlib/cbook.py 2009年12月31日 15:48:55 UTC (rev 8058) +++ trunk/matplotlib/lib/matplotlib/cbook.py 2009年12月31日 16:45:59 UTC (rev 8059) @@ -1676,8 +1676,17 @@ else: break +def is_math_text(s): + # Did we find an even number of non-escaped dollar signs? + # If so, treat is as math text. + s = unicode(s) + dollar_count = s.count(r'$') - s.count(r'\$') + even_dollars = (dollar_count > 0 and dollar_count % 2 == 0) + return even_dollars + + if __name__=='__main__': assert( allequal([1,1,1]) ) assert(not allequal([1,1,0]) ) Modified: trunk/matplotlib/lib/matplotlib/lines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/lines.py 2009年12月31日 15:48:55 UTC (rev 8058) +++ trunk/matplotlib/lib/matplotlib/lines.py 2009年12月31日 16:45:59 UTC (rev 8059) @@ -12,7 +12,7 @@ import artist from artist import Artist from cbook import iterable, is_string_like, is_numlike, ls_mapper, dedent,\ -flatten +flatten, is_math_text from colors import colorConverter from path import Path from transforms import Affine2D, Bbox, TransformedPath, IdentityTransform @@ -20,6 +20,7 @@ from matplotlib import rcParams from artist import allow_rasterization from matplotlib import docstring +from matplotlib.font_manager import FontProperties # special-purpose marker identifiers: (TICKLEFT, TICKRIGHT, TICKUP, TICKDOWN, @@ -139,7 +140,7 @@ } filled_markers = ('o', '^', 'v', '<', '>', - 's', 'd', 'D', 'h', 'H', 'p', '*') + 's', 'd', 'D', 'h', 'H', 'p', '*') zorder = 2 validCap = ('butt', 'round', 'projecting') @@ -535,7 +536,7 @@ gc.set_foreground(self.get_markeredgecolor()) gc.set_linewidth(self._markeredgewidth) gc.set_alpha(self._alpha) - funcname = self._markers.get(self._marker, '_draw_nothing') + funcname = self._markerFunc if funcname != '_draw_nothing': tpath, affine = self._transformed_path.get_transformed_points_and_affine() if len(tpath.vertices): @@ -573,7 +574,8 @@ def get_markeredgecolor(self): if (is_string_like(self._markeredgecolor) and self._markeredgecolor == 'auto'): - if self._marker in self.filled_markers: + if (self._marker in self.filled_markers or + is_math_text(self._marker)): return 'k' else: return self._color @@ -774,6 +776,7 @@ 'None' nothing ' ' nothing '' nothing + '$...$' render the string using mathtext ========== ========================== @@ -782,16 +785,18 @@ | '<' | '>' | 'D' | 'H' | '^' | '_' | 'd' | 'h' | 'o' | 'p' | 's' | 'v' | 'x' | '|' | TICKUP | TICKDOWN | TICKLEFT | TICKRIGHT - | 'None' | ' ' | '' ] + | 'None' | ' ' | '' | '$...$'] """ - if marker not in self._markers: + if marker in self._markers: + self._marker = marker + self._markerFunc = self._markers[marker] + elif is_math_text(marker): + self._marker = marker + self._markerFunc = '_draw_mathtext_path' + else: #already handle ' ', '' in marker list verbose.report('Unrecognized marker style %s, %s' % (marker, type(marker))) - if marker in [' ','']: - marker = 'None' - self._marker = marker - self._markerFunc = self._markers[marker] def set_markeredgecolor(self, ec): """ @@ -867,6 +872,38 @@ def _draw_lines(self, renderer, gc, path, trans): self._lineFunc(renderer, gc, path, trans) + def _draw_mathtext_path(self, renderer, gc, path, trans): + """ + Draws mathtext markers '$...$' using TextPath object. + + Submitted by tcb + """ + from matplotlib.patches import PathPatch + from matplotlib.text import TextPath + + gc.set_snap(False) + + # again, the properties could be initialised just once outside + # this function + # Font size is irrelevant here, it will be rescaled based on + # the drawn size later + props = FontProperties(size=1.0) + text = TextPath(xy=(0,0), s=self.get_marker(), fontproperties=props, + usetex=rcParams['text.usetex']) + if len(text.vertices) == 0: + return + xmin, ymin = text.vertices.min(axis=0) + xmax, ymax = text.vertices.max(axis=0) + width = xmax - xmin + height = ymax - ymin + max_dim = max(width, height) + path_trans = Affine2D() \ + .translate(0.5 * -width, 0.5 * -height) \ + .scale((renderer.points_to_pixels(self.get_markersize()) / max_dim)) + + rgbFace = self._get_rgb_face() + renderer.draw_markers(gc, text, path_trans, path, trans, rgbFace) + def _draw_steps_pre(self, renderer, gc, path, trans): vertices = self._xy steps = ma.zeros((2*len(vertices)-1, 2), np.float_) @@ -1288,6 +1325,7 @@ self._linestyle = other._linestyle self._marker = other._marker + self._markerFunc = other._markerFunc self._drawstyle = other._drawstyle Modified: trunk/matplotlib/lib/matplotlib/text.py =================================================================== --- trunk/matplotlib/lib/matplotlib/text.py 2009年12月31日 15:48:55 UTC (rev 8058) +++ trunk/matplotlib/lib/matplotlib/text.py 2009年12月31日 16:45:59 UTC (rev 8059) @@ -997,13 +997,10 @@ """ # Did we find an even number of non-escaped dollar signs? # If so, treat is as math text. - dollar_count = s.count(r'$') - s.count(r'\$') - even_dollars = (dollar_count > 0 and dollar_count % 2 == 0) - if rcParams['text.usetex']: return s, 'TeX' - if even_dollars: + if cbook.is_math_text(s): return s, True else: return s.replace(r'\$', '$'), False Modified: trunk/matplotlib/src/_path.cpp =================================================================== --- trunk/matplotlib/src/_path.cpp 2009年12月31日 15:48:55 UTC (rev 8058) +++ trunk/matplotlib/src/_path.cpp 2009年12月31日 16:45:59 UTC (rev 8059) @@ -922,9 +922,13 @@ vertices = (PyArrayObject*)PyArray_FromObject (vertices_obj.ptr(), PyArray_DOUBLE, 1, 2); if (!vertices || - (PyArray_NDIM(vertices) == 2 && PyArray_DIM(vertices, 1) != 2) || - (PyArray_NDIM(vertices) == 1 && PyArray_DIM(vertices, 0) != 2)) + (PyArray_NDIM(vertices) == 2 && PyArray_DIM(vertices, 0) != 0 && + PyArray_DIM(vertices, 1) != 2) || + (PyArray_NDIM(vertices) == 1 && + PyArray_DIM(vertices, 0) != 2 && PyArray_DIM(vertices, 0) != 0)) + { throw Py::ValueError("Invalid vertices array."); + } transform = (PyArrayObject*) PyArray_FromObject (transform_obj.ptr(), PyArray_DOUBLE, 2, 2); @@ -979,7 +983,7 @@ vertex_in += stride0; } } - else + else if (PyArray_DIM(vertices, 0) != 0) { char* vertex_in = PyArray_BYTES(vertices); double* vertex_out = (double*)PyArray_DATA(result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8058 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8058&view=rev Author: mdboom Date: 2009年12月31日 15:48:55 +0000 (2009年12月31日) Log Message: ----------- Merged revisions 8016,8036,8057 via svnmerge from https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_99_maint ........ r8016 | heeres | 2009年12月09日 19:09:03 -0500 (2009年12月09日) | 2 lines Mplot3d: fix scatter3d markers bug ........ r8036 | jdh2358 | 2009年12月16日 14:21:44 -0500 (2009年12月16日) | 1 line add mpl book to index sidebar ........ r8057 | mdboom | 2009年12月31日 10:46:58 -0500 (2009年12月31日) | 2 lines [2916753] Wrong API signature- yscale ........ Modified Paths: -------------- trunk/matplotlib/doc/_templates/indexsidebar.html trunk/matplotlib/lib/matplotlib/pyplot.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-8003 + /branches/mathtex:1-7263 /branches/v0_99_maint:1-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 Modified: trunk/matplotlib/doc/_templates/indexsidebar.html =================================================================== --- trunk/matplotlib/doc/_templates/indexsidebar.html 2009年12月31日 15:46:58 UTC (rev 8057) +++ trunk/matplotlib/doc/_templates/indexsidebar.html 2009年12月31日 15:48:55 UTC (rev 8058) @@ -9,6 +9,12 @@ pathto('users/installing') }}">installing</a> </p> +<p>Sandro Tosi has a new book +<a href="http://www.packtpub.com/matplotlib-python-development/book">Matplotlib for python +developers</a> +also +at <a href="http://www.amazon.com/Matplotlib-Python-Developers-Sandro-Tosi/dp/1847197906">amazon</a>.</p> + <p>Build websites like matplotlib's, with <a href="http://sphinx.pocoo.org/">sphinx</a> and extensions for mpl plots, math, inheritance diagrams -- try 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 Modified: trunk/matplotlib/lib/matplotlib/pyplot.py =================================================================== --- trunk/matplotlib/lib/matplotlib/pyplot.py 2009年12月31日 15:46:58 UTC (rev 8057) +++ trunk/matplotlib/lib/matplotlib/pyplot.py 2009年12月31日 15:48:55 UTC (rev 8058) @@ -945,7 +945,7 @@ """ call signature:: - xscale(scale, **kwargs) + yscale(scale, **kwargs) Set the scaling for the y-axis: %(scale)s 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 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,7901-7903,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003 + /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,7916,7919,7924,7928,7944,7952,7970,7972,7981,7983,7989-7991,7998,8001,8003,8016-8057 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8057 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8057&view=rev Author: mdboom Date: 2009年12月31日 15:46:58 +0000 (2009年12月31日) Log Message: ----------- [2916753] Wrong API signature- yscale Modified Paths: -------------- branches/v0_99_maint/lib/matplotlib/pyplot.py Modified: branches/v0_99_maint/lib/matplotlib/pyplot.py =================================================================== --- branches/v0_99_maint/lib/matplotlib/pyplot.py 2009年12月31日 12:51:43 UTC (rev 8056) +++ branches/v0_99_maint/lib/matplotlib/pyplot.py 2009年12月31日 15:46:58 UTC (rev 8057) @@ -954,7 +954,7 @@ """ call signature:: - xscale(scale, **kwargs) + yscale(scale, **kwargs) Set the scaling for the y-axis: %(scale)s This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8056 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8056&view=rev Author: dsdale Date: 2009年12月31日 12:51:43 +0000 (2009年12月31日) Log Message: ----------- workaround for a regression in PyQt4-4.6.{0,1} Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月28日 01:34:06 UTC (rev 8055) +++ trunk/matplotlib/CHANGELOG 2009年12月31日 12:51:43 UTC (rev 8056) @@ -1,3 +1,5 @@ +2009年12月31日 Commit a workaround for a regression in PyQt4-4.6.{0,1} - DSD + 2009年12月22日 Fix cmap data for gist_earth_r, etc. -JJL 2009年12月20日 spines: put spines in data coordinates, add set_bounds() Modified: trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py 2009年12月28日 01:34:06 UTC (rev 8055) +++ trunk/matplotlib/lib/matplotlib/backends/backend_qt4.py 2009年12月31日 12:51:43 UTC (rev 8056) @@ -206,6 +206,22 @@ self._idle = True if d: QtCore.QTimer.singleShot(0, idle_draw) + +# XXX Hackish fix: There's a bug in PyQt. See this thread for details: +# http://old.nabble.com/Qt4-backend:-critical-bug-with-PyQt4-v4.6%2B-td26205716.html +# Once a release of Qt/PyQt is available without the bug, the version check +# below can be tightened further to only be applied in the necessary versions. +if Qt.PYQT_VERSION_STR.startswith('4.6'): + class FigureWindow(QtGui.QMainWindow): + def __init__(self): + super(FigureWindow, self).__init__() + def closeEvent(self, event): + super(FigureWindow, self).closeEvent(event) + self.emit(Qt.SIGNAL('destroyed()')) +else: + FigureWindow = QtGui.QMainWindow +# /end pyqt hackish bugfix + class FigureManagerQT( FigureManagerBase ): """ Public attributes @@ -220,7 +236,7 @@ if DEBUG: print 'FigureManagerQT.%s' % fn_name() FigureManagerBase.__init__( self, canvas, num ) self.canvas = canvas - self.window = QtGui.QMainWindow() + self.window = FigureWindow() self.window.setAttribute(QtCore.Qt.WA_DeleteOnClose) self.window.setWindowTitle("Figure %d" % num) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8055 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8055&view=rev Author: efiring Date: 2009年12月28日 01:34:06 +0000 (2009年12月28日) Log Message: ----------- Fix bug in Line2D from last commit: restore full recache in unit chane callback Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/lines.py Modified: trunk/matplotlib/lib/matplotlib/lines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/lines.py 2009年12月28日 00:21:50 UTC (rev 8054) +++ trunk/matplotlib/lib/matplotlib/lines.py 2009年12月28日 01:34:06 UTC (rev 8055) @@ -388,9 +388,9 @@ def set_axes(self, ax): Artist.set_axes(self, ax) if ax.xaxis is not None: - self._xcid = ax.xaxis.callbacks.connect('units', self.recache) + self._xcid = ax.xaxis.callbacks.connect('units', self.recache_always) if ax.yaxis is not None: - self._ycid = ax.yaxis.callbacks.connect('units', self.recache) + self._ycid = ax.yaxis.callbacks.connect('units', self.recache_always) set_axes.__doc__ = Artist.set_axes.__doc__ def set_data(self, *args): @@ -407,8 +407,11 @@ self.set_xdata(x) self.set_ydata(y) - def recache(self): - if self._invalidx: + def recache_always(self): + self.recache(always=True) + + def recache(self, always=False): + if always or self._invalidx: xconv = self.convert_xunits(self._xorig) if ma.isMaskedArray(self._xorig): x = ma.asarray(xconv, float) @@ -417,7 +420,7 @@ x = x.ravel() else: x = self._x - if self._invalidy: + if always or self._invalidy: yconv = self.convert_yunits(self._yorig) if ma.isMaskedArray(self._yorig): y = ma.asarray(yconv, float) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8054 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8054&view=rev Author: efiring Date: 2009年12月28日 00:21:50 +0000 (2009年12月28日) Log Message: ----------- Line2D: simplify set_data functionality; recache only a coord. that was set. Modified Paths: -------------- trunk/matplotlib/examples/pylab_examples/clippedline.py trunk/matplotlib/lib/matplotlib/lines.py Modified: trunk/matplotlib/examples/pylab_examples/clippedline.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/clippedline.py 2009年12月27日 23:18:51 UTC (rev 8053) +++ trunk/matplotlib/examples/pylab_examples/clippedline.py 2009年12月28日 00:21:50 UTC (rev 8054) @@ -1,6 +1,11 @@ """ Clip a line according to the current xlimits, and change the marker -style when zoomed in +style when zoomed in. + +It is not clear this example is still needed or valid; clipping +is now automatic for Line2D objects when x is sorted in +ascending order. + """ from matplotlib.lines import Line2D @@ -19,8 +24,7 @@ def set_data(self, *args, **kwargs): Line2D.set_data(self, *args, **kwargs) - if self._invalid: - self.recache() + self.recache() self.xorig = np.array(self._x) self.yorig = np.array(self._y) Modified: trunk/matplotlib/lib/matplotlib/lines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/lines.py 2009年12月27日 23:18:51 UTC (rev 8053) +++ trunk/matplotlib/lib/matplotlib/lines.py 2009年12月28日 00:21:50 UTC (rev 8054) @@ -248,7 +248,8 @@ self._xorig = np.asarray([]) self._yorig = np.asarray([]) - self._invalid = True + self._invalidx = True + self._invalidy = True self.set_data(xdata, ydata) def contains(self, mouseevent): @@ -272,7 +273,7 @@ raise ValueError,"pick radius should be a distance" # Make sure we have data to plot - if self._invalid: + if self._invalidy or self._invalidx: self.recache() if len(self._xy)==0: return False,{} @@ -403,36 +404,28 @@ else: x, y = args - not_masked = 0 - if not ma.isMaskedArray(x): - x = np.asarray(x) - not_masked += 1 - if not ma.isMaskedArray(y): - y = np.asarray(y) - not_masked += 1 + self.set_xdata(x) + self.set_ydata(y) - if (not_masked < 2 or - (x is not self._xorig and - (x.shape != self._xorig.shape or np.any(x != self._xorig))) or - (y is not self._yorig and - (y.shape != self._yorig.shape or np.any(y != self._yorig)))): - self._xorig = x - self._yorig = y - self._invalid = True - def recache(self): - #if self.axes is None: print 'recache no axes' - #else: print 'recache units', self.axes.xaxis.units, self.axes.yaxis.units - if ma.isMaskedArray(self._xorig) or ma.isMaskedArray(self._yorig): - x = ma.asarray(self.convert_xunits(self._xorig), float) - y = ma.asarray(self.convert_yunits(self._yorig), float) - x = ma.ravel(x) - y = ma.ravel(y) + if self._invalidx: + xconv = self.convert_xunits(self._xorig) + if ma.isMaskedArray(self._xorig): + x = ma.asarray(xconv, float) + else: + x = np.asarray(xconv, float) + x = x.ravel() else: - x = np.asarray(self.convert_xunits(self._xorig), float) - y = np.asarray(self.convert_yunits(self._yorig), float) - x = np.ravel(x) - y = np.ravel(y) + x = self._x + if self._invalidy: + yconv = self.convert_yunits(self._yorig) + if ma.isMaskedArray(self._yorig): + y = ma.asarray(yconv, float) + else: + y = np.asarray(yconv, float) + y = y.ravel() + else: + y = self._y if len(x)==1 and len(y)>1: x = x * np.ones(y.shape, float) @@ -455,8 +448,7 @@ self._subslice = False if (self.axes and len(x) > 100 and self._is_sorted(x) and self.axes.name == 'rectilinear' and - self.axes.get_xscale() == 'linear' and - self.axes.get_yscale() == 'linear'): + self.axes.get_xscale() == 'linear'): self._subslice = True if hasattr(self, '_path'): interpolation_steps = self._path._interpolation_steps @@ -464,7 +456,8 @@ interpolation_steps = 1 self._path = Path(self._xy, None, interpolation_steps) self._transformed_path = None - self._invalid = False + self._invalidx = False + self._invalidy = False def _transform_path(self, subslice=None): # Masked arrays are now handled by the Path class itself @@ -482,7 +475,8 @@ ACCEPTS: a :class:`matplotlib.transforms.Transform` instance """ Artist.set_transform(self, t) - self._invalid = True + self._invalidx = True + self._invalidy = True def _is_sorted(self, x): "return true if x is sorted" @@ -491,7 +485,7 @@ @allow_rasterization def draw(self, renderer): - if self._invalid: + if self._invalidy or self._invalidx: self.recache() if self._subslice and self.axes: # Need to handle monotonically decreasing case also... @@ -619,7 +613,7 @@ """ if orig: return self._xorig - if self._invalid: + if self._invalidx: self.recache() return self._x @@ -632,7 +626,7 @@ """ if orig: return self._yorig - if self._invalid: + if self._invalidy: self.recache() return self._y @@ -641,7 +635,7 @@ Return the :class:`~matplotlib.path.Path` object associated with this line. """ - if self._invalid: + if self._invalidy or self._invalidx: self.recache() return self._path @@ -649,7 +643,7 @@ """ Return the *xy* data as a Nx2 numpy array. """ - if self._invalid: + if self._invalidy or self.invalidx: self.recache() return self._xy @@ -840,7 +834,8 @@ ACCEPTS: 1D array """ - self.set_data(x, self._yorig) + self._xorig = x + self._invalidx = True def set_ydata(self, y): """ @@ -848,7 +843,8 @@ ACCEPTS: 1D array """ - self.set_data(self._xorig, y) + self._yorig = y + self._invalidy = True def set_dashes(self, seq): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8053 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8053&view=rev Author: efiring Date: 2009年12月27日 23:18:51 +0000 (2009年12月27日) Log Message: ----------- fix whitespace, one docstring in lines.py Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/lines.py Modified: trunk/matplotlib/lib/matplotlib/lines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/lines.py 2009年12月22日 23:43:09 UTC (rev 8052) +++ trunk/matplotlib/lib/matplotlib/lines.py 2009年12月27日 23:18:51 UTC (rev 8053) @@ -233,7 +233,7 @@ self.set_markerfacecolor(markerfacecolor) self.set_markeredgecolor(markeredgecolor) self.set_markeredgewidth(markeredgewidth) - self.set_fillstyle(fillstyle) + self.set_fillstyle(fillstyle) self._point_size_reduction = 0.5 @@ -323,9 +323,9 @@ def get_fillstyle(self): """ - return the marker fillstyle + return the marker fillstyle """ - return self._fillstyle + return self._fillstyle def set_fillstyle(self, fs): """ @@ -335,7 +335,7 @@ ACCEPTS: ['full' | 'left' | 'right' | 'bottom' | 'top'] """ assert fs in ['full', 'left' , 'right' , 'bottom' , 'top'] - self._fillstyle = fs + self._fillstyle = fs def set_markevery(self, every): """ @@ -396,7 +396,7 @@ """ Set the x and y data - ACCEPTS: 2D array + ACCEPTS: 2D array (rows are x, y) or two 1D arrays """ if len(args)==1: x, y = args[0] @@ -931,8 +931,8 @@ def _draw_point(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') w = renderer.points_to_pixels(self._markersize) * \ @@ -946,8 +946,8 @@ _draw_pixel_transform = Affine2D().translate(-0.5, -0.5) def _draw_pixel(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') rgbFace = self._get_rgb_face() @@ -958,8 +958,8 @@ def _draw_circle(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') w = renderer.points_to_pixels(self._markersize) * 0.5 @@ -974,8 +974,8 @@ _triangle_path = Path([[0.0, 1.0], [-1.0, -1.0], [1.0, -1.0], [0.0, 1.0]]) def _draw_triangle_up(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) @@ -987,8 +987,8 @@ def _draw_triangle_down(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) @@ -1000,8 +1000,8 @@ def _draw_triangle_left(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) @@ -1013,8 +1013,8 @@ def _draw_triangle_right(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) @@ -1030,8 +1030,8 @@ side = renderer.points_to_pixels(self._markersize) transform = Affine2D().translate(-0.5, -0.5).scale(side) rgbFace = self._get_rgb_face() - fs = self.get_fillstyle() - if fs=='full': + fs = self.get_fillstyle() + if fs=='full': renderer.draw_markers(gc, Path.unit_rectangle(), transform, path, path_trans, rgbFace) else: @@ -1052,8 +1052,8 @@ path, path_trans, None) def _draw_diamond(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) side = renderer.points_to_pixels(self._markersize) @@ -1064,8 +1064,8 @@ def _draw_thin_diamond(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 3.0) offset = renderer.points_to_pixels(self._markersize) @@ -1077,8 +1077,8 @@ def _draw_pentagon(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) offset = 0.5 * renderer.points_to_pixels(self._markersize) @@ -1088,8 +1088,8 @@ path, path_trans, rgbFace) def _draw_star(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) offset = 0.5 * renderer.points_to_pixels(self._markersize) @@ -1101,8 +1101,8 @@ def _draw_hexagon1(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) offset = 0.5 * renderer.points_to_pixels(self._markersize) @@ -1113,8 +1113,8 @@ def _draw_hexagon2(self, renderer, gc, path, path_trans): - fs = self.get_fillstyle() - if fs!='full': + fs = self.get_fillstyle() + if fs!='full': raise NotImplementedError('non-full markers have not been implemented for this marker style yet; please contribute') gc.set_snap(renderer.points_to_pixels(self._markersize) >= 5.0) offset = 0.5 * renderer.points_to_pixels(self._markersize) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8052 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8052&view=rev Author: efiring Date: 2009年12月22日 23:43:09 +0000 (2009年12月22日) Log Message: ----------- pyplot.spy should set current image only if it is making an image Modified Paths: -------------- trunk/matplotlib/boilerplate.py trunk/matplotlib/lib/matplotlib/pyplot.py Modified: trunk/matplotlib/boilerplate.py =================================================================== --- trunk/matplotlib/boilerplate.py 2009年12月22日 19:49:49 UTC (rev 8051) +++ trunk/matplotlib/boilerplate.py 2009年12月22日 23:43:09 UTC (rev 8052) @@ -86,7 +86,7 @@ 'semilogx', 'semilogy', 'specgram', - 'spy', + #'spy', 'stem', 'step', 'vlines', @@ -111,7 +111,7 @@ 'pcolor' : 'sci(%(ret)s)', 'pcolormesh': 'sci(%(ret)s)', 'imshow' : 'sci(%(ret)s)', - 'spy' : 'sci(%(ret)s)', + #'spy' : 'sci(%(ret)s)', ### may return image or Line2D 'quiver' : 'sci(%(ret)s)', 'specgram' : 'sci(%(ret)s[-1])', Modified: trunk/matplotlib/lib/matplotlib/pyplot.py =================================================================== --- trunk/matplotlib/lib/matplotlib/pyplot.py 2009年12月22日 19:49:49 UTC (rev 8051) +++ trunk/matplotlib/lib/matplotlib/pyplot.py 2009年12月22日 23:43:09 UTC (rev 8052) @@ -1600,6 +1600,27 @@ addendum = docstring.Appender(msg, '\n\n') return lambda func: addendum(docstring.copy_dedent(base)(func)) + +# This function cannot be generated by boilerplate.py because it may +# return an image or a line. +@autogen_docstring(Axes.spy) +def spy(Z, precision=0, marker=None, markersize=None, aspect='equal', hold=None, **kwargs): + ax = gca() + # allow callers to override the hold state by passing hold=True|False + washold = ax.ishold() + + if hold is not None: + ax.hold(hold) + try: + ret = ax.spy(Z, precision, marker, markersize, aspect, **kwargs) + draw_if_interactive() + finally: + ax.hold(washold) + if isinstance(ret, cm.ScalarMappable): + sci(ret) + return ret + + ## Plotting part 2: autogenerated wrappers for axes methods ## # This function was autogenerated by boilerplate.py. Do not edit as @@ -2252,24 +2273,7 @@ sci(ret[-1]) return ret -# This function was autogenerated by boilerplate.py. Do not edit as -# changes will be lost -@autogen_docstring(Axes.spy) -def spy(Z, precision=0, marker=None, markersize=None, aspect='equal', hold=None, **kwargs): - ax = gca() - # allow callers to override the hold state by passing hold=True|False - washold = ax.ishold() - if hold is not None: - ax.hold(hold) - try: - ret = ax.spy(Z, precision, marker, markersize, aspect, **kwargs) - draw_if_interactive() - finally: - ax.hold(washold) - sci(ret) - return ret - # This function was autogenerated by boilerplate.py. Do not edit as # changes will be lost @autogen_docstring(Axes.stem) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8051 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8051&view=rev Author: leejjoon Date: 2009年12月22日 19:49:49 +0000 (2009年12月22日) Log Message: ----------- Fix cmap data for gist_earth_r, etc. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/_cm.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月22日 17:03:29 UTC (rev 8050) +++ trunk/matplotlib/CHANGELOG 2009年12月22日 19:49:49 UTC (rev 8051) @@ -1,3 +1,5 @@ +2009年12月22日 Fix cmap data for gist_earth_r, etc. -JJL + 2009年12月20日 spines: put spines in data coordinates, add set_bounds() call. -ADS Modified: trunk/matplotlib/lib/matplotlib/_cm.py =================================================================== --- trunk/matplotlib/lib/matplotlib/_cm.py 2009年12月22日 17:03:29 UTC (rev 8050) +++ trunk/matplotlib/lib/matplotlib/_cm.py 2009年12月22日 19:49:49 UTC (rev 8051) @@ -1434,7 +1434,7 @@ (0.5490, 0.4719, 0.4719), (0.6980, 0.7176, 0.7176), (0.7882, 0.7553, 0.7553), -(1.0000, 0.9922, 0), +(1.0000, 0.9922, 0.9922), ), 'green': ( (0.0, 0.0, 0.0000), (0.0275, 0.0000, 0.0000), @@ -1458,7 +1458,7 @@ (0.9569, 0.8635, 0.8635), (0.9647, 0.8816, 0.8816), (0.9961, 0.9733, 0.9733), -(1.0000, 0.9843, 0), +(1.0000, 0.9843, 0.9843), ), 'blue': ( (0.0, 0.0, 0.0000), (0.0039, 0.1684, 0.1684), @@ -1470,7 +1470,7 @@ (0.5451, 0.3205, 0.3205), (0.7843, 0.3961, 0.3961), (0.8941, 0.6651, 0.6651), -(1.0000, 0.9843, 0), +(1.0000, 0.9843, 0.9843), )} _gist_gray_data = { @@ -1495,7 +1495,7 @@ (0.7922, 1.0000, 1.0000), (0.8471, 0.6218, 0.6218), (0.8980, 0.9235, 0.9235), -(1.0000, 0.9961, 0), +(1.0000, 0.9961, 0.9961), ), 'green': ( (0.0, 0.0, 0.0000), (0.0510, 0.3722, 0.3722), @@ -1516,9 +1516,9 @@ (0.7922, 0.0000, 0.0000), (0.8431, 0.1753, 0.1753), (0.8980, 0.5000, 0.5000), -(1.0000, 0.9725, 0), +(1.0000, 0.9725, 0.9725), ), 'blue': ( -(0.0, 0.0, 0.5020), +(0.0, 0.5020, 0.5020), (0.0510, 0.0222, 0.0222), (0.1098, 1.0000, 1.0000), (0.2039, 1.0000, 1.0000), @@ -1535,7 +1535,7 @@ (0.8000, 1.0000, 1.0000), (0.8431, 1.0000, 1.0000), (0.8980, 0.9341, 0.9341), -(1.0000, 0.9961, 0), +(1.0000, 0.9961, 0.9961), )} _gist_rainbow_data = ( @@ -1552,7 +1552,7 @@ _gist_stern_data = { 'red': ( (0.000, 0.000, 0.000), (0.0547, 1.000, 1.000), - (0.250, 0.027, 0.027), (0.2500, 0.250, 0.250), + (0.250, 0.027, 0.250), #(0.2500, 0.250, 0.250), (1.000, 1.000, 1.000)), 'green': ((0, 0, 0), (1, 1, 0)), 'blue': ( This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8050 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8050&view=rev Author: mdboom Date: 2009年12月22日 17:03:29 +0000 (2009年12月22日) Log Message: ----------- Add docs for new features in mathtext Modified Paths: -------------- trunk/matplotlib/doc/users/mathtext.rst Modified: trunk/matplotlib/doc/users/mathtext.rst =================================================================== --- trunk/matplotlib/doc/users/mathtext.rst 2009年12月21日 19:49:17 UTC (rev 8049) +++ trunk/matplotlib/doc/users/mathtext.rst 2009年12月22日 17:03:29 UTC (rev 8050) @@ -23,11 +23,11 @@ customization variable ``mathtext.fontset`` (see :ref:`customizing-matplotlib`) -.. note:: - On `"narrow" <http://wordaligned.org/articles/narrow-python>`_ builds +.. note:: + On `"narrow" <http://wordaligned.org/articles/narrow-python>`_ builds of Python, if you use the STIX fonts you should also set ``ps.fonttype`` and ``pdf.fonttype`` to 3 (the default), not 42. - Otherwise `some characters will not be visible + Otherwise `some characters will not be visible <http://thread.gmane.org/gmane.comp.python.matplotlib.general/19963/focus=19978>`_. Here is a simple example:: @@ -85,18 +85,20 @@ \sum_{i=0}^\infty x_i -Fractions ---------- +Fractions, binomials and stacked numbers +---------------------------------------- -Fractions can be created with the ``\frac{}{}`` command:: +Fractions, binomials and stacked numbers can be created with the +``\frac{}{}``, ``\binom{}{}`` and ``\stackrel{}{}`` commands, +respectively:: - r'$\frac{3}{4}$' + r'$\frac{3}{4} \binom{3}{4} \stackrel{3}{4}$' produces .. math:: - \frac{3}{4} + \frac{3}{4} \binom{3}{4} \stackrel{3}{4} Fractions can be arbitrarily nested:: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8049 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8049&view=rev Author: efiring Date: 2009年12月21日 19:49:17 +0000 (2009年12月21日) Log Message: ----------- zorder support in figure: use same sort idiom as in axes Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/figure.py Modified: trunk/matplotlib/lib/matplotlib/figure.py =================================================================== --- trunk/matplotlib/lib/matplotlib/figure.py 2009年12月21日 03:49:59 UTC (rev 8048) +++ trunk/matplotlib/lib/matplotlib/figure.py 2009年12月21日 19:49:17 UTC (rev 8049) @@ -33,6 +33,8 @@ import matplotlib.cbook as cbook from matplotlib import docstring +from operator import itemgetter + docstring.interpd.update(projection_names = get_projection_names()) class SubplotParams: @@ -742,8 +744,6 @@ # a list of (zorder, func_to_call, list_of_args) dsu = [] - - # todo: respect zorder for a in self.patches: dsu.append( (a.get_zorder(), a.draw, [renderer])) @@ -797,8 +797,7 @@ for a in self.legends: dsu.append( (a.get_zorder(), a.draw, [renderer])) - - dsu.sort(key=lambda x: x[0]) + dsu.sort(key=itemgetter(0)) for zorder, func, args in dsu: func(*args) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8048 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8048&view=rev Author: astraw Date: 2009年12月21日 03:49:59 +0000 (2009年12月21日) Log Message: ----------- spines and ticks: implement smart bounds Modified Paths: -------------- trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py trunk/matplotlib/lib/matplotlib/axis.py trunk/matplotlib/lib/matplotlib/spines.py Modified: trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py 2009年12月21日 02:24:14 UTC (rev 8047) +++ trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py 2009年12月21日 03:49:59 UTC (rev 8048) @@ -37,6 +37,8 @@ ax.spines['right'].set_color('none') ax.spines['bottom'].set_position('center') ax.spines['top'].set_color('none') +ax.spines['left'].set_smart_bounds(True) +ax.spines['bottom'].set_smart_bounds(True) ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') @@ -47,6 +49,8 @@ ax.spines['right'].set_color('none') ax.spines['bottom'].set_position('zero') ax.spines['top'].set_color('none') +ax.spines['left'].set_smart_bounds(True) +ax.spines['bottom'].set_smart_bounds(True) ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') @@ -57,6 +61,8 @@ ax.spines['right'].set_color('none') ax.spines['bottom'].set_position(('axes',0.1)) ax.spines['top'].set_color('none') +ax.spines['left'].set_smart_bounds(True) +ax.spines['bottom'].set_smart_bounds(True) ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') @@ -67,15 +73,17 @@ ax.spines['right'].set_color('none') ax.spines['bottom'].set_position(('data',2)) ax.spines['top'].set_color('none') +ax.spines['left'].set_smart_bounds(True) +ax.spines['bottom'].set_smart_bounds(True) ax.xaxis.set_ticks_position('bottom') ax.yaxis.set_ticks_position('left') - # ---------------------------------------------------- def adjust_spines(ax,spines): for loc, spine in ax.spines.iteritems(): if loc in spines: spine.set_position(('outward',10)) # outward by 10 points + spine.set_smart_bounds(True) else: spine.set_color('none') # don't draw spine Modified: trunk/matplotlib/lib/matplotlib/axis.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axis.py 2009年12月21日 02:24:14 UTC (rev 8047) +++ trunk/matplotlib/lib/matplotlib/axis.py 2009年12月21日 03:49:59 UTC (rev 8048) @@ -15,6 +15,7 @@ import matplotlib.ticker as mticker import matplotlib.transforms as mtransforms import matplotlib.units as munits +import numpy as np GRIDLINE_INTERPOLATION_STEPS = 180 @@ -539,6 +540,8 @@ #self.minor = dummy() self._autolabelpos = True + self._smart_bounds = False + self.label = self._get_label() self.labelpad = 5 self.offsetText = self._get_offset_text() @@ -737,6 +740,14 @@ bbox2 = mtransforms.Bbox.from_extents(0, 0, 0, 0) return bbox, bbox2 + def set_smart_bounds(self,value): + """set the axis to have smart bounds""" + self._smart_bounds = value + + def get_smart_bounds(self): + """get whether the axis has smart bounds""" + return self._smart_bounds + @allow_rasterization def draw(self, renderer, *args, **kwargs): 'Draw the axis lines, grid lines, tick lines and labels' @@ -746,7 +757,47 @@ if not self.get_visible(): return renderer.open_group(__name__) interval = self.get_view_interval() - for tick, loc, label in self.iter_ticks(): + tick_tups = [ t for t in self.iter_ticks()] + if self._smart_bounds: + # handle inverted limits + view_low, view_high = min(*interval), max(*interval) + data_low, data_high = self.get_data_interval() + if data_low > data_high: + data_low, data_high = data_high, data_low + locs = [ti[1] for ti in tick_tups] + locs.sort() + locs = np.array(locs) + if len(locs): + if data_low <= view_low: + # data extends beyond view, take view as limit + ilow = view_low + else: + # data stops within view, take best tick + cond = locs <= data_low + good_locs = locs[cond] + if len(good_locs) > 0: + # last tick prior or equal to first data point + ilow = good_locs[-1] + else: + # No ticks (why not?), take first tick + ilow = locs[0] + if data_high >= view_high: + # data extends beyond view, take view as limit + ihigh = view_high + else: + # data stops within view, take best tick + cond = locs >= data_high + good_locs = locs[cond] + if len(good_locs) > 0: + # first tick after or equal to last data point + ihigh = good_locs[0] + else: + # No ticks (why not?), take last tick + ihigh = locs[-1] + tick_tups = [ ti for ti in tick_tups + if (ti[1] >= ilow) and (ti[1] <= ihigh)] + + for tick, loc, label in tick_tups: if tick is None: continue if not mtransforms.interval_contains(interval, loc): continue tick.update_position(loc) Modified: trunk/matplotlib/lib/matplotlib/spines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 02:24:14 UTC (rev 8047) +++ trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 03:49:59 UTC (rev 8048) @@ -59,6 +59,7 @@ self.set_transform(self.axes.transData) # default transform self._bounds = None # default bounds + self._smart_bounds = False # Defer initial position determination. (Not much support for # non-rectangular axes is currently implemented, and this lets @@ -78,6 +79,20 @@ # Note: This cannot be calculated until this is added to an Axes self._patch_transform = mtransforms.IdentityTransform() + def set_smart_bounds(self,value): + """set the spine and associated axis to have smart bounds""" + self._smart_bounds = value + + # also set the axis if possible + if self.spine_type in ('left','right'): + self.axes.yaxis.set_smart_bounds(value) + elif self.spine_type in ('top','bottom'): + self.axes.xaxis.set_smart_bounds(value) + + def get_smart_bounds(self): + """get whether the spine has smart bounds""" + return self._smart_bounds + def set_patch_circle(self,center,radius): """set the spine to be circular""" self._patch_type = 'circle' @@ -141,6 +156,26 @@ if self.axis is not None: self.axis.cla() + def is_frame_like(self): + """return True if directly on axes frame + + This is useful for determining if a spine is the edge of an + old style MPL plot. If so, this function will return True. + """ + self._ensure_position_is_set() + position = self._position + if cbook.is_string_like(position): + if position=='center': + position = ('axes',0.5) + elif position=='zero': + position = ('data',0) + assert len(position)==2, "position should be 2-tuple" + position_type, amount = position + if position_type=='outward' and amount == 0: + return True + else: + return False + def _adjust_location(self): """automatically set spine bounds to the view interval""" @@ -154,6 +189,61 @@ low,high = self.axes.viewLim.intervalx else: raise ValueError('unknown spine spine_type: %s'%self.spine_type) + + if self._smart_bounds: + # attempt to set bounds in sophisticated way + if low > high: + # handle inverted limits + low,high=high,low + + viewlim_low = low + viewlim_high = high + + del low, high + + if self.spine_type in ('left','right'): + datalim_low,datalim_high = self.axes.dataLim.intervaly + ticks = self.axes.get_yticks() + elif self.spine_type in ('top','bottom'): + datalim_low,datalim_high = self.axes.dataLim.intervalx + ticks = self.axes.get_xticks() + # handle inverted limits + ticks = list(ticks) + ticks.sort() + ticks = np.array(ticks) + if datalim_low > datalim_high: + datalim_low, datalim_high = datalim_high, datalim_low + + if datalim_low < viewlim_low: + # Data extends past view. Clip line to view. + low = viewlim_low + else: + # Data ends before view ends. + cond = (ticks <= datalim_low) & (ticks >= viewlim_low) + tickvals = ticks[cond] + if len(tickvals): + # A tick is less than or equal to lowest data point. + low = tickvals[-1] + else: + # No tick is available + low = datalim_low + low = max(low,viewlim_low) + + if datalim_high > viewlim_high: + # Data extends past view. Clip line to view. + high = viewlim_high + else: + # Data ends before view ends. + cond = (ticks >= datalim_high) & (ticks <= viewlim_high) + tickvals = ticks[cond] + if len(tickvals): + # A tick is greater than or equal to highest data point. + high = tickvals[0] + else: + # No tick is available + high = datalim_high + high = min(high,viewlim_high) + else: low,high = self._bounds @@ -316,11 +406,16 @@ raise ValueError("unknown spine_transform type: %s"%what) def set_bounds( self, low, high ): + """Set the bounds of the spine.""" if self.spine_type == 'circle': raise ValueError( 'set_bounds() method incompatible with circular spines') self._bounds = (low, high) + def get_bounds( self ): + """Get the bounds of the spine.""" + return self._bounds + @classmethod def linear_spine(cls, axes, spine_type, **kwargs): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8047 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8047&view=rev Author: astraw Date: 2009年12月21日 02:24:14 +0000 (2009年12月21日) Log Message: ----------- spines: attempt to fix initial placement bug Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/spines.py Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2009年12月21日 00:47:49 UTC (rev 8046) +++ trunk/matplotlib/lib/matplotlib/axes.py 2009年12月21日 02:24:14 UTC (rev 8047) @@ -2065,9 +2065,6 @@ other.figure.canvas is not None): other.figure.canvas.draw_idle() - for loc in ('bottom','top'): - self.spines[loc].set_bounds(xmin,xmax) - return xmin, xmax def get_xscale(self): @@ -2242,9 +2239,6 @@ other.figure.canvas is not None): other.figure.canvas.draw_idle() - for loc in ('left','right'): - self.spines[loc].set_bounds(ymin,ymax) - return ymin, ymax def get_yscale(self): Modified: trunk/matplotlib/lib/matplotlib/spines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:47:49 UTC (rev 8046) +++ trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 02:24:14 UTC (rev 8047) @@ -11,6 +11,7 @@ import matplotlib.patches as mpatches import matplotlib.path as mpath import matplotlib.cbook as cbook +import numpy as np import warnings class Spine(mpatches.Patch): @@ -57,6 +58,8 @@ self.set_zorder(2.5) self.set_transform(self.axes.transData) # default transform + self._bounds = None # default bounds + # Defer initial position determination. (Not much support for # non-rectangular axes is currently implemented, and this lets # them pass through the spines machinery without errors.) @@ -138,6 +141,39 @@ if self.axis is not None: self.axis.cla() + def _adjust_location(self): + """automatically set spine bounds to the view interval""" + + if self.spine_type == 'circle': + return + + if self._bounds is None: + if self.spine_type in ('left','right'): + low,high = self.axes.viewLim.intervaly + elif self.spine_type in ('top','bottom'): + low,high = self.axes.viewLim.intervalx + else: + raise ValueError('unknown spine spine_type: %s'%self.spine_type) + else: + low,high = self._bounds + + v1 = self._path.vertices[:] # copy + assert v1.shape == (2,2), 'unexpected vertices shape' + if self.spine_type in ['left','right']: + v1[0,1] = low + v1[1,1] = high + elif self.spine_type in ['bottom','top']: + v1[0,0] = low + v1[1,0] = high + else: + raise ValueError('unable to set bounds for spine "%s"'%spine_type) + self._path.vertices = v1 # replace + + @allow_rasterization + def draw(self, renderer): + self._adjust_location() + return super( Spine, self).draw(renderer) + def _calc_offset_transform(self): """calculate the offset transform performed by the spine""" self._ensure_position_is_set() @@ -280,17 +316,10 @@ raise ValueError("unknown spine_transform type: %s"%what) def set_bounds( self, low, high ): - v1 = self._path.vertices[:] # copy - assert v1.shape == (2,2), 'unexpected vertices shape' - if self.spine_type in ['left','right']: - v1[0,1] = low - v1[1,1] = high - elif self.spine_type in ['bottom','top']: - v1[0,0] = low - v1[1,0] = high - else: - raise ValueError('unable to set bounds for spine "%s"'%spine_type) - self._path.vertices = v1 # replace + if self.spine_type == 'circle': + raise ValueError( + 'set_bounds() method incompatible with circular spines') + self._bounds = (low, high) @classmethod def linear_spine(cls, axes, spine_type, **kwargs): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8046 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8046&view=rev Author: astraw Date: 2009年12月21日 00:47:49 +0000 (2009年12月21日) Log Message: ----------- spines: limit range in example Modified Paths: -------------- trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py Modified: trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py 2009年12月21日 00:47:22 UTC (rev 8045) +++ trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py 2009年12月21日 00:47:49 UTC (rev 8046) @@ -143,4 +143,7 @@ for artist in (line1,line2): artist.set_clip_on(False) +# adjust spine to be within ticks +ax.spines['left'].set_bounds( -1, 1 ) + show() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8045 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8045&view=rev Author: astraw Date: 2009年12月21日 00:47:22 +0000 (2009年12月21日) Log Message: ----------- spines: be clear about meaning of location vertices Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/spines.py Modified: trunk/matplotlib/lib/matplotlib/spines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:46:59 UTC (rev 8044) +++ trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:47:22 UTC (rev 8045) @@ -297,14 +297,15 @@ """ (staticmethod) Returns a linear :class:`Spine`. """ + # all values of 13 get replaced upon call to set_bounds() if spine_type=='left': - path = mpath.Path([(0.0, 0.0), (0.0, 1.0)]) + path = mpath.Path([(0.0, 13), (0.0, 13)]) elif spine_type=='right': - path = mpath.Path([(1.0, 0.0), (1.0, 1.0)]) + path = mpath.Path([(1.0, 13), (1.0, 13)]) elif spine_type=='bottom': - path = mpath.Path([(0.0, 0.0), (1.0, 0.0)]) + path = mpath.Path([(13, 0.0), (13, 0.0)]) elif spine_type=='top': - path = mpath.Path([(0.0, 1.0), (1.0, 1.0)]) + path = mpath.Path([(13, 1.0), (13, 1.0)]) else: raise ValueError('unable to make path for spine "%s"'%spine_type) result = cls(axes,spine_type,path,**kwargs) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8044 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8044&view=rev Author: astraw Date: 2009年12月21日 00:46:59 +0000 (2009年12月21日) Log Message: ----------- spines: default transform is in data units, add set_bounds() call Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/spines.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月21日 00:46:30 UTC (rev 8043) +++ trunk/matplotlib/CHANGELOG 2009年12月21日 00:46:59 UTC (rev 8044) @@ -1,3 +1,6 @@ +2009年12月20日 spines: put spines in data coordinates, add set_bounds() + call. -ADS + 2009年12月18日 Don't limit notch size in boxplot to q1-q3 range, as this is effectively making the data look better than it is. - ADS Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2009年12月21日 00:46:30 UTC (rev 8043) +++ trunk/matplotlib/lib/matplotlib/axes.py 2009年12月21日 00:46:59 UTC (rev 8044) @@ -2065,6 +2065,9 @@ other.figure.canvas is not None): other.figure.canvas.draw_idle() + for loc in ('bottom','top'): + self.spines[loc].set_bounds(xmin,xmax) + return xmin, xmax def get_xscale(self): @@ -2238,6 +2241,10 @@ if (other.figure != self.figure and other.figure.canvas is not None): other.figure.canvas.draw_idle() + + for loc in ('left','right'): + self.spines[loc].set_bounds(ymin,ymax) + return ymin, ymax def get_yscale(self): Modified: trunk/matplotlib/lib/matplotlib/spines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:46:30 UTC (rev 8043) +++ trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:46:59 UTC (rev 8044) @@ -55,7 +55,7 @@ self.axis = None self.set_zorder(2.5) - self.set_transform(self.axes.transAxes) # default transform + self.set_transform(self.axes.transData) # default transform # Defer initial position determination. (Not much support for # non-rectangular axes is currently implemented, and this lets @@ -82,6 +82,7 @@ self._width = radius*2 self._height = radius*2 self._angle = 0 + self.set_transform(self.axes.transAxes) # circle drawn on axes transform def set_patch_line(self): """set the spine to be linear""" @@ -229,9 +230,9 @@ t = self.get_spine_transform() if self.spine_type in ['left','right']: t2 = mtransforms.blended_transform_factory(t, - self.axes.transAxes) + self.axes.transData) elif self.spine_type in ['bottom','top']: - t2 = mtransforms.blended_transform_factory(self.axes.transAxes, + t2 = mtransforms.blended_transform_factory(self.axes.transData, t) self.set_transform(t2) @@ -278,6 +279,19 @@ else: raise ValueError("unknown spine_transform type: %s"%what) + def set_bounds( self, low, high ): + v1 = self._path.vertices[:] # copy + assert v1.shape == (2,2), 'unexpected vertices shape' + if self.spine_type in ['left','right']: + v1[0,1] = low + v1[1,1] = high + elif self.spine_type in ['bottom','top']: + v1[0,0] = low + v1[1,0] = high + else: + raise ValueError('unable to set bounds for spine "%s"'%spine_type) + self._path.vertices = v1 # replace + @classmethod def linear_spine(cls, axes, spine_type, **kwargs): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8043 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8043&view=rev Author: astraw Date: 2009年12月21日 00:46:30 +0000 (2009年12月21日) Log Message: ----------- spines: simplify code Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/spines.py Modified: trunk/matplotlib/lib/matplotlib/spines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:45:55 UTC (rev 8042) +++ trunk/matplotlib/lib/matplotlib/spines.py 2009年12月21日 00:46:30 UTC (rev 8043) @@ -250,14 +250,12 @@ if what == 'data': # special case data based spine locations + data_xform = self.axes.transScale + \ + (how+self.axes.transLimits + self.axes.transAxes) if self.spine_type in ['left','right']: - data_xform = self.axes.transScale + \ - (how+self.axes.transLimits + self.axes.transAxes) result = mtransforms.blended_transform_factory( data_xform,self.axes.transData) elif self.spine_type in ['top','bottom']: - data_xform = self.axes.transScale + \ - (how+self.axes.transLimits + self.axes.transAxes) result = mtransforms.blended_transform_factory( self.axes.transData,data_xform) else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8042 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8042&view=rev Author: astraw Date: 2009年12月21日 00:45:55 +0000 (2009年12月21日) Log Message: ----------- spines: new example Modified Paths: -------------- trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py Modified: trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py =================================================================== --- trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py 2009年12月20日 08:03:40 UTC (rev 8041) +++ trunk/matplotlib/examples/pylab_examples/spine_placement_demo.py 2009年12月21日 00:45:55 UTC (rev 8042) @@ -113,4 +113,34 @@ ax.plot(x,y) adjust_spines(ax,['bottom']) +# ---------------------------------------------------- + +fig = plt.figure() + +x = np.linspace(0,2*np.pi,50) +y = np.sin(x) +y2 = y + 0.1*np.random.normal( size=x.shape ) + +# plot data +ax = fig.add_subplot(1,1,1) +line1,=ax.plot(x,y,'--') +line2,=ax.plot(x,y2,'bo') + +# adjust the spines +adjust_spines(ax,['left','bottom']) + +# set ticks and tick labels +# x +ax.set_xlim((0,2*np.pi)) +ax.set_xticks([0,np.pi,2*np.pi]) +pichr = unichr(0x03C0) +ax.set_xticklabels(['0',pichr,'2 '+pichr]) + +# y +ax.set_yticks([-1,0,1]) + +# disable clipping of data points by axes range +for artist in (line1,line2): + artist.set_clip_on(False) + show() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8041 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8041&view=rev Author: heeres Date: 2009年12月20日 08:03:40 +0000 (2009年12月20日) Log Message: ----------- mplot3d: fix axes juggle issue, fix ticks on end of axes range Modified Paths: -------------- trunk/matplotlib/examples/mplot3d/polys3d_demo.py trunk/matplotlib/examples/mplot3d/surface3d_demo3.py trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py Modified: trunk/matplotlib/examples/mplot3d/polys3d_demo.py =================================================================== --- trunk/matplotlib/examples/mplot3d/polys3d_demo.py 2009年12月18日 22:25:35 UTC (rev 8040) +++ trunk/matplotlib/examples/mplot3d/polys3d_demo.py 2009年12月20日 08:03:40 UTC (rev 8041) @@ -22,8 +22,11 @@ poly.set_alpha(0.7) ax.add_collection3d(poly, zs=zs, zdir='y') +ax.set_xlabel('X') ax.set_xlim3d(0, 10) +ax.set_ylabel('Y') ax.set_ylim3d(-1, 4) +ax.set_zlabel('Z') ax.set_zlim3d(0, 1) plt.show() Modified: trunk/matplotlib/examples/mplot3d/surface3d_demo3.py =================================================================== --- trunk/matplotlib/examples/mplot3d/surface3d_demo3.py 2009年12月18日 22:25:35 UTC (rev 8040) +++ trunk/matplotlib/examples/mplot3d/surface3d_demo3.py 2009年12月20日 08:03:40 UTC (rev 8041) @@ -23,8 +23,8 @@ surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, facecolors=colors, linewidth=0, antialiased=False) -ax.set_zlim3d(-1.01, 1.01) -ax.w_zaxis.set_major_locator(LinearLocator(10)) +ax.set_zlim3d(-1, 1) +ax.w_zaxis.set_major_locator(LinearLocator(6)) ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f')) plt.show() Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py 2009年12月18日 22:25:35 UTC (rev 8040) +++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/art3d.py 2009年12月20日 08:03:40 UTC (rev 8041) @@ -434,9 +434,26 @@ def juggle_axes(xs, ys, zs, zdir): """ - Reorder coordinates so that zdir + Reorder coordinates so that 2D xs, ys can be plotted in the plane + orthogonal to zdir. zdir is normally x, y or z. However, if zdir + starts with a '-' it is interpreted as a compensation for rotate_axes. """ if zdir == 'x': + return zs, xs, ys + elif zdir == 'y': + return xs, zs, ys + elif zdir[0] == '-': + return rotate_axes(xs, ys, zs, zdir) + else: + return xs, ys, zs + +def rotate_axes(xs, ys, zs, zdir): + """ + Reorder coordinates so that the axes are rotated with zdir along + the original z axis. Prepending the axis with a '-' does the + inverse transform, so zdir can be x, -x, y, -y, z or -z + """ + if zdir == 'x': return ys, zs, xs elif zdir == '-x': return zs, xs, ys Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py 2009年12月18日 22:25:35 UTC (rev 8040) +++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axes3d.py 2009年12月20日 08:03:40 UTC (rev 8041) @@ -857,7 +857,7 @@ had_data = self.has_data() - jX, jY, jZ = art3d.juggle_axes(X, Y, Z, zdir) + jX, jY, jZ = art3d.rotate_axes(X, Y, Z, zdir) cset = Axes.contour(self, jX, jY, jZ, **kwargs) zdir = '-' + zdir Modified: trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py =================================================================== --- trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py 2009年12月18日 22:25:35 UTC (rev 8040) +++ trunk/matplotlib/lib/mpl_toolkits/mplot3d/axis3d.py 2009年12月20日 08:03:40 UTC (rev 8041) @@ -180,7 +180,7 @@ # filter locations here so that no extra grid lines are drawn interval = self.get_view_interval() majorLocs = [loc for loc in majorLocs if \ - interval[0] < loc < interval[1]] + interval[0] <= loc <= interval[1]] self.major.formatter.set_locs(majorLocs) majorLabels = [self.major.formatter(val, i) for i, val in enumerate(majorLocs)] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8040 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8040&view=rev Author: astraw Date: 2009年12月18日 22:25:35 +0000 (2009年12月18日) Log Message: ----------- Don't limit notch size in boxplot to q1-q3 range Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/axes.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月18日 22:25:26 UTC (rev 8039) +++ trunk/matplotlib/CHANGELOG 2009年12月18日 22:25:35 UTC (rev 8040) @@ -1,3 +1,6 @@ +2009年12月18日 Don't limit notch size in boxplot to q1-q3 range, as this + is effectively making the data look better than it is. - ADS + 2009年12月18日 mlab.prctile handles even-length data, such that the median is the mean of the two middle values. - ADS Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2009年12月18日 22:25:26 UTC (rev 8039) +++ trunk/matplotlib/lib/matplotlib/axes.py 2009年12月18日 22:25:35 UTC (rev 8040) @@ -5035,10 +5035,6 @@ else: notch_max = med + 1.57*iq/np.sqrt(row) notch_min = med - 1.57*iq/np.sqrt(row) - if notch_max > q3: - notch_max = q3 - if notch_min < q1: - notch_min = q1 # make our notched box vectors box_x = [box_x_min, box_x_max, box_x_max, cap_x_max, box_x_max, box_x_max, box_x_min, box_x_min, cap_x_min, box_x_min, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8039 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8039&view=rev Author: astraw Date: 2009年12月18日 22:25:26 +0000 (2009年12月18日) Log Message: ----------- bugfix: mlab.prctile handles even-length data Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/mlab.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月18日 22:25:16 UTC (rev 8038) +++ trunk/matplotlib/CHANGELOG 2009年12月18日 22:25:26 UTC (rev 8039) @@ -1,3 +1,6 @@ +2009年12月18日 mlab.prctile handles even-length data, such that the median + is the mean of the two middle values. - ADS + 2009年12月15日 Add raw-image (unsampled) support for the ps backend. - JJL 2009年12月14日 Add patch_artist kwarg to boxplot, but keep old default. Modified: trunk/matplotlib/lib/matplotlib/mlab.py =================================================================== --- trunk/matplotlib/lib/matplotlib/mlab.py 2009年12月18日 22:25:16 UTC (rev 8038) +++ trunk/matplotlib/lib/matplotlib/mlab.py 2009年12月18日 22:25:26 UTC (rev 8039) @@ -904,19 +904,39 @@ the *p* percentage point in the sequence is returned. """ + # This implementation derived from scipy.stats.scoreatpercentile + def _interpolate(a, b, fraction): + """Returns the point at the given fraction between a and b, where + 'fraction' must be between 0 and 1. + """ + return a + (b - a)*fraction - x = np.array(x).ravel() # we need a copy - x.sort() - Nx = len(x) + scalar = True + if cbook.iterable(p): + scalar = False + per = np.array(p) + values = np.array(x).ravel() # copy + values.sort() - if not cbook.iterable(p): - return x[int(p*Nx/100.0)] + idxs = per /100. * (values.shape[0] - 1) + ai = idxs.astype(np.int) + bi = ai + 1 + frac = idxs % 1 - p = np.asarray(p)* Nx/100.0 - ind = p.astype(int) - ind = np.where(ind>=Nx, Nx-1, ind) - return x.take(ind) + # handle cases where attempting to interpolate past last index + cond = bi >= len(values) + if scalar: + if cond: + ai -= 1 + bi -= 1 + frac += 1 + else: + ai[cond] -= 1 + bi[cond] -= 1 + frac[cond] += 1 + return _interpolate(values[ai],values[bi],frac) + def prctile_rank(x, p): """ Return the rank for each element in *x*, return the rank This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8038 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8038&view=rev Author: astraw Date: 2009年12月18日 22:25:16 +0000 (2009年12月18日) Log Message: ----------- tests: add unit test for prctile Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/tests/test_mlab.py Modified: trunk/matplotlib/lib/matplotlib/tests/test_mlab.py =================================================================== --- trunk/matplotlib/lib/matplotlib/tests/test_mlab.py 2009年12月17日 19:31:21 UTC (rev 8037) +++ trunk/matplotlib/lib/matplotlib/tests/test_mlab.py 2009年12月18日 22:25:16 UTC (rev 8038) @@ -32,3 +32,26 @@ # the bad recarray should trigger a ValueError for having ndim > 1. mlab.rec2csv(bad,fd) + +def test_prctile(): + # test odd lengths + x=[1,2,3] + assert mlab.prctile(x,50)==np.median(x) + + # test even lengths + x=[1,2,3,4] + assert mlab.prctile(x,50)==np.median(x) + + # derived from email sent by jason-sage to MPL-user on 20090914 + ob1=[1,1,2,2,1,2,4,3,2,2,2,3,4,5,6,7,8,9,7,6,4,5,5] + p = [0, 75, 100] + expected = [1, 5.5, 9] + + # test vectorized + actual = mlab.prctile(ob1,p) + assert np.allclose( expected, actual ) + + # test scalar + for pi, expectedi in zip(p,expected): + actuali = mlab.prctile(ob1,pi) + assert np.allclose( expectedi, actuali ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8037 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8037&view=rev Author: leejjoon Date: 2009年12月17日 19:31:21 +0000 (2009年12月17日) Log Message: ----------- draw_image api to use an arbitrary affine transform Modified Paths: -------------- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py trunk/matplotlib/lib/matplotlib/image.py Modified: trunk/matplotlib/lib/matplotlib/backends/backend_ps.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2009年12月16日 19:21:44 UTC (rev 8036) +++ trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2009年12月17日 19:31:21 UTC (rev 8037) @@ -386,14 +386,15 @@ """ return True - def draw_image(self, gc, x, y, im, sx=None, sy=None): + def draw_image(self, gc, x, y, im, dx=None, dy=None, transform=None): """ Draw the Image instance into the current axes; x is the distance in pixels from the left hand side of the canvas and y is the distance from bottom - bbox is a matplotlib.transforms.BBox instance for clipping, or - None + dx, dy is the width and height of the image. If a transform + (which must be an affine transform) is given, x, y, dx, dy are + interpreted as the coordinate of the transform. """ im.flipud_out() @@ -406,13 +407,22 @@ imagecmd = "false 3 colorimage" hexlines = '\n'.join(self._hex_lines(bits)) - if sx is None: - sx = 1./self.image_magnification - if sy is None: - sy = 1./self.image_magnification - - xscale, yscale = (w*sx, h*sy) - + if dx is None: + xscale = w / self.image_magnification + else: + xscale = dx + + if dy is None: + yscale = h/self.image_magnification + else: + yscale = dy + + + if transform is None: + matrix = "1 0 0 1 0 0" + else: + matrix = " ".join(map(str, transform.to_values())) + figh = self.height*72 #print 'values', origin, flipud, figh, h, y @@ -431,6 +441,7 @@ #y = figh-(y+h) ps = """gsave %(clip)s +[%(matrix)s] concat %(x)s %(y)s translate %(xscale)s %(yscale)s scale /DataString %(w)s string def Modified: trunk/matplotlib/lib/matplotlib/image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/image.py 2009年12月16日 19:21:44 UTC (rev 8036) +++ trunk/matplotlib/lib/matplotlib/image.py 2009年12月17日 19:31:21 UTC (rev 8037) @@ -144,7 +144,7 @@ sy = dyintv/viewlim.height numrows, numcols = A.shape[:2] if sx > 2: - x0 = (viewim.x0-xmin)/dxintv * numcols + x0 = (viewlim.x0-xmin)/dxintv * numcols ix0 = max(0, int(x0 - self._filterrad)) x1 = (viewlim.x1-xmin)/dxintv * numcols ix1 = min(numcols, int(x1 + self._filterrad)) @@ -170,7 +170,7 @@ ymin = ymin_old + iy0*dyintv/numrows ymax = ymin_old + iy1*dyintv/numrows dyintv = ymax - ymin - sy = dyintv/self.axes.viewLim.height + sy = dyintv/viewlim.height else: yslice = slice(0, numrows) @@ -203,7 +203,7 @@ return im, xmin, ymin, dxintv, dyintv, sx, sy - + def _draw_unsampled_image(self, renderer, gc): """ draw unsampled image. The renderer should support a draw_image method @@ -213,10 +213,6 @@ self._get_unsampled_image(self._A, self.get_extent(), self.axes.viewLim) if im is None: return # I'm not if this check is required. -JJL - - transData = self.axes.transData - xx1, yy1 = transData.transform_point((xmin, ymin)) - xx2, yy2 = transData.transform_point((xmin+dxintv, ymin+dyintv)) fc = self.axes.patch.get_facecolor() bg = mcolors.colorConverter.to_rgba(fc, 0) @@ -228,19 +224,23 @@ im.resize(numcols, numrows) # just to create im.bufOut that is required by backends. There may be better solution -JJL - sx = (xx2-xx1)/numcols - sy = (yy2-yy1)/numrows im._url = self.get_url() - renderer.draw_image(gc, xx1, yy1, im, sx, sy) - + trans = self.get_transform() #axes.transData + xx1, yy1 = trans.transform_non_affine((xmin, ymin)) + xx2, yy2 = trans.transform_non_affine((xmin+dxintv, ymin+dyintv)) + + renderer.draw_image(gc, xx1, yy1, im, xx2-xx1, yy2-yy1, + trans.get_affine()) + + def _check_unsampled_image(self, renderer): """ return True if the image is better to be drawn unsampled. The derived class needs to override it. """ return False - + @allow_rasterization def draw(self, renderer, *args, **kwargs): if not self.get_visible(): return This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8036 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8036&view=rev Author: jdh2358 Date: 2009年12月16日 19:21:44 +0000 (2009年12月16日) Log Message: ----------- add mpl book to index sidebar Modified Paths: -------------- branches/v0_99_maint/doc/_templates/indexsidebar.html Modified: branches/v0_99_maint/doc/_templates/indexsidebar.html =================================================================== --- branches/v0_99_maint/doc/_templates/indexsidebar.html 2009年12月16日 01:22:41 UTC (rev 8035) +++ branches/v0_99_maint/doc/_templates/indexsidebar.html 2009年12月16日 19:21:44 UTC (rev 8036) @@ -8,6 +8,12 @@ pathto('users/installing') }}">installing</a> </p> +<p>Sandro Tosi has a new book +<a href="http://www.packtpub.com/matplotlib-python-development/book">Matplotlib for python +developers</a> +also +at <a href="http://www.amazon.com/Matplotlib-Python-Developers-Sandro-Tosi/dp/1847197906">amazon</a>.</p> + <p>Build websites like matplotlib's, with <a href="http://sphinx.pocoo.org/">sphinx</a> and extensions for mpl plots, math, inheritance diagrams -- try This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Revision: 8035 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8035&view=rev Author: leejjoon Date: 2009年12月16日 01:22:41 +0000 (2009年12月16日) Log Message: ----------- support unsampled image for ps backend Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/backend_bases.py trunk/matplotlib/lib/matplotlib/backends/backend_mixed.py trunk/matplotlib/lib/matplotlib/backends/backend_ps.py trunk/matplotlib/lib/matplotlib/image.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009年12月15日 02:57:46 UTC (rev 8034) +++ trunk/matplotlib/CHANGELOG 2009年12月16日 01:22:41 UTC (rev 8035) @@ -1,3 +1,5 @@ +2009年12月15日 Add raw-image (unsampled) support for the ps backend. - JJL + 2009年12月14日 Add patch_artist kwarg to boxplot, but keep old default. Convert boxplot_demo2.py to use the new patch_artist. - ADS Modified: trunk/matplotlib/lib/matplotlib/backend_bases.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backend_bases.py 2009年12月15日 02:57:46 UTC (rev 8034) +++ trunk/matplotlib/lib/matplotlib/backend_bases.py 2009年12月16日 01:22:41 UTC (rev 8035) @@ -340,6 +340,13 @@ """ return False + def option_scale_image(self): + """ + override this method for renderers that support arbitrary + scaling of image (most of the vector backend). + """ + return False + def draw_tex(self, gc, x, y, s, prop, angle, ismath='TeX!'): """ """ Modified: trunk/matplotlib/lib/matplotlib/backends/backend_mixed.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_mixed.py 2009年12月15日 02:57:46 UTC (rev 8034) +++ trunk/matplotlib/lib/matplotlib/backends/backend_mixed.py 2009年12月16日 01:22:41 UTC (rev 8035) @@ -59,7 +59,7 @@ get_texmanager get_text_width_height_descent new_gc open_group option_image_nocomposite points_to_pixels strip_math start_filter stop_filter draw_gouraud_triangle - draw_gouraud_triangles + draw_gouraud_triangles option_scale_image """.split() def _set_current_renderer(self, renderer): self._renderer = renderer Modified: trunk/matplotlib/lib/matplotlib/backends/backend_ps.py =================================================================== --- trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2009年12月15日 02:57:46 UTC (rev 8034) +++ trunk/matplotlib/lib/matplotlib/backends/backend_ps.py 2009年12月16日 01:22:41 UTC (rev 8035) @@ -380,8 +380,14 @@ """ return self.image_magnification - def draw_image(self, gc, x, y, im): + def option_scale_image(self): """ + ps backend support arbitrary scaling of image. + """ + return True + + def draw_image(self, gc, x, y, im, sx=None, sy=None): + """ Draw the Image instance into the current axes; x is the distance in pixels from the left hand side of the canvas and y is the distance from bottom @@ -400,9 +406,13 @@ imagecmd = "false 3 colorimage" hexlines = '\n'.join(self._hex_lines(bits)) - xscale, yscale = ( - w/self.image_magnification, h/self.image_magnification) - + if sx is None: + sx = 1./self.image_magnification + if sy is None: + sy = 1./self.image_magnification + + xscale, yscale = (w*sx, h*sy) + figh = self.height*72 #print 'values', origin, flipud, figh, h, y Modified: trunk/matplotlib/lib/matplotlib/image.py =================================================================== --- trunk/matplotlib/lib/matplotlib/image.py 2009年12月15日 02:57:46 UTC (rev 8034) +++ trunk/matplotlib/lib/matplotlib/image.py 2009年12月16日 01:22:41 UTC (rev 8035) @@ -127,21 +127,140 @@ def make_image(self, magnification=1.0): raise RuntimeError('The make_image method must be overridden.') + + def _get_unsampled_image(self, A, image_extents, viewlim): + """ + convert numpy array A with given extents ([x1, x2, y1, y2] in + data coordinate) into the Image, given the vielim (should be a + bbox instance). Image will be clipped if the extents is + significantly larger than the viewlim. + """ + xmin, xmax, ymin, ymax = image_extents + dxintv = xmax-xmin + dyintv = ymax-ymin + + # the viewport scale factor + sx = dxintv/viewlim.width + sy = dyintv/viewlim.height + numrows, numcols = A.shape[:2] + if sx > 2: + x0 = (viewim.x0-xmin)/dxintv * numcols + ix0 = max(0, int(x0 - self._filterrad)) + x1 = (viewlim.x1-xmin)/dxintv * numcols + ix1 = min(numcols, int(x1 + self._filterrad)) + xslice = slice(ix0, ix1) + xmin_old = xmin + xmin = xmin_old + ix0*dxintv/numcols + xmax = xmin_old + ix1*dxintv/numcols + dxintv = xmax - xmin + sx = dxintv/viewlim.width + else: + xslice = slice(0, numcols) + + if sy > 2: + y0 = (viewlim.y0-ymin)/dyintv * numrows + iy0 = max(0, int(y0 - self._filterrad)) + y1 = (viewlim.y1-ymin)/dyintv * numrows + iy1 = min(numrows, int(y1 + self._filterrad)) + if self.origin == 'upper': + yslice = slice(numrows-iy1, numrows-iy0) + else: + yslice = slice(iy0, iy1) + ymin_old = ymin + ymin = ymin_old + iy0*dyintv/numrows + ymax = ymin_old + iy1*dyintv/numrows + dyintv = ymax - ymin + sy = dyintv/self.axes.viewLim.height + else: + yslice = slice(0, numrows) + + if xslice != self._oldxslice or yslice != self._oldyslice: + self._imcache = None + self._oldxslice = xslice + self._oldyslice = yslice + + if self._imcache is None: + if self._A.dtype == np.uint8 and len(self._A.shape) == 3: + im = _image.frombyte(self._A[yslice,xslice,:], 0) + im.is_grayscale = False + else: + if self._rgbacache is None: + x = self.to_rgba(self._A, self._alpha) + self._rgbacache = x + else: + x = self._rgbacache + im = _image.fromarray(x[yslice,xslice], 0) + if len(self._A.shape) == 2: + im.is_grayscale = self.cmap.is_gray() + else: + im.is_grayscale = False + self._imcache = im + + if self.origin=='upper': + im.flipud_in() + else: + im = self._imcache + + return im, xmin, ymin, dxintv, dyintv, sx, sy + + + def _draw_unsampled_image(self, renderer, gc): + """ + draw unsampled image. The renderer should support a draw_image method + with scale parameter. + """ + im, xmin, ymin, dxintv, dyintv, sx, sy = \ + self._get_unsampled_image(self._A, self.get_extent(), self.axes.viewLim) + + if im is None: return # I'm not if this check is required. -JJL + + transData = self.axes.transData + xx1, yy1 = transData.transform_point((xmin, ymin)) + xx2, yy2 = transData.transform_point((xmin+dxintv, ymin+dyintv)) + + fc = self.axes.patch.get_facecolor() + bg = mcolors.colorConverter.to_rgba(fc, 0) + im.set_bg( *bg) + + # image input dimensions + im.reset_matrix() + numrows, numcols = im.get_size() + + im.resize(numcols, numrows) # just to create im.bufOut that is required by backends. There may be better solution -JJL + + sx = (xx2-xx1)/numcols + sy = (yy2-yy1)/numrows + im._url = self.get_url() + renderer.draw_image(gc, xx1, yy1, im, sx, sy) + + + def _check_unsampled_image(self, renderer): + """ + return True if the image is better to be drawn unsampled. + The derived class needs to override it. + """ + return False + @allow_rasterization def draw(self, renderer, *args, **kwargs): if not self.get_visible(): return if (self.axes.get_xscale() != 'linear' or self.axes.get_yscale() != 'linear'): warnings.warn("Images are not supported on non-linear axes.") - im = self.make_image(renderer.get_image_magnification()) - if im is None: - return - im._url = self.get_url() + l, b, widthDisplay, heightDisplay = self.axes.bbox.bounds gc = renderer.new_gc() gc.set_clip_rectangle(self.axes.bbox.frozen()) gc.set_clip_path(self.get_clip_path()) - renderer.draw_image(gc, l, b, im) + + if self._check_unsampled_image(renderer): + self._draw_unsampled_image(renderer, gc) + else: + im = self.make_image(renderer.get_image_magnification()) + if im is None: + return + im._url = self.get_url() + renderer.draw_image(gc, l, b, im) gc.restore() def contains(self, mouseevent): @@ -338,72 +457,9 @@ if self._A is None: raise RuntimeError('You must first set the image array or the image attribute') - xmin, xmax, ymin, ymax = self.get_extent() - dxintv = xmax-xmin - dyintv = ymax-ymin + im, xmin, ymin, dxintv, dyintv, sx, sy = \ + self._get_unsampled_image(self._A, self.get_extent(), self.axes.viewLim) - # the viewport scale factor - sx = dxintv/self.axes.viewLim.width - sy = dyintv/self.axes.viewLim.height - numrows, numcols = self._A.shape[:2] - if sx > 2: - x0 = (self.axes.viewLim.x0-xmin)/dxintv * numcols - ix0 = max(0, int(x0 - self._filterrad)) - x1 = (self.axes.viewLim.x1-xmin)/dxintv * numcols - ix1 = min(numcols, int(x1 + self._filterrad)) - xslice = slice(ix0, ix1) - xmin_old = xmin - xmin = xmin_old + ix0*dxintv/numcols - xmax = xmin_old + ix1*dxintv/numcols - dxintv = xmax - xmin - sx = dxintv/self.axes.viewLim.width - else: - xslice = slice(0, numcols) - - if sy > 2: - y0 = (self.axes.viewLim.y0-ymin)/dyintv * numrows - iy0 = max(0, int(y0 - self._filterrad)) - y1 = (self.axes.viewLim.y1-ymin)/dyintv * numrows - iy1 = min(numrows, int(y1 + self._filterrad)) - if self.origin == 'upper': - yslice = slice(numrows-iy1, numrows-iy0) - else: - yslice = slice(iy0, iy1) - ymin_old = ymin - ymin = ymin_old + iy0*dyintv/numrows - ymax = ymin_old + iy1*dyintv/numrows - dyintv = ymax - ymin - sy = dyintv/self.axes.viewLim.height - else: - yslice = slice(0, numrows) - - if xslice != self._oldxslice or yslice != self._oldyslice: - self._imcache = None - self._oldxslice = xslice - self._oldyslice = yslice - - if self._imcache is None: - if self._A.dtype == np.uint8 and len(self._A.shape) == 3: - im = _image.frombyte(self._A[yslice,xslice,:], 0) - im.is_grayscale = False - else: - if self._rgbacache is None: - x = self.to_rgba(self._A, self._alpha) - self._rgbacache = x - else: - x = self._rgbacache - im = _image.fromarray(x[yslice,xslice], 0) - if len(self._A.shape) == 2: - im.is_grayscale = self.cmap.is_gray() - else: - im.is_grayscale = False - self._imcache = im - - if self.origin=='upper': - im.flipud_in() - else: - im = self._imcache - fc = self.axes.patch.get_facecolor() bg = mcolors.colorConverter.to_rgba(fc, 0) im.set_bg( *bg) @@ -435,6 +491,15 @@ return im + def _check_unsampled_image(self, renderer): + """ + return True if the image is better to be drawn unsampled. + """ + if renderer.option_scale_image() and self.get_interpolation() == "nearest": + return True + else: + return False + def set_extent(self, extent): """ extent is data axes (left, right, bottom, top) for making image plots This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.