SourceForge logo
SourceForge logo
Menu

matplotlib-checkins

From: <ef...@us...> - 2010年07月16日 20:45:00
Revision: 8562
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8562&view=rev
Author: efiring
Date: 2010年07月16日 20:44:52 +0000 (2010年7月16日)
Log Message:
-----------
backends: factored out most of the show() code into ShowBase class.
Also fixed various fltkagg problems.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/backend_bases.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_cocoaagg.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_fltkagg.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_gtk.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_qt.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_tkagg.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_wx.py
Modified: branches/v1_0_maint/lib/matplotlib/backend_bases.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backend_bases.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backend_bases.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -21,6 +21,11 @@
 pressed, x and y locations in pixel and
 :class:`~matplotlib.axes.Axes` coordinates.
 
+:class:`ShowBase`
+ The base class for the Show class of each interactive backend;
+ the 'show' callable is then set to Show.__call__, inherited from
+ ShowBase.
+
 """
 
 from __future__ import division
@@ -33,6 +38,8 @@
 import matplotlib.widgets as widgets
 #import matplotlib.path as path
 from matplotlib import rcParams
+from matplotlib import is_interactive
+from matplotlib._pylab_helpers import Gcf
 
 from matplotlib.transforms import Bbox, TransformedBbox, Affine2D
 import cStringIO
@@ -49,7 +56,37 @@
 _backend_d[format] = backend_class
 
 
+class ShowBase(object):
+ """
+ Simple base class to generate a show() callable in backends.
 
+ Subclass must override mainloop() method.
+ """
+ def __call__(self):
+ """
+ Show all figures.
+ """
+ managers = Gcf.get_all_fig_managers()
+ if not managers:
+ return
+
+ for manager in managers:
+ manager.show()
+
+ try:
+ if not self._needmain: # ipython flag
+ return
+ except AttributeError:
+ pass
+
+ if not is_interactive():
+ self.mainloop()
+
+ def mainloop(self):
+ pass
+
+
+
 class RendererBase:
 """An abstract base class to handle drawing/rendering operations.
 
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_cocoaagg.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_cocoaagg.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_cocoaagg.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -30,6 +30,8 @@
 import matplotlib
 from matplotlib.figure import Figure
 from matplotlib.backend_bases import FigureManagerBase, FigureCanvasBase
+from matplotlib.backend_bases import ShowBase
+
 from backend_agg import FigureCanvasAgg
 from matplotlib._pylab_helpers import Gcf
 
@@ -41,10 +43,24 @@
 canvas = FigureCanvasCocoaAgg(thisFig)
 return FigureManagerCocoaAgg(canvas, num)
 
-def show():
- for manager in Gcf.get_all_fig_managers():
- manager.show()
+## Below is the original show() function:
+#def show():
+# for manager in Gcf.get_all_fig_managers():
+# manager.show()
+#
+## It appears that this backend is unusual in having a separate
+## run function invoked for each figure, instead of a single
+## mainloop. Presumably there is no blocking at all.
+##
+## Using the Show class below should cause no difference in
+## behavior.
 
+class Show(ShowBase):
+ def mainloop(self):
+ pass
+
+show = Show()
+
 def draw_if_interactive():
 if matplotlib.is_interactive():
 figManager = Gcf.get_active()
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_fltkagg.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_fltkagg.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_fltkagg.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -24,24 +24,14 @@
 from matplotlib.backend_bases import \
 RendererBase, GraphicsContextBase, FigureManagerBase, FigureCanvasBase,\
 NavigationToolbar2, cursors
+from matplotlib.backend_bases import ShowBase
+
+
 from matplotlib.figure import Figure
 from matplotlib._pylab_helpers import Gcf
 import matplotlib.backends.windowing as windowing
 from matplotlib.widgets import SubplotTool
 
-
-import thread,time
-
-Fl_running=thread.allocate_lock()
-def Fltk_run_interactive():
- global Fl_running
- if Fl_running.acquire(0):
- while True:
- Fltk.Fl.check()
- time.sleep(0.005)
- else:
- print "fl loop already running"
-
 # the true dots per inch on the screen; should be display dependent
 # see http://groups.google.com/groups?q=screen+dpi+x11&hl=en&lr=&ie=UTF-8&oe=UTF-8&safe=off&selm=7077.26e81ad5%40swift.cs.tcd.ie&rnum=5 for some info about screen dpi
 PIXELS_PER_INCH = 75
@@ -75,30 +65,13 @@
 if figManager is not None:
 figManager.canvas.draw()
 
+class Show(ShowBase):
+ def mainloop(self):
+ Fltk.Fl.run()
 
-def ishow():
- """
- Show all the figures and enter the fltk mainloop in another thread
- This allows to keep hand in interractive python session
- Warning: does not work under windows
- This should be the last line of your script
- """
- for manager in Gcf.get_all_fig_managers():
- manager.show()
- if show._needmain:
- thread.start_new_thread(Fltk_run_interactive,())
- show._needmain = False
+show = Show()
 
-def show():
- """
- Show all the figures and enter the fltk mainloop
 
- This should be the last line of your script
- """
- for manager in Gcf.get_all_fig_managers():
- manager.show()
- Fltk.Fl.run()
-
 def new_figure_manager(num, *args, **kwargs):
 """
 Create a new figure manager instance
@@ -249,8 +222,9 @@
 FigureCanvasBase.stop_event_loop_default(self)
 stop_event_loop.__doc__=FigureCanvasBase.stop_event_loop_default.__doc__
 
-def destroy_figure(ptr,figman):
+def destroy_figure(ptr, figman):
 figman.window.hide()
+ Fltk.Fl.wait(0) # This is needed to make the last figure vanish.
 Gcf.destroy(figman._num)
 
 class FigureManagerFltkAgg(FigureManagerBase):
@@ -301,6 +275,11 @@
 self.canvas.draw()
 self.window.redraw()
 
+ def destroy(self):
+ self.window.hide()
+ Fltk.Fl.wait(0) # This is needed to make the last figure vanish.
+ Gcf.destroy(self._num)
+
 def set_window_title(self, title):
 self.window_title=title
 self.window.label(title)
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_gtk.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_gtk.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_gtk.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -20,10 +20,11 @@
 _new_tooltip_api = (gtk.pygtk_version[1] >= 12)
 
 import matplotlib
-from matplotlib import verbose
 from matplotlib._pylab_helpers import Gcf
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase, \
 FigureManagerBase, FigureCanvasBase, NavigationToolbar2, cursors, TimerBase
+from matplotlib.backend_bases import ShowBase
+
 from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK
 from matplotlib.cbook import is_string_like, is_writable_file_like
 from matplotlib.colors import colorConverter
@@ -65,17 +66,12 @@
 figManager.canvas.draw_idle()
 
 
-def show(mainloop=True):
- """
- Show all the figures and enter the gtk main loop
- This should be the last line of your script
- """
- for manager in Gcf.get_all_fig_managers():
- manager.window.show()
+class Show(ShowBase):
+ def mainloop(self):
+ if gtk.main_level() == 0:
+ gtk.main()
 
- if mainloop and gtk.main_level() == 0 and \
- len(Gcf.get_all_fig_managers())>0:
- gtk.main()
+show = Show()
 
 def new_figure_manager(num, *args, **kwargs):
 """
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -7,6 +7,8 @@
 from matplotlib._pylab_helpers import Gcf
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase,\
 FigureManagerBase, FigureCanvasBase, NavigationToolbar2
+from matplotlib.backend_bases import ShowBase
+
 from matplotlib.cbook import maxdict
 from matplotlib.figure import Figure
 from matplotlib.path import Path
@@ -20,19 +22,16 @@
 import matplotlib
 from matplotlib.backends import _macosx
 
-def show():
- """Show all the figures and enter the Cocoa mainloop.
- This function will not return until all windows are closed or
- the interpreter exits."""
- # Having a Python-level function "show" wrapping the built-in
- # function "show" in the _macosx extension module allows us to
- # to add attributes to "show". This is something ipython does.
- _macosx.show()
+class Show(ShowBase):
+ def mainloop(self):
+ _macosx.show()
 
+show = Show()
+
 class RendererMac(RendererBase):
 """
 The renderer handles drawing/rendering operations. Most of the renderer's
- methods forwards the command to the renderer's graphics context. The
+ methods forward the command to the renderer's graphics context. The
 renderer does not wrap a C object and is written in pure Python.
 """
 
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_qt.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_qt.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_qt.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -8,6 +8,8 @@
 from matplotlib.cbook import is_string_like, onetrue
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase, \
 FigureManagerBase, FigureCanvasBase, NavigationToolbar2, cursors
+from matplotlib.backend_bases import ShowBase
+
 from matplotlib._pylab_helpers import Gcf
 from matplotlib.figure import Figure
 from matplotlib.mathtext import MathTextParser
@@ -54,24 +56,14 @@
 
 _create_qApp.qAppCreatedHere = False
 
-def show():
- """
- Show all the figures and enter the qt main loop
- This should be the last line of your script
- """
- for manager in Gcf.get_all_fig_managers():
- manager.window.show()
+class Show(ShowBase):
+ def mainloop(self):
+ if _create_qApp.qAppCreatedHere:
+ qt.qApp.exec_loop()
 
- if DEBUG: print 'Inside show'
+show = Show()
 
- figManager = Gcf.get_active()
- if figManager != None:
- figManager.canvas.draw()
 
- if _create_qApp.qAppCreatedHere:
- qt.qApp.exec_loop()
-
-
 def new_figure_manager( num, *args, **kwargs ):
 """
 Create a new figure manager instance
@@ -281,6 +273,9 @@
 'set the canvas size in pixels'
 self.window.resize(width, height)
 
+ def show(self):
+ self.window.show()
+
 def destroy( self, *args ):
 if self.window._destroying: return
 self.window._destroying = True
@@ -359,6 +354,7 @@
 # reference holder for subplots_adjust window
 self.adj_window = None
 
+
 def destroy( self ):
 for text, tooltip_text, image_file, callback in self.toolitems:
 if text is not None:
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -9,6 +9,8 @@
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase, \
 FigureManagerBase, FigureCanvasBase, NavigationToolbar2, IdleEvent, \
 cursors, TimerBase
+from matplotlib.backend_bases import ShowBase
+
 from matplotlib._pylab_helpers import Gcf
 from matplotlib.figure import Figure
 from matplotlib.mathtext import MathTextParser
@@ -56,24 +58,14 @@
 
 _create_qApp.qAppCreatedHere = False
 
-def show():
- """
- Show all the figures and enter the qt main loop
- This should be the last line of your script
- """
- for manager in Gcf.get_all_fig_managers():
- manager.window.show()
+class Show(ShowBase):
+ def mainloop(self):
+ if _create_qApp.qAppCreatedHere:
+ QtGui.qApp.exec_()
 
- if DEBUG: print 'Inside show'
+show = Show()
 
- figManager = Gcf.get_active()
- if figManager != None:
- figManager.canvas.draw()
 
- if _create_qApp.qAppCreatedHere:
- QtGui.qApp.exec_()
-
-
 def new_figure_manager( num, *args, **kwargs ):
 """
 Create a new figure manager instance
@@ -370,6 +362,9 @@
 'set the canvas size in pixels'
 self.window.resize(width, height)
 
+ def show(self):
+ self.window.show()
+
 def destroy( self, *args ):
 if self.window._destroying: return
 self.window._destroying = True
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_tkagg.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_tkagg.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_tkagg.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -18,9 +18,10 @@
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase
 from matplotlib.backend_bases import FigureManagerBase, FigureCanvasBase
 from matplotlib.backend_bases import NavigationToolbar2, cursors, TimerBase
+from matplotlib.backend_bases import ShowBase
+from matplotlib._pylab_helpers import Gcf
 
 from matplotlib.figure import Figure
-from matplotlib._pylab_helpers import Gcf
 
 from matplotlib.widgets import SubplotTool
 
@@ -63,22 +64,12 @@
 if figManager is not None:
 figManager.show()
 
-
-def show():
- """
- Show all figures.
-
- """
- for manager in Gcf.get_all_fig_managers():
- manager.show()
- try:
- if not show._needmain: # might have been added by ipython
- return
- except AttributeError:
- pass
- if not matplotlib.is_interactive():
+class Show(ShowBase):
+ def mainloop(self):
 Tk.mainloop()
 
+show = Show()
+
 def new_figure_manager(num, *args, **kwargs):
 """
 Create a new figure manager instance
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_wx.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_wx.py	2010年07月16日 18:45:49 UTC (rev 8561)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_wx.py	2010年07月16日 20:44:52 UTC (rev 8562)
@@ -24,6 +24,8 @@
 import sys, os, os.path, math, StringIO, weakref, warnings
 import numpy as np
 
+
+
 # Debugging settings here...
 # Debug level set here. If the debug level is less than 5, information
 # messages (progressively more info for lower value) are printed. In addition,
@@ -117,6 +119,8 @@
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase,\
 FigureCanvasBase, FigureManagerBase, NavigationToolbar2, \
 cursors, TimerBase
+from matplotlib.backend_bases import ShowBase
+
 from matplotlib._pylab_helpers import Gcf
 from matplotlib.artist import Artist
 from matplotlib.cbook import exception_to_str, is_string_like, is_writable_file_like
@@ -1394,24 +1398,16 @@
 if figManager is not None:
 figManager.canvas.draw_idle()
 
-def show():
- """
- Show all the figures and enter the wx main loop.
- This should be the last line of your script.
- """
- DEBUG_MSG("show()", 3, None)
+class Show(ShowBase):
+ def mainloop(self):
+ needmain = not wx.App.IsMainLoopRunning()
+ if needmain:
+ wxapp = wx.GetApp()
+ if wxapp is not None:
+ wxapp.MainLoop()
 
- for figwin in Gcf.get_all_fig_managers():
- figwin.frame.Show()
+show = Show()
 
- needmain = not wx.App.IsMainLoopRunning()
- if needmain and len(Gcf.get_all_fig_managers())>0:
- wxapp = wx.GetApp()
- if wxapp is not None:
- wxapp.MainLoop()
- # start the wxPython gui event if there is not already one running
-
-
 def new_figure_manager(num, *args, **kwargs):
 """
 Create a new figure manager instance
@@ -1555,6 +1551,8 @@
 # attach a show method to the figure
 self.canvas.figure.show = showfig
 
+ def show(self):
+ self.frame.Show()
 
 def destroy(self, *args):
 DEBUG_MSG("destroy()", 1, self)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年07月23日 16:45:31
Revision: 8570
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8570&view=rev
Author: mdboom
Date: 2010年07月23日 16:45:24 +0000 (2010年7月23日)
Log Message:
-----------
Fix image clipping to a path and add a test.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/axes.py
 branches/v1_0_maint/lib/matplotlib/image.py
 branches/v1_0_maint/lib/matplotlib/tests/test_image.py
Added Paths:
-----------
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.svg
Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py	2010年07月23日 13:18:47 UTC (rev 8569)
+++ branches/v1_0_maint/lib/matplotlib/axes.py	2010年07月23日 16:45:24 UTC (rev 8570)
@@ -6732,7 +6732,7 @@
 im.set_data(X)
 im.set_alpha(alpha)
 self._set_artist_props(im)
- if not im.get_clip_on():
+ if im.get_clip_path() is None:
 # image does not already have clipping set, clip to axes patch
 im.set_clip_path(self.patch)
 #if norm is None and shape is None:
Modified: branches/v1_0_maint/lib/matplotlib/image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/image.py	2010年07月23日 13:18:47 UTC (rev 8569)
+++ branches/v1_0_maint/lib/matplotlib/image.py	2010年07月23日 16:45:24 UTC (rev 8570)
@@ -338,6 +338,7 @@
 gc = renderer.new_gc()
 gc.set_clip_rectangle(self.axes.bbox.frozen())
 gc.set_clip_path(self.get_clip_path())
+ print self.get_clip_path()
 
 if self._check_unsampled_image(renderer):
 self._draw_unsampled_image(renderer, gc)
@@ -541,7 +542,9 @@
 **kwargs
 )
 
+ print "__init__", self.get_clip_on()
 
+
 def make_image(self, magnification=1.0):
 if self._A is None:
 raise RuntimeError('You must first set the image array or the image attribute')
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.pdf
===================================================================
(Binary files differ)
Property changes on: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.pdf
___________________________________________________________________
Added: svn:mime-type
 + application/octet-stream
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.png
===================================================================
(Binary files differ)
Property changes on: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.png
___________________________________________________________________
Added: svn:mime-type
 + application/octet-stream
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.svg
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.svg	 (rev 0)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.svg	2010年07月23日 16:45:24 UTC (rev 8570)
@@ -0,0 +1,659 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Created with matplotlib (http://matplotlib.sourceforge.net/) -->
+<svg width="576pt" height="432pt" viewBox="0 0 576 432"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ id="svg1">
+<filter id="colorAdd"><feComposite in="SourceGraphic" in2="BackgroundImage" operator="arithmetic" k2="1" k3="1"/></filter>
+<g id="figure1">
+<g id="patch1">
+<path style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M0.000000 432.000000L576.000000 432.000000L576.000000 0.000000
+L0.000000 0.000000L0.000000 432.000000"/>
+</g>
+<g id="axes1">
+<g id="patch2">
+<path style="fill: #ffffff; opacity: 1.000000" d="M295.200000 388.800000
+C341.027096 388.800000 384.983402 370.592702 417.388052 338.188052
+C449.792702 305.783402 468.000000 261.827096 468.000000 216.000000
+C468.000000 170.172904 449.792702 126.216598 417.388052 93.811948
+C384.983402 61.407298 341.027096 43.200000 295.200000 43.200000
+C249.372904 43.200000 205.416598 61.407298 173.011948 93.811948
+C140.607298 126.216598 122.400000 170.172904 122.400000 216.000000
+C122.400000 261.827096 140.607298 305.783402 173.011948 338.188052
+C205.416598 370.592702 249.372904 388.800000 295.200000 388.800000z"/>
+</g>
+<image x="122.400000" y="41.800000" width="347.000000" height="347.000000" xlink:href="data:image/png;base64,
+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
+"/>
+<g id="matplotlib.axis1">
+<g id="xtick1">
+<g id="text1">
+<defs>
+<path id="c_7b26b13f539f13a4c64eef23b6952d29" d="M4.890625 -31.390625l26.312500 0.000000l0.000000 8.000000l-26.312500 0.000000z"/>
+<path id="c_42baa63129a918535c52adb20d687ea7" d="M12.406250 -8.296875l16.109375 0.000000l0.000000 -55.625000l-17.531250 3.515625l0.000000 -8.984375l17.437500 -3.515625l9.859375 0.000000l0.000000 64.609375l16.109375 0.000000l0.000000 8.296875l-41.984375 0.000000z"/>
+<path id="c_1260a2df50f305f3db244e29828f968e" d="M10.796875 -72.906250l38.718750 0.000000l0.000000 8.312500l-29.687500 0.000000l0.000000 17.859375q2.140625 -0.734375 4.281250 -1.093750q2.156250 -0.359375 4.312500 -0.359375q12.203125 0.000000 19.328125 6.687500q7.140625 6.687500 7.140625 18.109375q0.000000 11.765625 -7.328125 18.296875q-7.328125 6.515625 -20.656250 6.515625q-4.593750 0.000000 -9.359375 -0.781250q-4.750000 -0.781250 -9.828125 -2.343750l0.000000 -9.921875q4.390625 2.390625 9.078125 3.562500q4.687500 1.171875 9.906250 1.171875q8.453125 0.000000 13.375000 -4.437500q4.937500 -4.437500 4.937500 -12.062500q0.000000 -7.609375 -4.937500 -12.046875q-4.921875 -4.453125 -13.375000 -4.453125q-3.953125 0.000000 -7.890625 0.875000q-3.921875 0.875000 -8.015625 2.734375z"/>
+<path id="c_7a2040fe3b94fcd41d0a72c84e93b115" d="M31.781250 -66.406250q-7.609375 0.000000 -11.453125 7.500000q-3.828125 7.484375 -3.828125 22.531250q0.000000 14.984375 3.828125 22.484375q3.843750 7.500000 11.453125 7.500000q7.671875 0.000000 11.500000 -7.500000q3.843750 -7.500000 3.843750 -22.484375q0.000000 -15.046875 -3.843750 -22.531250q-3.828125 -7.500000 -11.500000 -7.500000M31.781250 -74.218750q12.265625 0.000000 18.734375 9.703125q6.468750 9.687500 6.468750 28.140625q0.000000 18.406250 -6.468750 28.109375q-6.468750 9.687500 -18.734375 9.687500q-12.250000 0.000000 -18.718750 -9.687500q-6.468750 -9.703125 -6.468750 -28.109375q0.000000 -18.453125 6.468750 -28.140625q6.468750 -9.703125 18.718750 -9.703125"/>
+<path id="c_40880da00a2fb346f185ce8104650367" d="M25.000000 -67.921875q-3.906250 0.000000 -6.593750 2.718750q-2.687500 2.703125 -2.687500 6.609375q0.000000 3.859375 2.687500 6.515625q2.687500 2.656250 6.593750 2.656250q3.906250 0.000000 6.593750 -2.656250q2.687500 -2.656250 2.687500 -6.515625q0.000000 -3.859375 -2.718750 -6.593750q-2.703125 -2.734375 -6.562500 -2.734375M25.000000 -74.218750q3.125000 0.000000 6.000000 1.203125q2.890625 1.187500 4.984375 3.437500q2.250000 2.187500 3.375000 4.984375q1.125000 2.781250 1.125000 6.000000q0.000000 6.437500 -4.515625 10.906250q-4.515625 4.468750 -11.062500 4.468750q-6.593750 0.000000 -11.000000 -4.390625q-4.390625 -4.390625 -4.390625 -10.984375q0.000000 -6.546875 4.484375 -11.078125q4.500000 -4.546875 11.000000 -4.546875"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(146.848084,211.828125)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="36.083984"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="99.707031"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="163.330078"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="226.953125"/>
+</g>
+</g>
+</g>
+<g id="xtick2">
+<g id="text2">
+<defs>
+<path id="c_ed3f3ed3ebfbd18bcb9c012009a68ad1" d="M19.187500 -8.296875l34.421875 0.000000l0.000000 8.296875l-46.281250 0.000000l0.000000 -8.296875q5.609375 -5.812500 15.296875 -15.593750q9.703125 -9.796875 12.187500 -12.640625q4.734375 -5.312500 6.609375 -9.000000q1.890625 -3.687500 1.890625 -7.250000q0.000000 -5.812500 -4.078125 -9.468750q-4.078125 -3.671875 -10.625000 -3.671875q-4.640625 0.000000 -9.796875 1.609375q-5.140625 1.609375 -11.000000 4.890625l0.000000 -9.968750q5.953125 -2.390625 11.125000 -3.609375q5.187500 -1.218750 9.484375 -1.218750q11.328125 0.000000 18.062500 5.671875q6.734375 5.656250 6.734375 15.125000q0.000000 4.500000 -1.687500 8.531250q-1.671875 4.015625 -6.125000 9.484375q-1.218750 1.421875 -7.765625 8.187500q-6.531250 6.765625 -18.453125 18.921875"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(179.676061,211.828125)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="36.083984"/>
+<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="99.707031"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="163.330078"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="226.953125"/>
+</g>
+</g>
+</g>
+<g id="xtick3">
+<g id="text3">
+<defs>
+<path id="c_cd96f817f3cab988d24a2b49a5577fe6" d="M10.984375 -1.515625l0.000000 -8.984375q3.718750 1.765625 7.515625 2.687500q3.812500 0.921875 7.484375 0.921875q9.765625 0.000000 14.906250 -6.562500q5.156250 -6.562500 5.890625 -19.953125q-2.828125 4.203125 -7.187500 6.453125q-4.343750 2.250000 -9.609375 2.250000q-10.937500 0.000000 -17.312500 -6.609375q-6.375000 -6.625000 -6.375000 -18.109375q0.000000 -11.218750 6.640625 -18.000000q6.640625 -6.796875 17.671875 -6.796875q12.656250 0.000000 19.312500 9.703125q6.671875 9.687500 6.671875 28.140625q0.000000 17.234375 -8.187500 27.515625q-8.171875 10.281250 -21.984375 10.281250q-3.718750 0.000000 -7.531250 -0.734375q-3.796875 -0.734375 -7.906250 -2.203125M30.609375 -32.421875q6.640625 0.000000 10.515625 -4.531250q3.890625 -4.546875 3.890625 -12.468750q0.000000 -7.859375 -3.890625 -12.421875q-3.875000 -4.562500 -10.515625 -4.562500q-6.640625 0.000000 -10.515625 4.562500q-3.875000 4.562500 -3.875000 12.421875q0.000000 7.921875 3.875000 12.468750q3.875000 4.531250 10.515625 4.531250"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(211.686396,211.828125)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6" x="36.083984"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="xtick4">
+<g id="text4">
+<defs>
+<path id="c_cc8d6d580d1b10c8632f7a42cd53db8a" d="M33.015625 -40.375000q-6.640625 0.000000 -10.531250 4.546875q-3.875000 4.531250 -3.875000 12.437500q0.000000 7.859375 3.875000 12.437500q3.890625 4.562500 10.531250 4.562500q6.640625 0.000000 10.515625 -4.562500q3.875000 -4.578125 3.875000 -12.437500q0.000000 -7.906250 -3.875000 -12.437500q-3.875000 -4.546875 -10.515625 -4.546875M52.593750 -71.296875l0.000000 8.984375q-3.718750 -1.750000 -7.500000 -2.671875q-3.781250 -0.937500 -7.500000 -0.937500q-9.765625 0.000000 -14.921875 6.593750q-5.140625 6.593750 -5.875000 19.921875q2.875000 -4.250000 7.218750 -6.515625q4.359375 -2.265625 9.578125 -2.265625q10.984375 0.000000 17.359375 6.671875q6.375000 6.656250 6.375000 18.125000q0.000000 11.234375 -6.640625 18.031250q-6.640625 6.781250 -17.671875 6.781250q-12.656250 0.000000 -19.343750 -9.687500q-6.687500 -9.703125 -6.687500 -28.109375q0.000000 -17.281250 8.203125 -27.562500q8.203125 -10.281250 22.015625 -10.281250q3.718750 0.000000 7.500000 0.734375q3.781250 0.734375 7.890625 2.187500"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(236.960880,211.828125)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="36.083984"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="xtick5">
+<g id="text5">
+<defs>
+<path id="c_3dcfa38a02242cb63ec6726c6e70be7a" d="M40.578125 -39.312500q7.078125 1.515625 11.046875 6.312500q3.984375 4.781250 3.984375 11.812500q0.000000 10.781250 -7.421875 16.703125q-7.421875 5.906250 -21.093750 5.906250q-4.578125 0.000000 -9.437500 -0.906250q-4.859375 -0.906250 -10.031250 -2.718750l0.000000 -9.515625q4.093750 2.390625 8.968750 3.609375q4.890625 1.218750 10.218750 1.218750q9.265625 0.000000 14.125000 -3.656250q4.859375 -3.656250 4.859375 -10.640625q0.000000 -6.453125 -4.515625 -10.078125q-4.515625 -3.640625 -12.562500 -3.640625l-8.500000 0.000000l0.000000 -8.109375l8.890625 0.000000q7.265625 0.000000 11.125000 -2.906250q3.859375 -2.906250 3.859375 -8.375000q0.000000 -5.609375 -3.984375 -8.609375q-3.968750 -3.015625 -11.390625 -3.015625q-4.062500 0.000000 -8.703125 0.890625q-4.640625 0.875000 -10.203125 2.718750l0.000000 -8.781250q5.625000 -1.562500 10.531250 -2.343750q4.906250 -0.781250 9.250000 -0.781250q11.234375 0.000000 17.765625 5.109375q6.546875 5.093750 6.546875 13.781250q0.000000 6.062500 -3.468750 10.234375q-3.468750 4.171875 -9.859375 5.781250"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(260.512948,211.828125)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a" x="36.083984"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="xtick6">
+<g id="text6">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(289.348437,211.828125)scale(0.120000)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="63.623047"/>
+</g>
+</g>
+</g>
+<g id="xtick7">
+<g id="text7">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(308.340177,211.828125)scale(0.120000)">
+<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="xtick8">
+<g id="text8">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(331.853183,211.828125)scale(0.120000)">
+<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="xtick9">
+<g id="text9">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(357.080791,211.828125)scale(0.120000)">
+<use xlink:href="#c_cd96f817f3cab988d24a2b49a5577fe6"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="xtick10">
+<g id="text10">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(381.731752,211.828125)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="127.246094"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="190.869141"/>
+</g>
+</g>
+</g>
+<g id="xtick11">
+<g id="text11">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(414.559729,211.828125)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="127.246094"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="190.869141"/>
+</g>
+</g>
+</g>
+</g>
+<g id="matplotlib.axis2">
+<g id="ytick1">
+<g id="text12">
+<defs>
+<path id="c_956f18cfdaf972f35a6c2b4aaac2532b" d="M8.203125 -72.906250l46.875000 0.000000l0.000000 4.203125l-26.468750 68.703125l-10.296875 0.000000l24.906250 -64.593750l-35.015625 0.000000z"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(218.601069,403.970369)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b" x="36.083984"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="ytick2">
+<g id="text13">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(176.925000,384.981296)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a" x="36.083984"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="ytick3">
+<g id="text14">
+<defs>
+<path id="c_a0416418d96557a09b8c1332d34883ba" d="M37.796875 -64.312500l-24.906250 38.921875l24.906250 0.000000zM35.203125 -72.906250l12.406250 0.000000l0.000000 47.515625l10.406250 0.000000l0.000000 8.203125l-10.406250 0.000000l0.000000 17.187500l-9.812500 0.000000l0.000000 -17.187500l-32.906250 0.000000l0.000000 -9.515625z"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(141.136948,354.774044)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba" x="36.083984"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="ytick4">
+<g id="text15">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(113.675810,315.407188)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a" x="36.083984"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="ytick5">
+<g id="text16">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(96.413017,269.563512)scale(0.120000)">
+<use xlink:href="#c_7b26b13f539f13a4c64eef23b6952d29"/>
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7" x="36.083984"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="99.707031"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="163.330078"/>
+</g>
+</g>
+</g>
+<g id="ytick6">
+<g id="text17">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(102.696875,220.367188)scale(0.120000)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="63.623047"/>
+</g>
+</g>
+</g>
+<g id="ytick7">
+<g id="text18">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(101.459892,171.170863)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="ytick8">
+<g id="text19">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(118.332060,125.327188)scale(0.120000)">
+<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="ytick9">
+<g id="text20">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(145.465073,85.960331)scale(0.120000)">
+<use xlink:href="#c_a0416418d96557a09b8c1332d34883ba"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="ytick10">
+<g id="text21">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(181.503125,55.753079)scale(0.120000)">
+<use xlink:href="#c_cc8d6d580d1b10c8632f7a42cd53db8a"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+<g id="ytick11">
+<g id="text22">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(223.319819,36.764006)scale(0.120000)">
+<use xlink:href="#c_956f18cfdaf972f35a6c2b4aaac2532b"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="63.623047"/>
+<use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
+</g>
+</g>
+</g>
+</g>
+<g id="patch3">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M295.200000 388.800000
+C341.027096 388.800000 384.983402 370.592702 417.388052 338.188052
+C449.792702 305.783402 468.000000 261.827096 468.000000 216.000000
+C468.000000 170.172904 449.792702 126.216598 417.388052 93.811948
+C384.983402 61.407298 341.027096 43.200000 295.200000 43.200000
+C249.372904 43.200000 205.416598 61.407298 173.011948 93.811948
+C140.607298 126.216598 122.400000 170.172904 122.400000 216.000000
+C122.400000 261.827096 140.607298 305.783402 173.011948 338.188052
+C205.416598 370.592702 249.372904 388.800000 295.200000 388.800000z"/>
+</g>
+</g>
+</g>
+</svg>
Modified: branches/v1_0_maint/lib/matplotlib/tests/test_image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/test_image.py	2010年07月23日 13:18:47 UTC (rev 8569)
+++ branches/v1_0_maint/lib/matplotlib/tests/test_image.py	2010年07月23日 16:45:24 UTC (rev 8570)
@@ -95,7 +95,20 @@
 
 assert_array_equal(arr_dpi1, arr_dpi100)
 
+@image_comparison(baseline_images=['image_clip'])
+def test_image_clip():
+ from math import pi
 
+ fig = plt.figure()
+ ax = fig.add_subplot(111, projection='hammer')
+
+ d = [[1,2],[3,4]]
+
+ ax.imshow(d, extent=(-pi,pi,-pi/2,pi/2))
+
+ fig.savefig('image_clip')
+
+
 if __name__=='__main__':
 import nose
 nose.runmodule(argv=['-s','--with-doctest'], exit=False)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年07月24日 22:00:02
Revision: 8573
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8573&view=rev
Author: efiring
Date: 2010年07月24日 21:59:55 +0000 (2010年7月24日)
Log Message:
-----------
rcParams: don't include deprecated keys.
Some other rc cleanups are included in this changeset.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/__init__.py
 branches/v1_0_maint/lib/matplotlib/rcsetup.py
Modified: branches/v1_0_maint/lib/matplotlib/__init__.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/__init__.py	2010年07月23日 16:47:30 UTC (rev 8572)
+++ branches/v1_0_maint/lib/matplotlib/__init__.py	2010年07月24日 21:59:55 UTC (rev 8573)
@@ -632,25 +632,50 @@
 
 validate = dict([ (key, converter) for key, (default, converter) in \
 defaultParams.iteritems() ])
+ msg_depr = "%s is deprecated and replaced with %s; please use the latter."
+ msg_depr_ignore = "%s is deprecated and ignored. Use %s"
 
 def __setitem__(self, key, val):
 try:
 if key in _deprecated_map.keys():
 alt = _deprecated_map[key]
- warnings.warn('%s is deprecated in matplotlibrc. Use %s \
-instead.'% (key, alt))
+ warnings.warn(self.msg_depr % (key, alt))
 key = alt
 elif key in _deprecated_ignore_map:
 alt = _deprecated_ignore_map[key]
- warnings.warn('%s is deprecated. Use %s instead.'% (key, alt))
+ warnings.warn(self.msg_depr_ignore % (key, alt))
 return
 cval = self.validate[key](val)
 dict.__setitem__(self, key, cval)
 except KeyError:
 raise KeyError('%s is not a valid rc parameter.\
-See rcParams.keys() for a list of valid parameters.'%key)
+See rcParams.keys() for a list of valid parameters.' % (key,))
 
+ def __getitem__(self, key):
+ if key in _deprecated_map.keys():
+ alt = _deprecated_map[key]
+ warnings.warn(self.msg_depr % (key, alt))
+ key = alt
+ elif key in _deprecated_ignore_map:
+ alt = _deprecated_ignore_map[key]
+ warnings.warn(self.msg_depr_ignore % (key, alt))
+ key = alt
+ return dict.__getitem__(self, key)
 
+ def keys(self):
+ """
+ Return sorted list of keys.
+ """
+ k = dict.keys(self)
+ k.sort()
+ return k
+
+ def values(self):
+ """
+ Return values in order of sorted keys.
+ """
+ return [self[k] for k in self.keys()]
+
 def rc_params(fail_on_error=False):
 'Return the default params updated from the values in the rc file'
 
@@ -810,12 +835,12 @@
 for k,v in kwargs.items():
 name = aliases.get(k) or k
 key = '%s.%s' % (g, name)
- if key not in rcParams:
+ try:
+ rcParams[key] = v
+ except KeyError:
 raise KeyError('Unrecognized key "%s" for group "%s" and name "%s"' %
 (key, g, name))
 
- rcParams[key] = v
-
 def rcdefaults():
 """
 Restore the default rc params - the ones that were created at
Modified: branches/v1_0_maint/lib/matplotlib/rcsetup.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/rcsetup.py	2010年07月23日 16:47:30 UTC (rev 8572)
+++ branches/v1_0_maint/lib/matplotlib/rcsetup.py	2010年07月24日 21:59:55 UTC (rev 8573)
@@ -347,8 +347,8 @@
 defaultParams = {
 'backend' : ['Agg', validate_backend], # agg is certainly present
 'backend_fallback' : [True, validate_bool], # agg is certainly present
- 'numerix' : ['obsolete', validate_numerix],
- 'maskedarray' : ['obsolete', validate_maskedarray], #to be removed
+ #'numerix' : ['obsolete', validate_numerix],
+ #'maskedarray' : ['obsolete', validate_maskedarray], #to be removed
 'toolbar' : ['toolbar2', validate_toolbar],
 'datapath' : [None, validate_path_exists], # handled by _get_data_path_cached
 'units' : [False, validate_bool],
@@ -385,7 +385,7 @@
 'font.variant' : ['normal', str], #
 'font.stretch' : ['normal', str], #
 'font.weight' : ['normal', str], #
- 'font.size' : [12.0, validate_float], #
+ 'font.size' : [12, validate_float], # Base font size in points
 'font.serif' : [['Bitstream Vera Serif', 'DejaVu Serif',
 'New Century Schoolbook', 'Century Schoolbook L',
 'Utopia', 'ITC Bookman', 'Bookman',
@@ -412,13 +412,16 @@
 'text.latex.preamble' : [[''], validate_stringlist],
 'text.latex.preview' : [False, validate_bool],
 'text.dvipnghack' : [None, validate_bool_maybe_none],
- 'text.fontstyle' : ['normal', str],
- 'text.fontangle' : ['normal', str],
- 'text.fontvariant' : ['normal', str],
- 'text.fontweight' : ['normal', str],
- 'text.fontsize' : ['medium', validate_fontsize],
 'text.hinting' : [True, validate_bool],
 
+ # The following are deprecated and replaced by, e.g., 'font.style'
+ #'text.fontstyle' : ['normal', str],
+ #'text.fontangle' : ['normal', str],
+ #'text.fontvariant' : ['normal', str],
+ #'text.fontweight' : ['normal', str],
+ #'text.fontsize' : ['medium', validate_fontsize],
+
+
 'mathtext.cal' : ['cursive', validate_font_properties],
 'mathtext.rm' : ['serif', validate_font_properties],
 'mathtext.tt' : ['monospace', validate_font_properties],
@@ -483,9 +486,6 @@
 
 'legend.shadow' : [False, validate_bool],
 
-
-
-
 # tick properties
 'xtick.major.size' : [4, validate_float], # major xtick size in points
 'xtick.minor.size' : [2, validate_float], # minor xtick size in points
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年07月26日 19:14:22
Revision: 8579
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8579&view=rev
Author: efiring
Date: 2010年07月26日 19:14:16 +0000 (2010年7月26日)
Log Message:
-----------
[3032390] subplot: more robust argument handling, consistent with 0.99.3
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/axes.py
 branches/v1_0_maint/lib/matplotlib/gridspec.py
Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py	2010年07月26日 18:20:35 UTC (rev 8578)
+++ branches/v1_0_maint/lib/matplotlib/axes.py	2010年07月26日 19:14:16 UTC (rev 8579)
@@ -8295,6 +8295,7 @@
 being created. *plotNum* starts at 1 in the upper left
 corner and increases to the right.
 
+
 If *numRows* <= *numCols* <= *plotNum* < 10, *args* can be the
 decimal integer *numRows* * 100 + *numCols* * 10 + *plotNum*.
 """
@@ -8304,25 +8305,28 @@
 if len(args) == 1:
 if isinstance(args[0], SubplotSpec):
 self._subplotspec = args[0]
-
 else:
- s = str(args[0])
- if len(s) != 3:
- raise ValueError('Argument to subplot must be a 3 digits long')
- rows, cols, num = map(int, s)
+ try:
+ s = str(int(args[0]))
+ rows, cols, num = map(int, s)
+ except ValueError:
+ raise ValueError(
+ 'Single argument to subplot must be a 3-digit integer')
 self._subplotspec = GridSpec(rows, cols)[num-1]
 # num - 1 for converting from MATLAB to python indexing
 elif len(args)==3:
 rows, cols, num = args
+ rows = int(rows)
+ cols = int(cols)
 if isinstance(num, tuple) and len(num) == 2:
+ num = [int(n) for n in num]
 self._subplotspec = GridSpec(rows, cols)[num[0]-1:num[1]]
 else:
- self._subplotspec = GridSpec(rows, cols)[num-1]
+ self._subplotspec = GridSpec(rows, cols)[int(num)-1]
 # num - 1 for converting from MATLAB to python indexing
 else:
- raise ValueError( 'Illegal argument to subplot')
+ raise ValueError('Illegal argument(s) to subplot: %s' % (args,))
 
-
 self.update_params()
 
 # _axes_class is set in the subplot_class_factory
Modified: branches/v1_0_maint/lib/matplotlib/gridspec.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/gridspec.py	2010年07月26日 18:20:35 UTC (rev 8578)
+++ branches/v1_0_maint/lib/matplotlib/gridspec.py	2010年07月26日 19:14:16 UTC (rev 8579)
@@ -70,7 +70,7 @@
 def get_height_ratios(self):
 return self._row_height_ratios
 
- 
+
 def get_grid_positions(self, fig):
 """
 return lists of bottom and top position of rows, left and
@@ -116,9 +116,9 @@
 
 sepWidths = [0] + ([sepW] * (ncols-1))
 cellWs = np.add.accumulate(np.ravel(zip(sepWidths, cellWidths)))
- 
 
 
+
 figTops = [top - cellHs[2*rowNum] for rowNum in range(nrows)]
 figBottoms = [top - cellHs[2*rowNum+1] for rowNum in range(nrows)]
 figLefts = [left + cellWs[2*colNum] for colNum in range(ncols)]
@@ -126,8 +126,8 @@
 
 
 return figBottoms, figTops, figLefts, figRights
- 
 
+
 def __getitem__(self, key):
 """
 create and return a SuplotSpec instance.
@@ -287,7 +287,7 @@
 
 def get_subplot_params(self, fig=None):
 """
- return a dictionary of subplot layout parameters. 
+ return a dictionary of subplot layout parameters.
 """
 
 if fig is None:
@@ -324,7 +324,7 @@
 """
 specifies the location of the subplot in the given *GridSpec*.
 """
- 
+
 def __init__(self, gridspec, num1, num2=None):
 """
 The subplot will occupy the num1-th cell of the given
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年07月28日 19:19:33
Revision: 8590
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8590&view=rev
Author: mdboom
Date: 2010年07月28日 19:19:27 +0000 (2010年7月28日)
Log Message:
-----------
[3031954] polar plot axis labeling problem
Radial axis labels should now be placed correctly, even for small values of rmax
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/projections/polar.py
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_units.png
Modified: branches/v1_0_maint/lib/matplotlib/projections/polar.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/projections/polar.py	2010年07月28日 18:50:21 UTC (rev 8589)
+++ branches/v1_0_maint/lib/matplotlib/projections/polar.py	2010年07月28日 19:19:27 UTC (rev 8590)
@@ -13,7 +13,8 @@
 from matplotlib.path import Path
 from matplotlib.ticker import Formatter, Locator, FormatStrFormatter
 from matplotlib.transforms import Affine2D, Affine2DBase, Bbox, \
- BboxTransformTo, IdentityTransform, Transform, TransformWrapper
+ BboxTransformTo, IdentityTransform, Transform, TransformWrapper, \
+ ScaledTranslation, blended_transform_factory
 import matplotlib.spines as mspines
 
 class PolarAxes(Axes):
@@ -287,13 +288,17 @@
 Affine2D().scale(np.pi * 2.0, 1.0) +
 self.transData)
 # The r-axis labels are put at an angle and padded in the r-direction
- self._r_label1_position = Affine2D().translate(22.5, self._rpad)
+ self._r_label1_position = ScaledTranslation(
+ 22.5, self._rpad,
+ blended_transform_factory(Affine2D(), BboxTransformTo(self.viewLim)))
 self._yaxis_text1_transform = (
 self._r_label1_position +
 Affine2D().scale(1.0 / 360.0, 1.0) +
 self._yaxis_transform
 )
- self._r_label2_position = Affine2D().translate(22.5, self._rpad)
+ self._r_label2_position = ScaledTranslation(
+ 22.5, -self._rpad,
+ blended_transform_factory(Affine2D(), BboxTransformTo(self.viewLim)))
 self._yaxis_text2_transform = (
 self._r_label2_position +
 Affine2D().scale(1.0 / 360.0, 1.0) +
@@ -435,9 +440,10 @@
 angle = self._r_label1_position.to_values()[4]
 if rpad is not None:
 self._rpad = rpad
- rmax = self.get_rmax()
- self._r_label1_position.clear().translate(angle, self._rpad * rmax)
- self._r_label2_position.clear().translate(angle, -self._rpad * rmax)
+ self._r_label1_position._t = (angle, self._rpad)
+ self._r_label1_position.invalidate()
+ self._r_label2_position._t = (angle, -self._rpad)
+ self._r_label2_position.invalidate()
 for t in self.yaxis.get_ticklabels():
 t.update(kwargs)
 return self.yaxis.get_gridlines(), self.yaxis.get_ticklabels()
@@ -516,11 +522,11 @@
 dt = dt0 * -1.0
 dt = (dt / np.pi) * 180.0
 
- rpad = self._r_label1_position.to_values()[5]
- self._r_label1_position.clear().translate(
- p.r_label_angle - dt, rpad)
- self._r_label2_position.clear().translate(
- p.r_label_angle - dt, -rpad)
+ rpad = self._rpad
+ self._r_label1_position._t = (p.r_label_angle - dt, rpad)
+ self._r_label1_position.invalidate()
+ self._r_label2_position._t = (p.r_label_angle - dt, -rpad)
+ self._r_label2_position.invalidate()
 
 elif p.mode == 'zoom':
 startt, startr = p.trans_inverse.transform_point((p.x, p.y))
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_units.png
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <wea...@us...> - 2010年07月29日 16:16:24
Revision: 8593
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8593&view=rev
Author: weathergod
Date: 2010年07月29日 16:16:17 +0000 (2010年7月29日)
Log Message:
-----------
Fix documentation for set_linestyle() and set_marker() and a few other
functions properly display their available values on the web docs.
Also changed pentagram to pentagon in the docstrings.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/artist.py
 branches/v1_0_maint/lib/matplotlib/axes.py
 branches/v1_0_maint/lib/matplotlib/lines.py
Modified: branches/v1_0_maint/lib/matplotlib/artist.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/artist.py	2010年07月29日 14:09:11 UTC (rev 8592)
+++ branches/v1_0_maint/lib/matplotlib/artist.py	2010年07月29日 16:16:17 UTC (rev 8593)
@@ -826,7 +826,7 @@
 for a line that begins with ACCEPTS:
 
 Eg., for a line linestyle, return
- [ '-' | '--' | '-.' | ':' | 'steps' | 'None' ]
+ "[ ``'-'`` | ``'--'`` | ``'-.'`` | ``':'`` | ``'steps'`` | ``'None'`` ]"
 """
 
 name = 'set_%s'%attr
Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py	2010年07月29日 14:09:11 UTC (rev 8592)
+++ branches/v1_0_maint/lib/matplotlib/axes.py	2010年07月29日 16:16:17 UTC (rev 8593)
@@ -5549,22 +5549,22 @@
 *marker*:
 can be one of:
 
- ===== ==============
- Value Description
- ===== ==============
- 's' square
- 'o' circle
- '^' triangle up
- '>' triangle right
- 'v' triangle down
- '<' triangle left
- 'd' diamond
- 'p' pentagram
- 'h' hexagon
- '8' octagon
- '+' plus
- 'x' cross
- ===== ==============
+ ======= ==============
+ Value Description
+ ======= ==============
+ ``'s'`` square
+ ``'o'`` circle
+ ``'^'`` triangle up
+ ``'>'`` triangle right
+ ``'v'`` triangle down
+ ``'<'`` triangle left
+ ``'d'`` diamond
+ ``'p'`` pentagon
+ ``'h'`` hexagon
+ ``'8'`` octagon
+ ``'+'`` plus
+ ``'x'`` cross
+ ======= ==============
 
 The marker can also be a tuple (*numsides*, *style*,
 *angle*), which will create a custom, regular symbol.
@@ -5655,7 +5655,7 @@
 'v' : (3,math.pi,0), # triangle down
 '<' : (3,3*math.pi/2.0,0), # triangle left
 'd' : (4,0,0), # diamond
- 'p' : (5,0,0), # pentagram
+ 'p' : (5,0,0), # pentagon
 'h' : (6,0,0), # hexagon
 '8' : (8,0,0), # octagon
 '+' : (4,0,2), # plus
Modified: branches/v1_0_maint/lib/matplotlib/lines.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/lines.py	2010年07月29日 14:09:11 UTC (rev 8592)
+++ branches/v1_0_maint/lib/matplotlib/lines.py	2010年07月29日 16:16:17 UTC (rev 8593)
@@ -712,13 +712,13 @@
 ================ =================
 linestyle description
 ================ =================
- '-' solid
- '--' dashed
- '-.' dash_dot
- ':' dotted
- 'None' draw nothing
- ' ' draw nothing
- '' draw nothing
+ ``'-'`` solid
+ ``'--'`` dashed
+ ``'-.'`` dash_dot
+ ``':'`` dotted
+ ``'None'`` draw nothing
+ ``' '`` draw nothing
+ ``''`` draw nothing
 ================ =================
 
 'steps' is equivalent to 'steps-pre' and is maintained for
@@ -729,8 +729,8 @@
 :meth:`set_drawstyle`
 To set the drawing style (stepping) of the plot.
 
- ACCEPTS: [ '-' | '--' | '-.' | ':' | 'None' | ' ' | '' ] and
- any drawstyle in combination with a linestyle, e.g. 'steps--'.
+ ACCEPTS: [ ``'-'`` | ``'--'`` | ``'-.'`` | ``':'`` | ``'None'`` | ``' '`` | ``''`` ]
+ and any drawstyle in combination with a linestyle, e.g. ``'steps--'``.
 """
 
 for ds in self.drawStyleKeys: # long names are first in the list
@@ -759,28 +759,28 @@
 ========== ==========================
 marker description
 ========== ==========================
- '.' point
- ',' pixel
- 'o' circle
- 'v' triangle_down
- '^' triangle_up
- '<' triangle_left
- '>' triangle_right
- '1' tri_down
- '2' tri_up
- '3' tri_left
- '4' tri_right
- 's' square
- 'p' pentagon
- '*' star
- 'h' hexagon1
- 'H' hexagon2
- '+' plus
- 'x' x
- 'D' diamond
- 'd' thin_diamond
- '|' vline
- '_' hline
+ ``'.'`` point
+ ``','`` pixel
+ ``'o'`` circle
+ ``'v'`` triangle_down
+ ``'^'`` triangle_up
+ ``'<'`` triangle_left
+ ``'>'`` triangle_right
+ ``'1'`` tri_down
+ ``'2'`` tri_up
+ ``'3'`` tri_left
+ ``'4'`` tri_right
+ ``'s'`` square
+ ``'p'`` pentagon
+ ``'*'`` star
+ ``'h'`` hexagon1
+ ``'H'`` hexagon2
+ ``'+'`` plus
+ ``'x'`` x
+ ``'D'`` diamond
+ ``'d'`` thin_diamond
+ ``'|'`` vline
+ ``'_'`` hline
 TICKLEFT tickleft
 TICKRIGHT tickright
 TICKUP tickup
@@ -789,19 +789,23 @@
 CARETRIGHT caretright
 CARETUP caretup
 CARETDOWN caretdown
- 'None' nothing
- ' ' nothing
- '' nothing
+ ``'None'`` nothing
+ ``' '`` nothing
+ ``''`` nothing
 '$...$' render the string using mathtext
 ========== ==========================
 
 
 
- ACCEPTS: [ '+' | '*' | ',' | '.' | '1' | '2' | '3' | '4'
- | '<' | '>' | 'D' | 'H' | '^' | '_' | 'd'
- | 'h' | 'o' | 'p' | 's' | 'v' | 'x' | '|'
+ ACCEPTS: [ ``'+'`` | ``'*'`` | ``','`` | ``'.'`` 
+ | ``'1'`` | ``'2'`` | ``'3'`` | ``'4'``
+ | ``'<'`` | ``'>'`` | ``'D'`` | ``'H'`` 
+ | ``'^'`` | ``'_'`` | ``'d'`` | ``'h'`` 
+ | ``'o'`` | ``'p'`` | ``'s'`` | ``'v'`` 
+ | ``'x'`` | ``'|'``
 | TICKUP | TICKDOWN | TICKLEFT | TICKRIGHT
- | 'None' | ' ' | '' | '$...$']
+ | CARETUP | CARETDOWN | CARETLEFT | CARETRIGHT
+ | ``'None'`` | ``' '`` | ``''`` | '$...$']
 
 """
 if marker in self._markers:
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年07月30日 18:56:24
Revision: 8601
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8601&view=rev
Author: mdboom
Date: 2010年07月30日 18:56:18 +0000 (2010年7月30日)
Log Message:
-----------
[3036982] imsave: wrong image size
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/image.py
 branches/v1_0_maint/lib/matplotlib/tests/test_image.py
Modified: branches/v1_0_maint/lib/matplotlib/image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/image.py	2010年07月30日 18:47:19 UTC (rev 8600)
+++ branches/v1_0_maint/lib/matplotlib/image.py	2010年07月30日 18:56:18 UTC (rev 8601)
@@ -1225,7 +1225,7 @@
 from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
 from matplotlib.figure import Figure
 
- figsize = [x / float(dpi) for x in arr.shape]
+ figsize = [x / float(dpi) for x in arr.shape[::-1]]
 fig = Figure(figsize=figsize, dpi=dpi, frameon=False)
 canvas = FigureCanvas(fig)
 im = fig.figimage(arr, cmap=cmap, vmin=vmin, vmax=vmax, origin=origin)
Modified: branches/v1_0_maint/lib/matplotlib/tests/test_image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/test_image.py	2010年07月30日 18:47:19 UTC (rev 8600)
+++ branches/v1_0_maint/lib/matplotlib/tests/test_image.py	2010年07月30日 18:56:18 UTC (rev 8601)
@@ -77,15 +77,13 @@
 # the data is 100% identical.
 from numpy import random
 random.seed(1)
- data = random.rand(256, 256)
+ data = random.rand(256, 128)
 
 buff_dpi1 = cStringIO.StringIO()
 plt.imsave(buff_dpi1, data, dpi=1)
- plt.imsave("test_dpi1.png", data, dpi=1)
 
 buff_dpi100 = cStringIO.StringIO()
 plt.imsave(buff_dpi100, data, dpi=100)
- plt.imsave("test_dpi100.png", data, dpi=1)
 
 buff_dpi1.seek(0)
 arr_dpi1 = plt.imread(buff_dpi1)
@@ -93,6 +91,9 @@
 buff_dpi100.seek(0)
 arr_dpi100 = plt.imread(buff_dpi100)
 
+ assert arr_dpi1.shape == (256, 128, 4)
+ assert arr_dpi100.shape == (256, 128, 4)
+
 assert_array_equal(arr_dpi1, arr_dpi100)
 
 @image_comparison(baseline_images=['image_clip'])
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年08月02日 12:30:55
Revision: 8612
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8612&view=rev
Author: mdboom
Date: 2010年08月02日 12:30:48 +0000 (2010年8月02日)
Log Message:
-----------
Fix image placement bug introduced in 8585 (reported by JJ)
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/image.py
 branches/v1_0_maint/lib/matplotlib/tests/test_image.py
Added Paths:
-----------
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.svg
Modified: branches/v1_0_maint/lib/matplotlib/image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/image.py	2010年08月01日 21:12:58 UTC (rev 8611)
+++ branches/v1_0_maint/lib/matplotlib/image.py	2010年08月02日 12:30:48 UTC (rev 8612)
@@ -596,7 +596,6 @@
 l, b, r, t = self.axes.bbox.extents
 widthDisplay = (round(r*magnification) + 0.5) - (round(l*magnification) - 0.5)
 heightDisplay = (round(t*magnification) + 0.5) - (round(b*magnification) - 0.5)
- im.apply_translation(tx, ty)
 
 # resize viewport to display
 rx = widthDisplay / numcols
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.pdf
===================================================================
(Binary files differ)
Property changes on: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.pdf
___________________________________________________________________
Added: svn:mime-type
 + application/octet-stream
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.png
===================================================================
(Binary files differ)
Property changes on: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.png
___________________________________________________________________
Added: svn:mime-type
 + application/octet-stream
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.svg
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.svg	 (rev 0)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/imshow.svg	2010年08月02日 12:30:48 UTC (rev 8612)
@@ -0,0 +1,395 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Created with matplotlib (http://matplotlib.sourceforge.net/) -->
+<svg width="576pt" height="432pt" viewBox="0 0 576 432"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ version="1.1"
+ id="svg1">
+<filter id="colorAdd"><feComposite in="SourceGraphic" in2="BackgroundImage" operator="arithmetic" k2="1" k3="1"/></filter>
+<g id="figure1">
+<g id="patch1">
+<path style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M0.000000 432.000000L576.000000 432.000000L576.000000 0.000000
+L0.000000 0.000000L0.000000 432.000000"/>
+</g>
+<g id="axes1">
+<g id="patch2">
+<path style="fill: #ffffff; opacity: 1.000000" d="M122.400000 388.800000L468.000000 388.800000L468.000000 43.200000
+L122.400000 43.200000L122.400000 388.800000"/>
+</g>
+<defs>
+ <clipPath id="p3268b4c49a7b373f0e4e01e239475b1d">
+<rect x="122.400000" y="43.200000" width="345.600000" height="345.600000"/>
+ </clipPath>
+</defs><image x="122.400000" y="41.800000" width="347.000000" height="347.000000" clip-path="url(#p3268b4c49a7b373f0e4e01e239475b1d)" xlink:href="data:image/png;base64,
+iVBORw0KGgoAAAANSUhEUgAAAVsAAAFbCAYAAAB7zy3tAAAABHNCSVQICAgIfAhkiAAAGkVJREFU
+eJzt3V+W28ZygPECRrac5OFuIN6HVuJFOhvRPnw3kKck9hWRhyGA6uqqRgPklMzW9ztHJog/DXB0
+9KkH5MjTsiwCAPhY8/e+AAD4ERBbAEhAbAEgAbEFgATEFgASEFsASEBsASABsQWABMQWABIQWwBI
+QGwBIAGxBYAExBYAEhBbAEhAbAEgAbEFgATEFgASEFsASEBsASABsQWABMQWABIQWwBIQGwBIAGx
+BYAExBYAEhBbAEhAbAEgAbEFgATEFgASEFsASEBsASABsQWABMQWABIQWwBIQGwBIAGxBYAExBYA
+EhBbAEhAbAEgAbEFgATEFgASEFsASEBsASABsQWABMQWABIQWwBIQGwBIAGxBYAExBYAEhBbAEhA
+bAEgAbEFgATEFgASEFsASEBsASABsQWABMQWABIQWwBIQGwBIAGxBYAExBYAEhBbAEhAbAEgAbEF
+gATEFgASEFsASEBsASABsQWABMQWABIQWwBIQGwBIAGxBYAExBYAEhBbAEhAbAEgAbEFgATEFgAS
+EFsASEBsASABsQWABMQWABIQWwBIQGwBIAGxBYAExBYAEhBbAEhAbAEgAbEFgATEFgASEFsASEBs
+ASABsQWABMQWABIQWwBIQGwBIAGxBYAExBYAEhBbAEhAbAEgAbEFgATEFgASEFsASEBsASABsQWA
+BMQWABIQWwBIQGwBIAGxBYAExBYAEhBbAEhAbAEgAbEFgATEFgASEFsASPDpe18AnuePP/77169f
+//kl3mM68dxbPlp3Zcwz5zo6tuf43tdy9jqecc7Sly8/ff3117c/wh3wUojtQL5+/eeX3377r9/9
+rZOUf8Cj59Gv+eB579gSHHt27Na2K+P3vsbW6zp7ztkcX/r993/8RmzHwW0EXLR87wsAXgqxBYAE
+xBYAEhBbAEhAbH849g0Z+ybPI/t7784fvYN/9TqiY+N394/HaD3v3Qb4+DTCUN5E5N+DbVffRb/6
+aQFpbJtEppPnnC5e+9nzrK8vPC54ndOZr6U3vmMm6iMhtkP5JDmxPYqQWT4KkbfdjZEdM3gN09H6
+C0F2x/Rem722g/MU4xp83zkUYjuUo5ltT2Bb2zpneSJOnMyjDo8Nlg1pNFZP6KaecTvCatfpcbex
+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
++eWwAAAAAElFTkSuQmCC
+"/>
+<g id="matplotlib.axis1">
+<g id="xtick1">
+<g id="line2d1">
+<defs><path id="m30e32995789d870ad79a2e54c91cf9c6" d="M0.000000 0.000000L0.000000 -4.000000"/></defs>
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="122.400000" y="388.800000"/>
+</g></g>
+<g id="line2d2">
+<defs><path id="m9281cae24120827b11d5ea8a7ad3e96b" d="M0.000000 0.000000L0.000000 4.000000"/></defs>
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="122.400000" y="43.200000"/>
+</g></g>
+<g id="text1">
+<defs>
+<path id="c_7a2040fe3b94fcd41d0a72c84e93b115" d="M31.781250 -66.406250q-7.609375 0.000000 -11.453125 7.500000q-3.828125 7.484375 -3.828125 22.531250q0.000000 14.984375 3.828125 22.484375q3.843750 7.500000 11.453125 7.500000q7.671875 0.000000 11.500000 -7.500000q3.843750 -7.500000 3.843750 -22.484375q0.000000 -15.046875 -3.843750 -22.531250q-3.828125 -7.500000 -11.500000 -7.500000M31.781250 -74.218750q12.265625 0.000000 18.734375 9.703125q6.468750 9.687500 6.468750 28.140625q0.000000 18.406250 -6.468750 28.109375q-6.468750 9.687500 -18.734375 9.687500q-12.250000 0.000000 -18.718750 -9.687500q-6.468750 -9.703125 -6.468750 -28.109375q0.000000 -18.453125 6.468750 -28.140625q6.468750 -9.703125 18.718750 -9.703125"/>
+<path id="c_ed3e21196fb739f392806f09ca0594ef" d="M10.687500 -12.406250l10.312500 0.000000l0.000000 12.406250l-10.312500 0.000000z"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(113.650000,401.706250)scale(0.120000)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="xtick2">
+<g id="line2d3">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="180.000000" y="388.800000"/>
+</g></g>
+<g id="line2d4">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="180.000000" y="43.200000"/>
+</g></g>
+<g id="text2">
+<defs>
+<path id="c_1260a2df50f305f3db244e29828f968e" d="M10.796875 -72.906250l38.718750 0.000000l0.000000 8.312500l-29.687500 0.000000l0.000000 17.859375q2.140625 -0.734375 4.281250 -1.093750q2.156250 -0.359375 4.312500 -0.359375q12.203125 0.000000 19.328125 6.687500q7.140625 6.687500 7.140625 18.109375q0.000000 11.765625 -7.328125 18.296875q-7.328125 6.515625 -20.656250 6.515625q-4.593750 0.000000 -9.359375 -0.781250q-4.750000 -0.781250 -9.828125 -2.343750l0.000000 -9.921875q4.390625 2.390625 9.078125 3.562500q4.687500 1.171875 9.906250 1.171875q8.453125 0.000000 13.375000 -4.437500q4.937500 -4.437500 4.937500 -12.062500q0.000000 -7.609375 -4.937500 -12.046875q-4.921875 -4.453125 -13.375000 -4.453125q-3.953125 0.000000 -7.890625 0.875000q-3.921875 0.875000 -8.015625 2.734375z"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(171.375000,401.706250)scale(0.120000)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="xtick3">
+<g id="line2d5">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="237.600000" y="388.800000"/>
+</g></g>
+<g id="line2d6">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="237.600000" y="43.200000"/>
+</g></g>
+<g id="text3">
+<defs>
+<path id="c_42baa63129a918535c52adb20d687ea7" d="M12.406250 -8.296875l16.109375 0.000000l0.000000 -55.625000l-17.531250 3.515625l0.000000 -8.984375l17.437500 -3.515625l9.859375 0.000000l0.000000 64.609375l16.109375 0.000000l0.000000 8.296875l-41.984375 0.000000z"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(229.107812,401.706250)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="xtick4">
+<g id="line2d7">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="295.200000" y="388.800000"/>
+</g></g>
+<g id="line2d8">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="295.200000" y="43.200000"/>
+</g></g>
+<g id="text4">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(286.832812,401.550000)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="xtick5">
+<g id="line2d9">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="352.800000" y="388.800000"/>
+</g></g>
+<g id="line2d10">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="352.800000" y="43.200000"/>
+</g></g>
+<g id="text5">
+<defs>
+<path id="c_ed3f3ed3ebfbd18bcb9c012009a68ad1" d="M19.187500 -8.296875l34.421875 0.000000l0.000000 8.296875l-46.281250 0.000000l0.000000 -8.296875q5.609375 -5.812500 15.296875 -15.593750q9.703125 -9.796875 12.187500 -12.640625q4.734375 -5.312500 6.609375 -9.000000q1.890625 -3.687500 1.890625 -7.250000q0.000000 -5.812500 -4.078125 -9.468750q-4.078125 -3.671875 -10.625000 -3.671875q-4.640625 0.000000 -9.796875 1.609375q-5.140625 1.609375 -11.000000 4.890625l0.000000 -9.968750q5.953125 -2.390625 11.125000 -3.609375q5.187500 -1.218750 9.484375 -1.218750q11.328125 0.000000 18.062500 5.671875q6.734375 5.656250 6.734375 15.125000q0.000000 4.500000 -1.687500 8.531250q-1.671875 4.015625 -6.125000 9.484375q-1.218750 1.421875 -7.765625 8.187500q-6.531250 6.765625 -18.453125 18.921875"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(344.089062,401.706250)scale(0.120000)">
+<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="xtick6">
+<g id="line2d11">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="410.400000" y="388.800000"/>
+</g></g>
+<g id="line2d12">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="410.400000" y="43.200000"/>
+</g></g>
+<g id="text6">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(401.814062,401.706250)scale(0.120000)">
+<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="xtick7">
+<g id="line2d13">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="468.000000" y="388.800000"/>
+</g></g>
+<g id="line2d14">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="468.000000" y="43.200000"/>
+</g></g>
+<g id="text7">
+<defs>
+<path id="c_3dcfa38a02242cb63ec6726c6e70be7a" d="M40.578125 -39.312500q7.078125 1.515625 11.046875 6.312500q3.984375 4.781250 3.984375 11.812500q0.000000 10.781250 -7.421875 16.703125q-7.421875 5.906250 -21.093750 5.906250q-4.578125 0.000000 -9.437500 -0.906250q-4.859375 -0.906250 -10.031250 -2.718750l0.000000 -9.515625q4.093750 2.390625 8.968750 3.609375q4.890625 1.218750 10.218750 1.218750q9.265625 0.000000 14.125000 -3.656250q4.859375 -3.656250 4.859375 -10.640625q0.000000 -6.453125 -4.515625 -10.078125q-4.515625 -3.640625 -12.562500 -3.640625l-8.500000 0.000000l0.000000 -8.109375l8.890625 0.000000q7.265625 0.000000 11.125000 -2.906250q3.859375 -2.906250 3.859375 -8.375000q0.000000 -5.609375 -3.984375 -8.609375q-3.968750 -3.015625 -11.390625 -3.015625q-4.062500 0.000000 -8.703125 0.890625q-4.640625 0.875000 -10.203125 2.718750l0.000000 -8.781250q5.625000 -1.562500 10.531250 -2.343750q4.906250 -0.781250 9.250000 -0.781250q11.234375 0.000000 17.765625 5.109375q6.546875 5.093750 6.546875 13.781250q0.000000 6.062500 -3.468750 10.234375q-3.468750 4.171875 -9.859375 5.781250"/>
+</defs>
+<g style="fill: #000000; opacity: 1.000000" transform="translate(459.312500,401.706250)scale(0.120000)">
+<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+</g>
+<g id="matplotlib.axis2">
+<g id="ytick1">
+<g id="line2d15">
+<defs><path id="m3400efa6b1638b3fea9e19e898273957" d="M0.000000 0.000000L4.000000 0.000000"/></defs>
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="388.800000"/>
+</g></g>
+<g id="line2d16">
+<defs><path id="m20b58b2501143cb5e0a5e8f1ef6f1643" d="M0.000000 0.000000L-4.000000 0.000000"/></defs>
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="388.800000"/>
+</g></g>
+<g id="text8">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(100.900000,393.167188)scale(0.120000)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="ytick2">
+<g id="line2d17">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="331.200000"/>
+</g></g>
+<g id="line2d18">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="331.200000"/>
+</g></g>
+<g id="text9">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(101.150000,335.567188)scale(0.120000)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="ytick3">
+<g id="line2d19">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="273.600000"/>
+</g></g>
+<g id="line2d20">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="273.600000"/>
+</g></g>
+<g id="text10">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(101.415625,277.967188)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="ytick4">
+<g id="line2d21">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="216.000000"/>
+</g></g>
+<g id="line2d22">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="216.000000"/>
+</g></g>
+<g id="text11">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(101.665625,220.289062)scale(0.120000)">
+<use xlink:href="#c_42baa63129a918535c52adb20d687ea7"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="ytick5">
+<g id="line2d23">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="158.400000"/>
+</g></g>
+<g id="line2d24">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="158.400000"/>
+</g></g>
+<g id="text12">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(100.978125,162.767187)scale(0.120000)">
+<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="ytick6">
+<g id="line2d25">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="100.800000"/>
+</g></g>
+<g id="line2d26">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="100.800000"/>
+</g></g>
+<g id="text13">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(101.228125,105.167188)scale(0.120000)">
+<use xlink:href="#c_ed3f3ed3ebfbd18bcb9c012009a68ad1"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_1260a2df50f305f3db244e29828f968e" x="95.410156"/>
+</g>
+</g>
+</g>
+<g id="ytick7">
+<g id="line2d27">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="122.400000" y="43.200000"/>
+</g></g>
+<g id="line2d28">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="468.000000" y="43.200000"/>
+</g></g>
+<g id="text14">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(101.025000,47.567187)scale(0.120000)">
+<use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a"/>
+<use xlink:href="#c_ed3e21196fb739f392806f09ca0594ef" x="63.623047"/>
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="95.410156"/>
+</g>
+</g>
+</g>
+</g>
+<g id="patch3">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M122.400000 43.200000L468.000000 43.200000"/>
+</g>
+<g id="patch4">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M468.000000 388.800000L468.000000 43.200000"/>
+</g>
+<g id="patch5">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M122.400000 388.800000L468.000000 388.800000"/>
+</g>
+<g id="patch6">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M122.400000 388.800000L122.400000 43.200000"/>
+</g>
+</g>
+</g>
+</svg>
Modified: branches/v1_0_maint/lib/matplotlib/tests/test_image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/test_image.py	2010年08月01日 21:12:58 UTC (rev 8611)
+++ branches/v1_0_maint/lib/matplotlib/tests/test_image.py	2010年08月02日 12:30:48 UTC (rev 8612)
@@ -109,7 +109,20 @@
 
 fig.savefig('image_clip')
 
+@image_comparison(baseline_images=['imshow'])
+def test_imshow():
+ import numpy as np
+ import matplotlib.pyplot as plt
 
+ fig = plt.figure()
+ arr = np.arange(100).reshape((10, 10))
+ ax = fig.add_subplot(111)
+ ax.imshow(arr, interpolation="bilinear", extent=(1,2,1,2))
+ ax.set_xlim(0,3)
+ ax.set_ylim(0,3)
+
+ fig.savefig('imshow')
+
 if __name__=='__main__':
 import nose
 nose.runmodule(argv=['-s','--with-doctest'], exit=False)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年08月18日 17:00:36
Revision: 8649
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8649&view=rev
Author: mdboom
Date: 2010年08月18日 17:00:29 +0000 (2010年8月18日)
Log Message:
-----------
Fix positions of r axis labels when rmin != 0.0 in polar plots.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/projections/polar.py
 branches/v1_0_maint/lib/matplotlib/transforms.py
Modified: branches/v1_0_maint/lib/matplotlib/projections/polar.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/projections/polar.py	2010年08月18日 16:09:19 UTC (rev 8648)
+++ branches/v1_0_maint/lib/matplotlib/projections/polar.py	2010年08月18日 17:00:29 UTC (rev 8649)
@@ -14,7 +14,7 @@
 from matplotlib.ticker import Formatter, Locator, FormatStrFormatter
 from matplotlib.transforms import Affine2D, Affine2DBase, Bbox, \
 BboxTransformTo, IdentityTransform, Transform, TransformWrapper, \
- ScaledTranslation, blended_transform_factory
+ ScaledTranslation, blended_transform_factory, BboxTransformToMaxOnly
 import matplotlib.spines as mspines
 
 class PolarAxes(Axes):
@@ -41,16 +41,16 @@
 self._axis = axis
 
 def transform(self, tr):
- xy = np.zeros(tr.shape, np.float_)
+ xy = np.empty(tr.shape, np.float_)
 if self._axis is not None:
 rmin = self._axis.viewLim.ymin
 else:
 rmin = 0
 
- t = tr[:, 0:1]
- r = tr[:, 1:2]
- x = xy[:, 0:1]
- y = xy[:, 1:2]
+ t = tr[:, 0:1]
+ r = tr[:, 1:2]
+ x = xy[:, 0:1]
+ y = xy[:, 1:2]
 
 if rmin != 0:
 r = r - rmin
@@ -188,7 +188,7 @@
 
 def view_limits(self, vmin, vmax):
 vmin, vmax = self.base.view_limits(vmin, vmax)
- return 0, vmax
+ return vmin, vmax
 
 
 def __init__(self, *args, **kwargs):
@@ -290,7 +290,8 @@
 # The r-axis labels are put at an angle and padded in the r-direction
 self._r_label1_position = ScaledTranslation(
 22.5, self._rpad,
- blended_transform_factory(Affine2D(), BboxTransformTo(self.viewLim)))
+ blended_transform_factory(
+ Affine2D(), BboxTransformToMaxOnly(self.viewLim)))
 self._yaxis_text1_transform = (
 self._r_label1_position +
 Affine2D().scale(1.0 / 360.0, 1.0) +
@@ -298,7 +299,8 @@
 )
 self._r_label2_position = ScaledTranslation(
 22.5, -self._rpad,
- blended_transform_factory(Affine2D(), BboxTransformTo(self.viewLim)))
+ blended_transform_factory(
+ Affine2D(), BboxTransformToMaxOnly(self.viewLim)))
 self._yaxis_text2_transform = (
 self._r_label2_position +
 Affine2D().scale(1.0 / 360.0, 1.0) +
Modified: branches/v1_0_maint/lib/matplotlib/transforms.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/transforms.py	2010年08月18日 16:09:19 UTC (rev 8648)
+++ branches/v1_0_maint/lib/matplotlib/transforms.py	2010年08月18日 17:00:29 UTC (rev 8649)
@@ -2107,6 +2107,31 @@
 get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__
 
 
+class BboxTransformToMaxOnly(BboxTransformTo):
+ """
+ :class:`BboxTransformTo` is a transformation that linearly
+ transforms points from the unit bounding box to a given
+ :class:`Bbox` with a fixed upper left of (0, 0).
+ """
+ def __repr__(self):
+ return "BboxTransformToMaxOnly(%s)" % (self._boxout)
+ __str__ = __repr__
+
+ def get_matrix(self):
+ if self._invalid:
+ xmax, ymax = self._boxout.max
+ if DEBUG and (xmax == 0 or ymax == 0):
+ raise ValueError("Transforming to a singular bounding box.")
+ self._mtx = np.array([[xmax, 0.0, 0.0],
+ [ 0.0, ymax, 0.0],
+ [ 0.0, 0.0, 1.0]],
+ np.float_)
+ self._inverted = None
+ self._invalid = 0
+ return self._mtx
+ get_matrix.__doc__ = Affine2DBase.get_matrix.__doc__
+
+
 class BboxTransformFrom(Affine2DBase):
 """
 :class:`BboxTransformFrom` linearly transforms points from a given
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年08月18日 17:35:34
Revision: 8650
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8650&view=rev
Author: mdboom
Date: 2010年08月18日 17:35:26 +0000 (2010年8月18日)
Log Message:
-----------
Fix unit tests for polar rmin changes in last commit.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/projections/polar.py
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.svg
Modified: branches/v1_0_maint/lib/matplotlib/projections/polar.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/projections/polar.py	2010年08月18日 17:00:29 UTC (rev 8649)
+++ branches/v1_0_maint/lib/matplotlib/projections/polar.py	2010年08月18日 17:35:26 UTC (rev 8650)
@@ -188,7 +188,7 @@
 
 def view_limits(self, vmin, vmax):
 vmin, vmax = self.base.view_limits(vmin, vmax)
- return vmin, vmax
+ return 0, vmax
 
 
 def __init__(self, *args, **kwargs):
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.pdf
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.pdf	2010年08月18日 17:00:29 UTC (rev 8649)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/polar_rmin.pdf	2010年08月18日 17:35:26 UTC (rev 8650)
@@ -15,113 +15,118 @@
 9 0 obj
 << /Filter /FlateDecode /Length 11 0 R >>
 stream
-x\x9C\xED\x9DϮ<?n\xDD\xF7\xF5\xB5L6\xFDWik 1\xE0]\xE2\xB2\xB2r\x90\xC6u\x80\xAC\xFCZyĜշKE];;?\xAF\xAE1\xE3\xF9ޮ\xAE\xAE\x92DR$Ͽ=\xD2\xF9Wg<\xFF\x87\xFE\xFB\x97G8\xC3\xF9wg\xEDM\xFF\xFBe\xFF[rҿ\xC2\xE7\xF5\xF9\xF1\xFA\xDE\xDF\xEB_y\xA4\xEBҕW\xD2M9\xE7וz\xB5\xBD?˽\xBF\xFA\x95K\x88\xAD\xC7v\xB6\xF8*\xA1\xA7q\x85\x91\xF5\xBB1\xBC\xE2u\x85\xFB5\x8E\xA1{c\xE5J1\x9Es\x96\x92^u\xE8\xC7\xE2\xAD\x9C1\xB5W\x8A\xAD\x8E+\xA7\xAB\x9C\xA5\x85\xD7uƮ\xD0\xCF\xDEl~\xA4\xEF\x9Cs\xBC\xFF\xAD\xC7ݯ\xF3\xFC\xBD\xEA\xFAb\xCFW\xC9\xF9\xBA\xFFһ\xB8Qd=v\xFD\xA9u\xD4\xF9\xBAx\xF2\xF5\xFE\xD7\xF17g҃?/9/\xC7q\xAD\x83q\xBF\xA7\xF7Ll\xEF\xF5\xB4e\xDD8b\xAC\x9A\xF5\xC7\xC0\xDFŦw\x99\xFF~L\x9B\xFB=7\xCF\xCFwqK\xE4\x86\xF1\\xDCǰM>\x82\xF27\xE7\xFF<\xFE\xFB\xF1\xBF\xCF_\xC9\xF9\x95\x9C?_r\xFE\xF3\xF9\xBF\x84So8\xCF\xFF4\x88\xC5\xFB;}\xAF\xBD\xAER\xCF)h\xC8I\xEF\xAC\xC9i\xADf\xFDSЕ.
-9
-\xB8\xA7+\xD9\xF5c\xCA)\xA51jz\x97WU\x9Fk\xAA]\xCF5i\x85c\xD7tp~\xD5\xDC\xF4G\x99\xEBE\x8F+!\xB71\xDE\xF7KRR\xB1\x94֢]O)\x84\xA6A\xA7b\xF7\xC7W\xEDZ\x972\xD2\xE0~M`\xAD5\xE50\xE2e\xF7\x87W\xB9\xF4Ҋ\xBD\xBF~Nokɞ߇\x94\x87@Yo\xA1\xEB\xFA\xB9b\xBD\xA2>\xE3~]O\x92\xE0p\x85\xA6iM\xCDRJ-]\xD0\xED\xFE\xEBծ\xA0\x97I\xA9h҂\xBE\x9E\xAE\xF3żs\xBF\x96%kZ\xBC\xBA\xDE/t=.զ\xE9\x8C\xC3\xEE\xB7z\xEEm\xAE7\xA6\xE3\xD2d\x87>k\x8Du\x8F&Y\xD7\xEB+\i\xB4z\xE5\xDA\xDF\xF7\xF78Z\xAAz`\xD6\xF5\xCCtĦ\xF7	\xF5}\xFFUr\xE8\xE1*A\xEF\xD2+\xE8\xD1W˹\xA7\xF7\xFBk\xB9Z\x91L\xCDO\xD0\xF8r\xD7|iA\xE3\xFB\xFD\xABV[C(\xA8\x83\xA4\xEC\xD2d\x871\xFA\xF7\xF4\xC5C	MK\xAA\xCB]\xA3\xEDU\xEB#%xO\xDF(\x9A\x99\xD1G@\xD7꫕!y\x90\xD9\xF0\xB5<\xD2'}\xA1\x94!\x81E\xC3\xEB\xAD\xF6\xAB\xBE\x96W\xDD\xF8
-\xCDw,\xDF%񈭽\xA5'\xD5B-\xF3\xF8\xF8һ\xA9E\xEC\xF5[\xFA\xBA\xFE\x90*K\xBA\xE254YI+\xF5)<ү\x96c\x95pI\xB3\xA54\xAD\xD6\xBE\x85K\xAF|iH\xF6S\x837\xD5%\xCD\xD5\xD0\xC7M\x8F\xD2ȳ&7\xF2]=\xFB\xE2U5V]z!\xB5Hzn\x99\xFBZ)\x9A\xACvi\xA1\xA2\xDE,ǚ5\xAEL\x91F{e-m֛k\xA1\xA2F֊\xC4T\xB39o\xBFICk\xB3\xCB1\xC7r\xF1\xA1\x97\xD0\xF34i%\xA4\xCAHӫ\x8F*\xB9\x89&\x86z\x87W\xE0\xDA%\xB0\xCB
-9\xAE5\xF7a\xB7\xEB\xE9\xB1غ\x97>\xAFKFR\xD5\xECV\xBB\xFF\xD2:t&+\xD4y]\xFA\x96[FO\xB8_z#\x95\xAD!J\xAC\xE6\xDBg\x9ET\xB4\x90\xA8\xA1~[r%\xC5\xEF=\xA4a\xA3\xA5&=K\xB0h\xF7wɑ~\xACJX\xA3]\xD7*i\xBAL\xAB\xB8_r\x8F\xA1\xE5b\x93rN҂\xEC\xF1I\xEF+D\xD1\x8Cl\xCD$"\x97$\xFA\xBAl\xF8IP\xABG\x85,Y\xB9l\xA1\x85(\x97\x86\xDFK\xB1\xFB\xA5%B\xE9U4
-\xF2\xBA\xA4Zܟ\xC3+\xE9iTM\x9B\xE49]\xE6\xFE\x9C\x84\xF1\xB1FTߤXW됰d\xBB[\xB2 \xA0\x8Cұ\xD6MId#\xAA\xAD\xE7jw냀Fhy\xAE\xB1\xCA\xC6\xD4b\x9CO/\xBD\xA1@Ib[M\x87\xF5\xB0"D\xC3޾h\xED\x80-\x8C
From: <ef...@us...> - 2010年09月01日 19:44:43
Revision: 8673
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8673&view=rev
Author: efiring
Date: 2010年09月01日 19:44:36 +0000 (2010年9月01日)
Log Message:
-----------
[3054467] fix bug in PatchCollection; restore attribute access to Patch.fill
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/collections.py
 branches/v1_0_maint/lib/matplotlib/patches.py
Modified: branches/v1_0_maint/lib/matplotlib/collections.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/collections.py	2010年08月30日 15:20:42 UTC (rev 8672)
+++ branches/v1_0_maint/lib/matplotlib/collections.py	2010年09月01日 19:44:36 UTC (rev 8673)
@@ -1034,7 +1034,7 @@
 
 if match_original:
 def determine_facecolor(patch):
- if patch.fill:
+ if patch.get_fill():
 return patch.get_facecolor()
 return [0, 0, 0, 0]
 
Modified: branches/v1_0_maint/lib/matplotlib/patches.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/patches.py	2010年08月30日 15:20:42 UTC (rev 8672)
+++ branches/v1_0_maint/lib/matplotlib/patches.py	2010年09月01日 19:44:36 UTC (rev 8673)
@@ -312,13 +312,18 @@
 
 ACCEPTS: [True | False]
 """
- self._fill = b
+ self._fill = bool(b)
 self.set_facecolor(self._original_facecolor)
 
 def get_fill(self):
 'return whether fill is set'
 return self._fill
 
+ # Make fill a property so as to preserve the long-standing
+ # but somewhat inconsistent behavior in which fill was an
+ # attribute.
+ fill = property(get_fill, set_fill)
+
 def set_hatch(self, hatch):
 """
 Set the hatching pattern
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年10月03日 21:17:46
Revision: 8725
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8725&view=rev
Author: efiring
Date: 2010年10月03日 21:17:39 +0000 (2010年10月03日)
Log Message:
-----------
bugfix: applied patch by Stan West to fix error in colormap reversal
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/_cm.py
 branches/v1_0_maint/lib/matplotlib/cm.py
Modified: branches/v1_0_maint/lib/matplotlib/_cm.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/_cm.py	2010年10月03日 21:04:10 UTC (rev 8724)
+++ branches/v1_0_maint/lib/matplotlib/_cm.py	2010年10月03日 21:17:39 UTC (rev 8725)
@@ -1554,7 +1554,7 @@
 (0.000, 0.000, 0.000), (0.0547, 1.000, 1.000),
 (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)),
+ 'green': ((0, 0, 0), (1, 1, 1)),
 'blue': (
 (0.000, 0.000, 0.000), (0.500, 1.000, 1.000),
 (0.735, 0.000, 0.000), (1.000, 1.000, 1.000))
Modified: branches/v1_0_maint/lib/matplotlib/cm.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/cm.py	2010年10月03日 21:04:10 UTC (rev 8724)
+++ branches/v1_0_maint/lib/matplotlib/cm.py	2010年10月03日 21:17:39 UTC (rev 8725)
@@ -34,7 +34,8 @@
 # each time, so the colors are identical
 # and the result is shades of gray.
 else:
- valnew = [(1.0 - a, b, c) for a, b, c in reversed(val)]
+ # Flip x and exchange the y values facing x = 0 and x = 1.
+ valnew = [(1.0 - x, y1, y0) for x, y0, y1 in reversed(val)]
 data_r[key] = valnew
 return data_r
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年10月19日 14:16:30
Revision: 8756
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8756&view=rev
Author: mdboom
Date: 2010年10月19日 14:16:23 +0000 (2010年10月19日)
Log Message:
-----------
Fix LogFormatter, as reported by G?195円?182円khan Sever
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg
 branches/v1_0_maint/lib/matplotlib/ticker.py
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.pdf
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.png
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg	2010年10月19日 12:44:14 UTC (rev 8755)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/symlog.svg	2010年10月19日 14:16:23 UTC (rev 8756)
@@ -11,12 +11,12 @@
 <g id="figure1">
 <g id="patch1">
 <path style="fill: #ffffff; stroke: #ffffff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M0.000000 432.000000L576.000000 432.000000L576.000000 0.000000
-L0.000000 0.000000L0.000000 432.000000"/>
+L0.000000 0.000000z"/>
 </g>
 <g id="axes1">
 <g id="patch2">
 <path style="fill: #ffffff; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000L518.400000 43.200000
-L72.000000 43.200000L72.000000 388.800000"/>
+L72.000000 43.200000z"/>
 </g>
 <g id="line2d1">
 <defs>
@@ -136,12 +136,9 @@
 <g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m20b58b2501143cb5e0a5e8f1ef6f1643" x="518.400000" y="381.525282"/>
 </g></g>
 <g id="text7">
-<defs>
-<path id="c_f47f2818876b2f1a61c47f270461e46e" d="M25.000000 2.203125q-12.250000 0.000000 -16.671875 -10.078125q-4.421875 -10.093750 -4.421875 -24.015625q0.000000 -8.687500 1.578125 -16.343750q1.593750 -7.671875 6.296875 -13.015625q4.718750 -5.359375 13.218750 -5.359375q6.593750 0.000000 10.781250 3.234375q4.203125 3.218750 6.406250 8.328125q2.203125 5.093750 3.000000 10.937500q0.812500 5.828125 0.812500 12.218750q0.000000 8.593750 -1.593750 16.093750q-1.578125 7.500000 -6.218750 12.750000q-4.640625 5.250000 -13.187500 5.250000M25.000000 -0.390625q5.562500 0.000000 8.296875 -5.703125q2.734375 -5.718750 3.375000 -12.656250q0.640625 -6.937500 0.640625 -14.750000q0.000000 -7.515625 -0.640625 -13.859375q-0.640625 -6.359375 -3.359375 -11.500000q-2.703125 -5.156250 -8.312500 -5.156250q-5.656250 0.000000 -8.390625 5.187500q-2.734375 5.171875 -3.375000 11.500000q-0.640625 6.312500 -0.640625 13.828125q0.000000 5.562500 0.265625 10.500000q0.281250 4.937500 1.453125 10.187500q1.171875 5.250000 3.781250 8.843750q2.609375 3.578125 6.906250 3.578125"/>
-</defs>
 <g id="mathtext1">
-<g style="fill: #000000" transform="translate(62.000000,386.025282)">
-<use xlink:href="#c_f47f2818876b2f1a61c47f270461e46e" transform="translate(0.000000,-1.000000)scale(0.120000)"/>
+<g style="fill: #000000" transform="translate(60.000000,386.525282)">
+<use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" transform="translate(0.000000,-1.093750)scale(0.120000)"/>
 </g>
 </g>
 </g>
Modified: branches/v1_0_maint/lib/matplotlib/ticker.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/ticker.py	2010年10月19日 12:44:14 UTC (rev 8755)
+++ branches/v1_0_maint/lib/matplotlib/ticker.py	2010年10月19日 14:16:23 UTC (rev 8756)
@@ -608,7 +608,7 @@
 sign = np.sign(x)
 # only label the decades
 fx = math.log(abs(x))/math.log(b)
- isDecade = is_decade(fx)
+ isDecade = is_close_to_int(fx)
 if not isDecade and self.labelOnlyBase: s = ''
 #if 0: pass
 elif fx>10000: s= '%1.0e'%fx
@@ -630,15 +630,18 @@
 def __call__(self, x, pos=None):
 'Return the format for tick val *x* at position *pos*'
 b = self._base
+ usetex = rcParams['text.usetex']
+
 # only label the decades
 if x == 0:
- return '0ドル$'
+ if usetex:
+ return '0ドル$'
+ else:
+ return '$\mathdefault{0}$'
 sign = np.sign(x)
 fx = math.log(abs(x))/math.log(b)
- isDecade = is_decade(fx)
+ isDecade = is_close_to_int(fx)
 
- usetex = rcParams['text.usetex']
-
 if sign == -1:
 sign_string = '-'
 else:
@@ -1187,13 +1190,18 @@
 else: return long(x-0.5)
 
 def is_decade(x, base=10):
-y if not np.isfinite(x):
+ if not np.isfinite(x):
 return False
 if x == 0.0:
 return True
 lx = math.log(x)/math.log(base)
- return abs(lx - nearest_long(lx)) < 1e-10
+ return is_close_to_int(lx)
 
+def is_close_to_int(x):
+ if not np.isfinite(x):
+ return False
+ return abs(x - nearest_long(x)) < 1e-10
+
 class LogLocator(Locator):
 """
 Determine the tick locations for log axes
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2011年01月16日 01:00:43
Revision: 8920
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8920&view=rev
Author: efiring
Date: 2011年01月16日 01:00:37 +0000 (2011年1月16日)
Log Message:
-----------
Change pcolor and contourf default antialiasing to False; closes 3151847.
To avoid misplaced boundaries and artifacts with alpha < 1, we do not
stroke the pcolor and contourf patch boundaries by default; but without
that stroking, antialiasing produces boundary artifacts that tend to
be visually disturbing. Therefore we sacrifice antialiasing for these
patches.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/axes.py
 branches/v1_0_maint/lib/matplotlib/contour.py
Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py	2011年01月15日 19:49:09 UTC (rev 8919)
+++ branches/v1_0_maint/lib/matplotlib/axes.py	2011年01月16日 01:00:37 UTC (rev 8920)
@@ -6921,14 +6921,14 @@
 
 %(PolyCollection)s
 
- Note: the default *antialiaseds* is taken from
+ Note: the default *antialiaseds* is False if the default
+ *edgecolors*="none" is used. This eliminates artificial lines
+ at patch boundaries, and works regardless of the value of
+ alpha. If *edgecolors* is not "none", then the default
+ *antialiaseds* is taken from
 rcParams['patch.antialiased'], which defaults to *True*.
- In some cases, particularly if *alpha* is 1,
- you may be able to reduce rendering artifacts (light or
- dark patch boundaries) by setting it to *False*. An
- alternative it to set *edgecolors* to 'face'. Unfortunately,
- there seems to be no single combination of parameters that
- eliminates artifacts under all conditions.
+ Stroking the edges may be preferred if *alpha* is 1, but
+ will cause artifacts otherwise.
 
 """
 
@@ -6977,22 +6977,29 @@
 
 C = compress(ravelmask, ma.filled(C[0:Ny-1,0:Nx-1]).ravel())
 
+ linewidths = (0.25,)
+ if 'linewidth' in kwargs:
+ kwargs['linewidths'] = kwargs.pop('linewidth')
+ kwargs.setdefault('linewidths', linewidths)
+
 if shading == 'faceted':
 edgecolors = 'k',
 else:
 edgecolors = 'none'
- linewidths = (0.25,)
- # Not sure if we want to have the following, or just trap
- # invalid kwargs and raise an exception.
 if 'edgecolor' in kwargs:
 kwargs['edgecolors'] = kwargs.pop('edgecolor')
- if 'linewidth' in kwargs:
- kwargs['linewidths'] = kwargs.pop('linewidth')
+ ec = kwargs.setdefault('edgecolors', edgecolors)
+
+ # aa setting will default via collections to patch.antialiased
+ # unless the boundary is not stroked, in which case the
+ # default will be False; with unstroked boundaries, aa
+ # makes artifacts that are often disturbing.
 if 'antialiased' in kwargs:
 kwargs['antialiaseds'] = kwargs.pop('antialiased')
- kwargs.setdefault('edgecolors', edgecolors)
- kwargs.setdefault('linewidths', linewidths)
+ if 'antialiaseds' not in kwargs and ec.lower() == "none":
+ kwargs['antialiaseds'] = False
 
+
 collection = mcoll.PolyCollection(verts, **kwargs)
 
 collection.set_alpha(alpha)
Modified: branches/v1_0_maint/lib/matplotlib/contour.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/contour.py	2011年01月15日 19:49:09 UTC (rev 8919)
+++ branches/v1_0_maint/lib/matplotlib/contour.py	2011年01月16日 01:00:37 UTC (rev 8920)
@@ -662,7 +662,14 @@
 self.colors = kwargs.get('colors', None)
 norm = kwargs.get('norm', None)
 self.extend = kwargs.get('extend', 'neither')
- self.antialiased = kwargs.get('antialiased', True)
+ self.antialiased = kwargs.get('antialiased', None)
+ if self.antialiased is None and self.filled:
+ self.antialiased = False # eliminate artifacts; we are not
+ # stroking the boundaries.
+ # The default for line contours will be taken from
+ # the LineCollection default, which uses the
+ # rcParams['lines.antialiased']
+
 self.nchunk = kwargs.get('nchunk', 0)
 self.locator = kwargs.get('locator', None)
 if (isinstance(norm, colors.LogNorm)
@@ -734,11 +741,15 @@
 tlinewidths = self._process_linewidths()
 self.tlinewidths = tlinewidths
 tlinestyles = self._process_linestyles()
+ aa = self.antialiased
+ if aa is not None:
+ aa = (self.antialiased,)
 for level, width, lstyle, segs in \
 zip(self.levels, tlinewidths, tlinestyles, self.allsegs):
 # Default zorder taken from LineCollection
 zorder = kwargs.get('zorder', 2)
 col = collections.LineCollection(segs,
+ antialiaseds = aa,
 linewidths = width,
 linestyle = lstyle,
 alpha=self.alpha,
@@ -1358,6 +1369,10 @@
 Override axis units by specifying an instance of a
 :class:`matplotlib.units.ConversionInterface`.
 
+ *antialiased*: [ True | False ]
+ enable antialiasing, overriding the defaults. For
+ filled contours, the default is True. For line contours,
+ it is taken from rcParams['lines.antialiased'].
 
 contour-only keyword arguments:
 
@@ -1385,9 +1400,6 @@
 
 contourf-only keyword arguments:
 
- *antialiased*: [ True | False ]
- enable antialiasing
-
 *nchunk*: [ 0 | integer ]
 If 0, no subdivision of the domain. Specify a positive integer to
 divide the domain into subdomains of roughly *nchunk* by *nchunk*
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /