SourceForge logo
SourceForge logo
Menu

matplotlib-checkins

From: <wea...@us...> - 2010年07月14日 02:42:26
Revision: 8543
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8543&view=rev
Author: weathergod
Date: 2010年07月14日 02:42:19 +0000 (2010年7月14日)
Log Message:
-----------
Added documentation and examples for new, easier Axes3D use.
Modified Paths:
--------------
 branches/v1_0_maint/doc/mpl_toolkits/mplot3d/tutorial.rst
 branches/v1_0_maint/examples/mplot3d/2dcollections3d_demo.py
 branches/v1_0_maint/examples/mplot3d/bars3d_demo.py
 branches/v1_0_maint/examples/mplot3d/contour3d_demo.py
 branches/v1_0_maint/examples/mplot3d/contour3d_demo2.py
 branches/v1_0_maint/examples/mplot3d/contour3d_demo3.py
 branches/v1_0_maint/examples/mplot3d/contourf3d_demo.py
 branches/v1_0_maint/examples/mplot3d/hist3d_demo.py
 branches/v1_0_maint/examples/mplot3d/lines3d_demo.py
 branches/v1_0_maint/examples/mplot3d/pathpatch3d_demo.py
 branches/v1_0_maint/examples/mplot3d/polys3d_demo.py
 branches/v1_0_maint/examples/mplot3d/rotate_axes3d_demo.py
 branches/v1_0_maint/examples/mplot3d/scatter3d_demo.py
 branches/v1_0_maint/examples/mplot3d/subplot3d_demo.py
 branches/v1_0_maint/examples/mplot3d/surface3d_demo.py
 branches/v1_0_maint/examples/mplot3d/surface3d_demo2.py
 branches/v1_0_maint/examples/mplot3d/surface3d_demo3.py
 branches/v1_0_maint/examples/mplot3d/surface3d_radial_demo.py
 branches/v1_0_maint/examples/mplot3d/text3d_demo.py
 branches/v1_0_maint/examples/mplot3d/wire3d_animation_demo.py
 branches/v1_0_maint/examples/mplot3d/wire3d_demo.py
Added Paths:
-----------
 branches/v1_0_maint/examples/mplot3d/mixed_subplots_demo.py
Modified: branches/v1_0_maint/doc/mpl_toolkits/mplot3d/tutorial.rst
===================================================================
--- branches/v1_0_maint/doc/mpl_toolkits/mplot3d/tutorial.rst	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/doc/mpl_toolkits/mplot3d/tutorial.rst	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -7,13 +7,15 @@
 
 Getting started
 ===============
-Create a new :class:`matplotlib.figure.Figure` and an
-:class:`~mpl_toolkits.mplot3d.Axes3D` object in it::
+An Axes3D object is created just like any other axes using
+the projection='3d' keyword.
+Create a new :class:`matplotlib.figure.Figure` and
+add a new axes to it of type :class:`~mpl_toolkits.mplot3d.Axes3D`::
 
- import pylab
- fig = pylab.figure()
+ import matplotlib.pyplot as plt
 from mpl_toolkits.mplot3d import Axes3D
- ax = Axes3D(fig)
+ fig = pyplt.figure()
+ ax = fig.add_subplot(111, projection='3d')
 
 Line plots
 ====================
@@ -39,6 +41,7 @@
 
 .. plot:: mpl_examples/mplot3d/surface3d_demo.py
 .. plot:: mpl_examples/mplot3d/surface3d_demo2.py
+.. plot:: mpl_examples/mplot3d/surface3d_demo3.py
 
 Contour plots
 =============
@@ -46,6 +49,7 @@
 
 .. plot:: mpl_examples/mplot3d/contour3d_demo.py
 .. plot:: mpl_examples/mplot3d/contour3d_demo2.py
+.. plot:: mpl_examples/mplot3d/contour3d_demo3.py
 
 Filled contour plots
 ====================
@@ -75,3 +79,11 @@
 
 .. plot:: mpl_examples/mplot3d/text3d_demo.py
 
+Subplotting
+====================
+Having multiple 3D plots in a single figure is the same
+as it is for 2D plots. And you can mix 2D and 3D plots
+into the same figure.
+
+.. plot:: mpl_examples/mplot3d/subplot3d_demo.py
+.. plot:: mpl_examples/mplot3d/mixed_subplots_demo.py
Modified: branches/v1_0_maint/examples/mplot3d/2dcollections3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/2dcollections3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/2dcollections3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -3,7 +3,7 @@
 import matplotlib.pyplot as plt
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.gca(projection='3d')
 
 x = np.linspace(0, 1, 100)
 y = np.sin(x * 2 * np.pi) / 2 + 0.5
Modified: branches/v1_0_maint/examples/mplot3d/bars3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/bars3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/bars3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -3,7 +3,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 for c, z in zip(['r', 'g', 'b', 'y'], [30, 20, 10, 0]):
 xs = np.arange(20)
 ys = np.random.rand(20)
Modified: branches/v1_0_maint/examples/mplot3d/contour3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/contour3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/contour3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -2,7 +2,7 @@
 import matplotlib.pyplot as plt
 
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 X, Y, Z = axes3d.get_test_data(0.05)
 cset = ax.contour(X, Y, Z)
 ax.clabel(cset, fontsize=9, inline=1)
Modified: branches/v1_0_maint/examples/mplot3d/contour3d_demo2.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/contour3d_demo2.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/contour3d_demo2.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -2,7 +2,7 @@
 import matplotlib.pyplot as plt
 
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.gca(projection='3d')
 X, Y, Z = axes3d.get_test_data(0.05)
 cset = ax.contour(X, Y, Z, 16, extend3d=True)
 ax.clabel(cset, fontsize=9, inline=1)
Modified: branches/v1_0_maint/examples/mplot3d/contour3d_demo3.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/contour3d_demo3.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/contour3d_demo3.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -2,7 +2,7 @@
 import matplotlib.pyplot as plt
 
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.gca(projection='3d')
 X, Y, Z = axes3d.get_test_data(0.05)
 ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
 cset = ax.contour(X, Y, Z, zdir='z', offset=-100)
Modified: branches/v1_0_maint/examples/mplot3d/contourf3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/contourf3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/contourf3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -2,7 +2,7 @@
 import matplotlib.pyplot as plt
 
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.gca(projection='3d')
 X, Y, Z = axes3d.get_test_data(0.05)
 cset = ax.contourf(X, Y, Z)
 ax.clabel(cset, fontsize=9, inline=1)
Modified: branches/v1_0_maint/examples/mplot3d/hist3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/hist3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/hist3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -3,7 +3,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 x, y = np.random.rand(2, 100) * 4
 hist, xedges, yedges = np.histogram2d(x, y, bins=4)
 
Modified: branches/v1_0_maint/examples/mplot3d/lines3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/lines3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/lines3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -6,7 +6,7 @@
 mpl.rcParams['legend.fontsize'] = 10
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.gca(projection='3d')
 theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
 z = np.linspace(-2, 2, 100)
 r = z**2 + 1
Added: branches/v1_0_maint/examples/mplot3d/mixed_subplots_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/mixed_subplots_demo.py	 (rev 0)
+++ branches/v1_0_maint/examples/mplot3d/mixed_subplots_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -0,0 +1,48 @@
+"""
+Demonstrate the mixing of 2d and 3d subplots
+"""
+from mpl_toolkits.mplot3d import Axes3D
+import matplotlib.pyplot as plt
+import numpy as np
+
+def f(t):
+ s1 = np.cos(2*np.pi*t)
+ e1 = np.exp(-t)
+ return np.multiply(s1,e1)
+
+
+################
+# First subplot
+################
+t1 = np.arange(0.0, 5.0, 0.1)
+t2 = np.arange(0.0, 5.0, 0.02)
+t3 = np.arange(0.0, 2.0, 0.01)
+
+fig = plt.figure()
+fig.suptitle('A tale of 2 subplots')
+ax = fig.add_subplot(2, 1, 1)
+l = ax.plot(t1, f(t1), 'bo', 
+ t2, f(t2), 'k--', markerfacecolor='green')
+ax.grid(True)
+ax.set_ylabel('Damped oscillation')
+
+
+#################
+# Second subplot
+#################
+ax = fig.add_subplot(2, 1, 2, projection='3d')
+X = np.arange(-5, 5, 0.25)
+xlen = len(X)
+Y = np.arange(-5, 5, 0.25)
+ylen = len(Y)
+X, Y = np.meshgrid(X, Y)
+R = np.sqrt(X**2 + Y**2)
+Z = np.sin(R)
+
+surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
+ linewidth=0, antialiased=False)
+
+ax.set_zlim3d(-1, 1)
+
+plt.show()
+
Modified: branches/v1_0_maint/examples/mplot3d/pathpatch3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/pathpatch3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/pathpatch3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -25,7 +25,7 @@
 
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 
 p = Circle((5, 5), 3)
 ax.add_patch(p)
Modified: branches/v1_0_maint/examples/mplot3d/polys3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/polys3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/polys3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -5,7 +5,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.gca(projection='3d')
 
 cc = lambda arg: colorConverter.to_rgba(arg, alpha=0.6)
 
Modified: branches/v1_0_maint/examples/mplot3d/rotate_axes3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/rotate_axes3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/rotate_axes3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -5,7 +5,7 @@
 plt.ion()
 
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 X, Y, Z = axes3d.get_test_data(0.1)
 ax.plot_wireframe(X, Y, Z, rstride=5, cstride=5)
 
Modified: branches/v1_0_maint/examples/mplot3d/scatter3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/scatter3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/scatter3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -6,7 +6,7 @@
 return (vmax-vmin)*np.random.rand(n) + vmin
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 n = 100
 for c, m, zl, zh in [('r', 'o', -50, -25), ('b', '^', -30, -5)]:
 xs = randrange(n, 23, 32)
Modified: branches/v1_0_maint/examples/mplot3d/subplot3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/subplot3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/subplot3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -1,11 +1,16 @@
 from mpl_toolkits.mplot3d.axes3d import Axes3D
-from matplotlib import cm
-#from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
 import matplotlib.pyplot as plt
+
+
+# imports specific to the plots in this example
 import numpy as np
+from matplotlib import cm
+from mpl_toolkits.mplot3d.axes3d import get_test_data
 
-fig = plt.figure()
 
+fig = plt.figure(figsize=(9.5,5.0))
+
+#---- First subplot
 ax = fig.add_subplot(1, 2, 1, projection='3d')
 X = np.arange(-5, 5, 0.25)
 Y = np.arange(-5, 5, 0.25)
@@ -16,12 +21,9 @@
 linewidth=0, antialiased=False)
 ax.set_zlim3d(-1.01, 1.01)
 
-#ax.w_zaxis.set_major_locator(LinearLocator(10))
-#ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
+fig.colorbar(surf, shrink=0.5, aspect=10)
 
-fig.colorbar(surf, shrink=0.5, aspect=5)
-
-from mpl_toolkits.mplot3d.axes3d import get_test_data
+#---- Second subplot
 ax = fig.add_subplot(1, 2, 2, projection='3d')
 X, Y, Z = get_test_data(0.05)
 ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
Modified: branches/v1_0_maint/examples/mplot3d/surface3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/surface3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/surface3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -5,7 +5,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.gca(projection='3d')
 X = np.arange(-5, 5, 0.25)
 Y = np.arange(-5, 5, 0.25)
 X, Y = np.meshgrid(X, Y)
Modified: branches/v1_0_maint/examples/mplot3d/surface3d_demo2.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/surface3d_demo2.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/surface3d_demo2.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -3,7 +3,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 
 u = np.linspace(0, 2 * np.pi, 100)
 v = np.linspace(0, np.pi, 100)
Modified: branches/v1_0_maint/examples/mplot3d/surface3d_demo3.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/surface3d_demo3.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/surface3d_demo3.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -5,7 +5,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.gca(projection='3d')
 X = np.arange(-5, 5, 0.25)
 xlen = len(X)
 Y = np.arange(-5, 5, 0.25)
Modified: branches/v1_0_maint/examples/mplot3d/surface3d_radial_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/surface3d_radial_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/surface3d_radial_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -8,7 +8,7 @@
 step = 0.04
 maxval = 1.0
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 
 # create supporting points in polar coordinates
 r = np.linspace(0,1.25,50)
Modified: branches/v1_0_maint/examples/mplot3d/text3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/text3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/text3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -2,7 +2,7 @@
 import matplotlib.pyplot as plt
 
 fig = plt.figure()
-ax = Axes3D(fig)
+ax = fig.gca(projection='3d')
 
 zdirs = (None, 'x', 'y', 'z', (1, 1, 0), (1, 1, 1))
 xs = (2, 6, 4, 9, 7, 2)
Modified: branches/v1_0_maint/examples/mplot3d/wire3d_animation_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/wire3d_animation_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/wire3d_animation_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -1,3 +1,6 @@
+"""
+A very simple 'animation' of a 3D plot
+"""
 from mpl_toolkits.mplot3d import axes3d
 import matplotlib.pyplot as plt
 import numpy as np
@@ -9,7 +12,7 @@
 
 plt.ion()
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 
 xs = np.linspace(-1, 1, 50)
 ys = np.linspace(-1, 1, 50)
Modified: branches/v1_0_maint/examples/mplot3d/wire3d_demo.py
===================================================================
--- branches/v1_0_maint/examples/mplot3d/wire3d_demo.py	2010年07月13日 16:48:20 UTC (rev 8542)
+++ branches/v1_0_maint/examples/mplot3d/wire3d_demo.py	2010年07月14日 02:42:19 UTC (rev 8543)
@@ -3,7 +3,7 @@
 import numpy as np
 
 fig = plt.figure()
-ax = axes3d.Axes3D(fig)
+ax = fig.add_subplot(111, projection='3d')
 X, Y, Z = axes3d.get_test_data(0.05)
 ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ian...@us...> - 2010年07月16日 13:46:20
Revision: 8559
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8559&view=rev
Author: ianthomas23
Date: 2010年07月16日 13:46:14 +0000 (2010年7月16日)
Log Message:
-----------
Added tri* functions to pyplot docs.
Modified Paths:
--------------
 branches/v1_0_maint/doc/_templates/index.html
 branches/v1_0_maint/doc/api/api_changes.rst
 branches/v1_0_maint/lib/matplotlib/pylab.py
 branches/v1_0_maint/lib/matplotlib/tri/tricontour.py
Modified: branches/v1_0_maint/doc/_templates/index.html
===================================================================
--- branches/v1_0_maint/doc/_templates/index.html	2010年07月15日 20:47:28 UTC (rev 8558)
+++ branches/v1_0_maint/doc/_templates/index.html	2010年07月16日 13:46:14 UTC (rev 8559)
@@ -994,7 +994,6 @@
 </td>
 
 </tr>
-
 <tr>
 <th align="left">
 <a href="api/pyplot_api.html#matplotlib.pyplot.title">title</a>
@@ -1008,6 +1007,50 @@
 </tr>
 <tr>
 <th align="left">
+ <a href="api/pyplot_api.html#matplotlib.pyplot.tricontour">tricontour</a>
+
+ </th>
+
+ <td align="left">
+ make a contour plot on a triangular grid
+ </td>
+
+ </tr>
+ <tr>
+ <th align="left">
+ <a href="api/pyplot_api.html#matplotlib.pyplot.tricontourf">tricontourf</a>
+
+ </th>
+
+ <td align="left">
+ make a filled contour plot on a triangular grid
+ </td>
+
+ </tr>
+ <tr>
+ <th align="left">
+ <a href="api/pyplot_api.html#matplotlib.pyplot.tripcolor">tripcolor</a>
+
+ </th>
+
+ <td align="left">
+ make a pseudocolor plot on a triangular grid
+ </td>
+
+ </tr>
+ <tr>
+ <th align="left">
+ <a href="api/pyplot_api.html#matplotlib.pyplot.triplot">triplot</a>
+
+ </th>
+
+ <td align="left">
+ plot a triangular grid
+ </td>
+
+ </tr>
+ <tr>
+ <th align="left">
 <a href="api/pyplot_api.html#matplotlib.pyplot.xcorr">xcorr</a>
 
 </th>
Modified: branches/v1_0_maint/doc/api/api_changes.rst
===================================================================
--- branches/v1_0_maint/doc/api/api_changes.rst	2010年07月15日 20:47:28 UTC (rev 8558)
+++ branches/v1_0_maint/doc/api/api_changes.rst	2010年07月16日 13:46:14 UTC (rev 8559)
@@ -117,6 +117,21 @@
 
 draw_image(self, gc, x, y, im)
 
+* There are four new Axes methods with corresponding pyplot
+ functions that deal with unstructured triangular grids:
+
+ + :meth:`matplotlib.axes.Axes.tricontour` draws contour lines
+ on a triangular grid.
+
+ + :meth:`matplotlib.axes.Axes.tricontourf` draws filled contours
+ on a triangular grid.
+
+ + :meth:`matplotlib.axes.Axes.tripcolor` draws a pseudocolor
+ plot on a triangular grid.
+
+ + :meth:`matplotlib.axes.Axes.triplot` draws a triangular grid
+ as lines and/or markers.
+
 Changes in 0.99
 ======================
 
Modified: branches/v1_0_maint/lib/matplotlib/pylab.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/pylab.py	2010年07月15日 20:47:28 UTC (rev 8558)
+++ branches/v1_0_maint/lib/matplotlib/pylab.py	2010年07月16日 13:46:14 UTC (rev 8559)
@@ -92,6 +92,10 @@
 tick_params - control the appearance of ticks and tick labels
 ticklabel_format - control the format of tick labels
 title - add a title to the current axes
+ tricontour - make a contour plot on a triangular grid
+ tricontourf - make a filled contour plot on a triangular grid
+ tripcolor - make a pseudocolor plot on a triangular grid
+ triplot - plot a triangular grid
 xcorr - plot the autocorrelation function of x and y
 xlim - set/get the xlimits
 ylim - set/get the ylimits
Modified: branches/v1_0_maint/lib/matplotlib/tri/tricontour.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tri/tricontour.py	2010年07月15日 20:47:28 UTC (rev 8558)
+++ branches/v1_0_maint/lib/matplotlib/tri/tricontour.py	2010年07月16日 13:46:14 UTC (rev 8559)
@@ -93,7 +93,8 @@
 tricontour_doc = """
 :func:`~matplotlib.pyplot.tricontour` and
 :func:`~matplotlib.pyplot.tricontourf` draw contour lines and
- filled contours, respectively. Except as noted, function
+ filled contours, respectively, on an unstructured triangular
+ grid. Except as noted, function
 signatures and return values are the same for both versions.
 
 The triangulation can be specified in one of two ways; either::
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ds...@us...> - 2010年07月20日 14:01:02
Revision: 8566
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8566&view=rev
Author: dsdale
Date: 2010年07月20日 14:00:55 +0000 (2010年7月20日)
Log Message:
-----------
Return Qt4's default cursor when leaving the canvas
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年07月17日 07:08:43 UTC (rev 8565)
+++ branches/v1_0_maint/CHANGELOG	2010年07月20日 14:00:55 UTC (rev 8566)
@@ -1,3 +1,5 @@
+2010年07月20日 Return Qt4's default cursor when leaving the canvas - DSD
+
 2010年07月06日 Tagging for mpl 1.0 at r8502
 
 
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py	2010年07月17日 07:08:43 UTC (rev 8565)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_qt4.py	2010年07月20日 14:00:55 UTC (rev 8566)
@@ -150,6 +150,7 @@
 FigureCanvasBase.enter_notify_event(self, event)
 
 def leaveEvent(self, event):
+ QtGui.QApplication.restoreOverrideCursor()
 FigureCanvasBase.leave_notify_event(self, event)
 
 def mousePressEvent( self, event ):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年07月27日 17:26:57
Revision: 8583
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8583&view=rev
Author: mdboom
Date: 2010年07月27日 17:26:50 +0000 (2010年7月27日)
Log Message:
-----------
[3034778] line width arguments don't work in pcolormesh
Also, support clipping paths on images in SVG backend.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/backend_bases.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py
 branches/v1_0_maint/lib/matplotlib/collections.py
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/imshow.svg
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/imshow_clip.svg
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_interps.svg
 branches/v1_0_maint/lib/matplotlib/tests/test_axes.py
 branches/v1_0_maint/lib/matplotlib/tests/test_image.py
 branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py
 branches/v1_0_maint/src/_backend_agg.cpp
Added Paths:
-----------
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/pcolormesh.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/pcolormesh.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/pcolormesh.svg
Modified: branches/v1_0_maint/lib/matplotlib/backend_bases.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backend_bases.py	2010年07月27日 16:01:47 UTC (rev 8582)
+++ branches/v1_0_maint/lib/matplotlib/backend_bases.py	2010年07月27日 17:26:50 UTC (rev 8583)
@@ -208,10 +208,10 @@
 
 if showedges:
 edgecolors = np.array([[0.0, 0.0, 0.0, 1.0]], np.float_)
- linewidths = np.array([1.0], np.float_)
+ linewidths = np.array([gc.get_linewidth()], np.float_)
 else:
 edgecolors = facecolors
- linewidths = np.array([0.0], np.float_)
+ linewidths = np.array([gc.get_linewidth()], np.float_)
 
 return self.draw_path_collection(
 gc, master_transform, paths, [], offsets, offsetTrans, facecolors,
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py	2010年07月27日 16:01:47 UTC (rev 8582)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py	2010年07月27日 17:26:50 UTC (rev 8583)
@@ -389,7 +389,12 @@
 write('</g>\n')
 
 def draw_image(self, gc, x, y, im):
- # MGDTODO: Support clippath here
+ clipid = self._get_gc_clip_svg(gc)
+ if clipid is None:
+ clippath = ''
+ else:
+ clippath = 'clip-path="url(#%s)"' % clipid
+
 trans = [1,0,0,1,0,0]
 transstr = ''
 if rcParams['svg.image_noscale']:
@@ -410,7 +415,9 @@
 self._svgwriter.write('<a xlink:href="%s">' % url)
 self._svgwriter.write (
 '<image x="%f" y="%f" width="%f" height="%f" '
- '%s xlink:href="'%(x/trans[0], (self.height-y)/trans[3]-h, w, h, transstr)
+ '%s %s xlink:href="' % (
+ x/trans[0], (self.height-y)/trans[3]-h, w, h,
+ transstr, clippath)
 )
 
 if rcParams['svg.image_inline']:
Modified: branches/v1_0_maint/lib/matplotlib/collections.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/collections.py	2010年07月27日 16:01:47 UTC (rev 8582)
+++ branches/v1_0_maint/lib/matplotlib/collections.py	2010年07月27日 17:26:50 UTC (rev 8583)
@@ -1228,6 +1228,7 @@
 
 gc = renderer.new_gc()
 self._set_gc_clip(gc)
+ gc.set_linewidth(self.get_linewidth()[0])
 
 if self._shading == 'gouraud':
 triangles, colors = self.convert_mesh_to_triangles(
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/imshow.svg
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/imshow.svg	2010年07月27日 16:01:47 UTC (rev 8582)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_axes/imshow.svg	2010年07月27日 17:26:50 UTC (rev 8583)
@@ -18,994 +18,1000 @@
 <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>
-<image x="122.400000" y="41.800000" width="347.000000" height="347.000000" xlink:href="data:image/png;base64,
+<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,
 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
-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...
 
[truncated message content]
From: <md...@us...> - 2010年07月28日 18:33:17
Revision: 8585
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8585&view=rev
Author: mdboom
Date: 2010年07月28日 18:33:11 +0000 (2010年7月28日)
Log Message:
-----------
Fix problems displaying images with zero (logical) width.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/image.py
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.svg
 branches/v1_0_maint/src/_image.cpp
Modified: branches/v1_0_maint/lib/matplotlib/image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/image.py	2010年07月27日 17:28:58 UTC (rev 8584)
+++ branches/v1_0_maint/lib/matplotlib/image.py	2010年07月28日 18:33:11 UTC (rev 8585)
@@ -147,8 +147,14 @@
 dyintv = ymax-ymin
 
 # the viewport scale factor
- sx = dxintv/viewlim.width
- sy = dyintv/viewlim.height
+ if viewlim.width == 0.0 and dxintv == 0.0:
+ sx = 1.0
+ else:
+ sx = dxintv/viewlim.width
+ if viewlim.height == 0.0 and dyintv == 0.0:
+ sy = 1.0
+ else:
+ sy = dyintv/viewlim.height
 numrows, numcols = A.shape[:2]
 if sx > 2:
 x0 = (viewlim.x0-xmin)/dxintv * numcols
@@ -576,9 +582,17 @@
 im.set_resample(self._resample)
 
 # the viewport translation
- tx = (xmin-transformed_viewLim.x0)/dxintv * numcols
- ty = (ymin-transformed_viewLim.y0)/dyintv * numrows
+ if dxintv == 0.0:
+ tx = 0.0
+ else:
+ tx = (xmin-transformed_viewLim.x0)/dxintv * numcols
+ if dyintv == 0.0:
+ ty = 0.0
+ else:
+ ty = (ymin-transformed_viewLim.y0)/dyintv * numrows
 
+ im.apply_translation(tx, ty)
+
 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)
@@ -586,7 +600,7 @@
 
 # resize viewport to display
 rx = widthDisplay / numcols
- ry = heightDisplay / numrows
+ ry = heightDisplay / numrows
 im.apply_scaling(rx*sx, ry*sy)
 im.resize(int(widthDisplay+0.5), int(heightDisplay+0.5),
 norm=self._filternorm, radius=self._filterrad)
Modified: 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	2010年07月27日 17:28:58 UTC (rev 8584)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_image/image_clip.svg	2010年07月28日 18:33:11 UTC (rev 8585)
@@ -25,7 +25,19 @@
 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,
+<defs>
+ <clipPath id="p904278a4c1c81ab8b13ccb57b319fa38">
+<path 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"/>
+ </clipPath>
+</defs><image x="122.400000" y="41.800000" width="347.000000" height="347.000000" clip-path="url(#p904278a4c1c81ab8b13ccb57b319fa38)" xlink:href="data:image/png;base64,
 iVBORw0KGgoAAAANSUhEUgAAAVsAAAFbCAYAAAB7zy3tAAAABHNCSVQICAgIfAhkiAAAIABJREFU
 eJztfeGS4zzLLNp67vvc+XJ+WECDkJ2ZjTJvfdNdtRtbQggpcbuNZc8Q+X8qxPsxhsiwzyHy54v7
 Q64ygbq6/6++v9LXru+dr+/sC2z/edh/1fd35uex73+Y++98z9/9HXz1u5DLLXEGf346AIIgiN8A
@@ -608,7 +620,7 @@
 </g>
 <g id="ytick8">
 <g id="text19">
-<g style="fill: #000000; opacity: 1.000000" transform="translate(118.332060,125.327188)scale(0.120000)">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(118.332060,125.327187)scale(0.120000)">
 <use xlink:href="#c_3dcfa38a02242cb63ec6726c6e70be7a"/>
 <use xlink:href="#c_7a2040fe3b94fcd41d0a72c84e93b115" x="63.623047"/>
 <use xlink:href="#c_40880da00a2fb346f185ce8104650367" x="127.246094"/>
Modified: branches/v1_0_maint/src/_image.cpp
===================================================================
--- branches/v1_0_maint/src/_image.cpp	2010年07月27日 17:28:58 UTC (rev 8584)
+++ branches/v1_0_maint/src/_image.cpp	2010年07月28日 18:33:11 UTC (rev 8585)
@@ -392,7 +392,6 @@
 
 // the image path
 agg::path_storage path;
- agg::int8u *bufferPad = NULL;
 agg::rendering_buffer rbufPad;
 
 double x0, y0, x1, y1;
@@ -541,9 +540,7 @@
 
 }
 
- delete [] bufferPad;
 return Py::Object();
-
 }
 
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年08月14日 21:22:04
Revision: 8628
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8628&view=rev
Author: efiring
Date: 2010年08月14日 21:21:58 +0000 (2010年8月14日)
Log Message:
-----------
fix bugs: patch alpha handling, bar color kwarg interpretation
This changeset is somewhat intrusive, with side-effects of moving
most patch color handling out of the draw method, and of changing
rgb2hex to allow rgba. This simplifies backend_svg slightly.
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/lib/matplotlib/axes.py
 branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py
 branches/v1_0_maint/lib/matplotlib/colors.py
 branches/v1_0_maint/lib/matplotlib/patches.py
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年08月13日 18:23:33 UTC (rev 8627)
+++ branches/v1_0_maint/CHANGELOG	2010年08月14日 21:21:58 UTC (rev 8628)
@@ -1,3 +1,5 @@
+2010年08月14日 Fix bug in patch alpha handling, and in bar color kwarg - EF
+
 2010年07月20日 Return Qt4's default cursor when leaving the canvas - DSD
 
 2010年07月06日 Tagging for mpl 1.0 at r8502
Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py	2010年08月13日 18:23:33 UTC (rev 8627)
+++ branches/v1_0_maint/lib/matplotlib/axes.py	2010年08月14日 21:21:58 UTC (rev 8628)
@@ -4579,6 +4579,8 @@
 color = [None] * nbars
 else:
 color = list(mcolors.colorConverter.to_rgba_array(color))
+ if len(color) == 0: # until to_rgba_array is changed
+ color = [[0,0,0,0]]
 if len(color) < nbars:
 color *= nbars
 
@@ -4586,6 +4588,8 @@
 edgecolor = [None] * nbars
 else:
 edgecolor = list(mcolors.colorConverter.to_rgba_array(edgecolor))
+ if len(edgecolor) == 0: # until to_rgba_array is changed
+ edgecolor = [[0,0,0,0]]
 if len(edgecolor) < nbars:
 edgecolor *= nbars
 
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py	2010年08月13日 18:23:33 UTC (rev 8627)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_svg.py	2010年08月14日 21:21:58 UTC (rev 8628)
@@ -118,7 +118,7 @@
 '<rect x="0" y="0" width="%d" height="%d" fill="%s"/>' %
 (HATCH_SIZE+1, HATCH_SIZE+1, fill))
 path = '<path d="%s" fill="%s" stroke="%s" stroke-width="1.0"/>' % (
- path_data, rgb2hex(gc.get_rgb()[:3]), rgb2hex(gc.get_rgb()[:3]))
+ path_data, rgb2hex(gc.get_rgb()), rgb2hex(gc.get_rgb()))
 self._svgwriter.write(path)
 self._svgwriter.write('\n </pattern>\n</defs>')
 self._hatchd[dictkey] = id
@@ -135,7 +135,7 @@
 if rgbFace is None:
 fill = 'none'
 else:
- fill = rgb2hex(rgbFace[:3])
+ fill = rgb2hex(rgbFace)
 
 offset, seq = gc.get_dashes()
 if seq is None:
@@ -149,7 +149,7 @@
 return 'fill: %s; stroke: %s; stroke-width: %f; ' \
 'stroke-linejoin: %s; stroke-linecap: %s; %s opacity: %f' % (
 fill,
- rgb2hex(gc.get_rgb()[:3]),
+ rgb2hex(gc.get_rgb()),
 linewidth,
 gc.get_joinstyle(),
 _capstyle_d[gc.get_capstyle()],
@@ -469,7 +469,7 @@
 glyph_map=self._glyph_map
 
 text2path = self._text2path
- color = rgb2hex(gc.get_rgb()[:3])
+ color = rgb2hex(gc.get_rgb())
 fontsize = prop.get_size_in_points()
 
 write = self._svgwriter.write
@@ -592,7 +592,7 @@
 y -= font.get_descent() / 64.0
 
 fontsize = prop.get_size_in_points()
- color = rgb2hex(gc.get_rgb()[:3])
+ color = rgb2hex(gc.get_rgb())
 write = self._svgwriter.write
 
 if rcParams['svg.embed_char_paths']:
@@ -730,7 +730,7 @@
 self.mathtext_parser.parse(s, 72, prop)
 svg_glyphs = svg_elements.svg_glyphs
 svg_rects = svg_elements.svg_rects
- color = rgb2hex(gc.get_rgb()[:3])
+ color = rgb2hex(gc.get_rgb())
 write = self._svgwriter.write
 
 style = "fill: %s" % color
Modified: branches/v1_0_maint/lib/matplotlib/colors.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/colors.py	2010年08月13日 18:23:33 UTC (rev 8627)
+++ branches/v1_0_maint/lib/matplotlib/colors.py	2010年08月14日 21:21:58 UTC (rev 8628)
@@ -217,8 +217,8 @@
 
 
 def rgb2hex(rgb):
- 'Given a len 3 rgb tuple of 0-1 floats, return the hex string'
- return '#%02x%02x%02x' % tuple([round(val*255) for val in rgb])
+ 'Given an rgb or rgba sequence of 0-1 floats, return the hex string'
+ return '#%02x%02x%02x' % tuple([round(val*255) for val in rgb[:3]])
 
 hexColorPattern = re.compile("\A#[a-fA-F0-9]{6}\Z")
 
Modified: branches/v1_0_maint/lib/matplotlib/patches.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/patches.py	2010年08月13日 18:23:33 UTC (rev 8627)
+++ branches/v1_0_maint/lib/matplotlib/patches.py	2010年08月14日 21:21:58 UTC (rev 8628)
@@ -55,6 +55,7 @@
 def __init__(self,
 edgecolor=None,
 facecolor=None,
+ color=None,
 linewidth=None,
 linestyle=None,
 antialiased = None,
@@ -74,20 +75,22 @@
 if linestyle is None: linestyle = "solid"
 if antialiased is None: antialiased = mpl.rcParams['patch.antialiased']
 
- if 'color' in kwargs:
+ self._fill = True # needed for set_facecolor call
+ if color is not None:
 if (edgecolor is not None or
 facecolor is not None):
 import warnings
 warnings.warn("Setting the 'color' property will override"
 "the edgecolor or facecolor properties. ")
-
- self.set_edgecolor(edgecolor)
- self.set_facecolor(facecolor)
+ self.set_color(color)
+ else:
+ self.set_edgecolor(edgecolor)
+ self.set_facecolor(facecolor)
 self.set_linewidth(linewidth)
 self.set_linestyle(linestyle)
 self.set_antialiased(antialiased)
 self.set_hatch(hatch)
- self.fill = fill
+ self.set_fill(fill)
 self._combined_transform = transforms.IdentityTransform()
 
 self.set_path_effects(path_effects)
@@ -98,7 +101,7 @@
 """
 Return a copy of the vertices used in this patch
 
- If the patch contains Bézier curves, the curves will be
+ If the patch contains Bezier curves, the curves will be
 interpolated by line segments. To access the curves as
 curves, use :meth:`get_path`.
 """
@@ -223,7 +226,7 @@
 ACCEPTS: mpl color spec, or None for default, or 'none' for no color
 """
 if color is None: color = mpl.rcParams['patch.edgecolor']
- self._edgecolor = color
+ self._edgecolor = colors.colorConverter.to_rgba(color, self._alpha)
 
 def set_ec(self, color):
 """alias for set_edgecolor"""
@@ -236,7 +239,12 @@
 ACCEPTS: mpl color spec, or None for default, or 'none' for no color
 """
 if color is None: color = mpl.rcParams['patch.facecolor']
- self._facecolor = color
+ self._original_facecolor = color # save: otherwise changing _fill
+ # may lose alpha information
+ self._facecolor = colors.colorConverter.to_rgba(color, self._alpha)
+ if not self._fill:
+ self._facecolor = list(self._facecolor)
+ self._facecolor[3] = 0
 
 def set_fc(self, color):
 """alias for set_facecolor"""
@@ -256,7 +264,22 @@
 self.set_facecolor(c)
 self.set_edgecolor(c)
 
+ def set_alpha(self, alpha):
+ """
+ Set the alpha tranparency of the patch.
 
+ ACCEPTS: float or None
+ """
+ if alpha is not None:
+ try:
+ float(alpha)
+ except TypeError:
+ raise TypeError('alpha must be a float or None')
+ artist.Artist.set_alpha(self, alpha)
+ self.set_facecolor(self._original_facecolor) # using self._fill and self._alpha
+ self._edgecolor = colors.colorConverter.to_rgba(
+ self._edgecolor[:3], self._alpha)
+
 def set_linewidth(self, w):
 """
 Set the patch linewidth in points
@@ -289,11 +312,12 @@
 
 ACCEPTS: [True | False]
 """
- self.fill = b
+ self._fill = b
+ self.set_facecolor(self._original_facecolor)
 
 def get_fill(self):
 'return whether fill is set'
- return self.fill
+ return self._fill
 
 def set_hatch(self, hatch):
 """
@@ -345,29 +369,25 @@
 renderer.open_group('patch', self.get_gid())
 gc = renderer.new_gc()
 
- if cbook.is_string_like(self._edgecolor) and self._edgecolor.lower()=='none':
- gc.set_linewidth(0)
- else:
- gc.set_foreground(self._edgecolor)
- gc.set_linewidth(self._linewidth)
- gc.set_linestyle(self._linestyle)
+ gc.set_alpha(self._edgecolor[3])
+ gc.set_foreground(self._edgecolor, isRGB=True)
 
+ lw = self._linewidth
+ if self._edgecolor[3] == 0:
+ lw = 0
+ gc.set_linewidth(lw)
+ gc.set_linestyle(self._linestyle)
+
 gc.set_antialiased(self._antialiased)
 self._set_gc_clip(gc)
 gc.set_capstyle('projecting')
 gc.set_url(self._url)
 gc.set_snap(self.get_snap())
 
- if (not self.fill or self._facecolor is None or
- (cbook.is_string_like(self._facecolor) and self._facecolor.lower()=='none')):
- rgbFace = None
- gc.set_alpha(1.0)
- else:
- r, g, b, a = colors.colorConverter.to_rgba(self._facecolor, self._alpha)
- rgbFace = (r, g, b)
- gc.set_alpha(a)
+ rgbFace = self._facecolor
+ if rgbFace[3] == 0:
+ rgbFace = None # (some?) renderers expect this as no-fill signal
 
-
 if self._hatch:
 gc.set_hatch(self._hatch )
 
@@ -3823,7 +3843,7 @@
 )
 
 #if not fillable:
- # self.fill = False
+ # self._fill = False
 
 return _path, fillable
 
@@ -3831,32 +3851,28 @@
 
 def draw(self, renderer):
 if not self.get_visible(): return
- #renderer.open_group('patch')
+
+ renderer.open_group('patch', self.get_gid())
 gc = renderer.new_gc()
 
+ gc.set_alpha(self._edgecolor[3])
+ gc.set_foreground(self._edgecolor, isRGB=True)
 
- if cbook.is_string_like(self._edgecolor) and self._edgecolor.lower()=='none':
- gc.set_linewidth(0)
- else:
- gc.set_foreground(self._edgecolor)
- gc.set_linewidth(self._linewidth)
- gc.set_linestyle(self._linestyle)
+ lw = self._linewidth
+ if self._edgecolor[3] == 0:
+ lw = 0
+ gc.set_linewidth(lw)
+ gc.set_linestyle(self._linestyle)
 
 gc.set_antialiased(self._antialiased)
 self._set_gc_clip(gc)
 gc.set_capstyle('round')
 gc.set_snap(self.get_snap())
 
- if (not self.fill or self._facecolor is None or
- (cbook.is_string_like(self._facecolor) and self._facecolor.lower()=='none')):
- rgbFace = None
- gc.set_alpha(1.0)
- else:
- r, g, b, a = colors.colorConverter.to_rgba(self._facecolor, self._alpha)
- rgbFace = (r, g, b)
- gc.set_alpha(a)
+ rgbFace = self._facecolor
+ if rgbFace[3] == 0:
+ rgbFace = None # (some?) renderers expect this as no-fill signal
 
-
 if self._hatch:
 gc.set_hatch(self._hatch )
 
@@ -3870,7 +3886,6 @@
 
 affine = transforms.IdentityTransform()
 
- renderer.open_group('patch', self.get_gid())
 
 if self.get_path_effects():
 for path_effect in self.get_path_effects():
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年08月16日 15:06:22
Revision: 8634
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8634&view=rev
Author: mdboom
Date: 2010年08月16日 15:06:16 +0000 (2010年8月16日)
Log Message:
-----------
Handle NaN's correctly in path analysis routines. Fixes a bug where
the best location for a legend was not calculated correctly when the
line contains NaNs. - MGD
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/src/_path.cpp
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年08月16日 08:12:28 UTC (rev 8633)
+++ branches/v1_0_maint/CHANGELOG	2010年08月16日 15:06:16 UTC (rev 8634)
@@ -1,3 +1,7 @@
+2010年08月16日 Handle NaN's correctly in path analysis routines. Fixes a
+ bug where the best location for a legend was not calculated
+ correctly when the line contains NaNs. - MGD
+
 2010年08月14日 Fix bug in patch alpha handling, and in bar color kwarg - EF
 
 2010年07月20日 Return Qt4's default cursor when leaving the canvas - DSD
Modified: branches/v1_0_maint/src/_path.cpp
===================================================================
--- branches/v1_0_maint/src/_path.cpp	2010年08月16日 08:12:28 UTC (rev 8633)
+++ branches/v1_0_maint/src/_path.cpp	2010年08月16日 15:06:16 UTC (rev 8634)
@@ -224,7 +224,8 @@
 const agg::trans_affine& trans)
 {
 typedef agg::conv_transform<PathIterator> transformed_path_t;
- typedef agg::conv_curve<transformed_path_t> curve_t;
+ typedef PathNanRemover<transformed_path_t> no_nans_t;
+ typedef agg::conv_curve<no_nans_t> curve_t;
 
 if (path.total_vertices() < 3)
 {
@@ -232,7 +233,8 @@
 }
 
 transformed_path_t trans_path(path, trans);
- curve_t curved_path(trans_path);
+ no_nans_t no_nans_path(trans_path, true, path.has_curves());
+ curve_t curved_path(no_nans_path);
 return point_in_path_impl(x, y, curved_path);
 }
 
@@ -241,11 +243,13 @@
 const agg::trans_affine& trans)
 {
 typedef agg::conv_transform<PathIterator> transformed_path_t;
- typedef agg::conv_curve<transformed_path_t> curve_t;
+ typedef PathNanRemover<transformed_path_t> no_nans_t;
+ typedef agg::conv_curve<no_nans_t> curve_t;
 typedef agg::conv_stroke<curve_t> stroke_t;
 
 transformed_path_t trans_path(path, trans);
- curve_t curved_path(trans_path);
+ no_nans_t nan_removed_path(trans_path, true, path.has_curves());
+ curve_t curved_path(nan_removed_path);
 stroke_t stroked_path(curved_path);
 stroked_path.width(r * 2.0);
 return point_in_path_impl(x, y, stroked_path);
@@ -673,13 +677,15 @@
 PathIterator& b, const agg::trans_affine& btrans)
 {
 typedef agg::conv_transform<PathIterator> transformed_path_t;
- typedef agg::conv_curve<transformed_path_t> curve_t;
+ typedef PathNanRemover<transformed_path_t> no_nans_t;
+ typedef agg::conv_curve<no_nans_t> curve_t;
 
 if (a.total_vertices() < 3)
 return false;
 
 transformed_path_t b_path_trans(b, btrans);
- curve_t b_curved(b_path_trans);
+ no_nans_t b_no_nans(b_path_trans, true, b.has_curves());
+ curve_t b_curved(b_no_nans);
 
 double x, y;
 b_curved.rewind(0);
@@ -1169,16 +1175,20 @@
 bool
 path_intersects_path(PathIterator& p1, PathIterator& p2)
 {
- typedef agg::conv_curve<PathIterator> curve_t;
+ typedef PathNanRemover<PathIterator> no_nans_t;
+ typedef agg::conv_curve<no_nans_t> curve_t;
 
 if (p1.total_vertices() < 2 || p2.total_vertices() < 2)
 {
 return false;
 }
 
- curve_t c1(p1);
- curve_t c2(p2);
+ no_nans_t n1(p1, true, p1.has_curves());
+ no_nans_t n2(p2, true, p2.has_curves());
 
+ curve_t c1(n1);
+ curve_t c2(n2);
+
 double x11, y11, x12, y12;
 double x21, y21, x22, y22;
 
@@ -1211,6 +1221,7 @@
 PathIterator p1(args[0]);
 PathIterator p2(args[1]);
 bool filled = false;
+
 if (args.size() == 3)
 {
 filled = args[2].isTrue();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年08月21日 17:49:59
Revision: 8652
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8652&view=rev
Author: efiring
Date: 2010年08月21日 17:49:53 +0000 (2010年8月21日)
Log Message:
-----------
Axis.set_view_interval: when updating, respect original orientation
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/lib/matplotlib/axis.py
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年08月18日 17:36:51 UTC (rev 8651)
+++ branches/v1_0_maint/CHANGELOG	2010年08月21日 17:49:53 UTC (rev 8652)
@@ -1,3 +1,11 @@
+2010年08月21日 Change Axis.set_view_interval() so that when updating an
+ existing interval, it respects the orientation of that
+ interval, and can enlarge but not reduce the interval.
+ This fixes a bug in which Axis.set_ticks would
+ change the view limits of an inverted axis. Whether
+ set_ticks should be affecting the viewLim at all remains
+ an open question. - EF
+
 2010年08月16日 Handle NaN's correctly in path analysis routines. Fixes a
 bug where the best location for a legend was not calculated
 correctly when the line contains NaNs. - MGD
Modified: branches/v1_0_maint/lib/matplotlib/axis.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axis.py	2010年08月18日 17:36:51 UTC (rev 8651)
+++ branches/v1_0_maint/lib/matplotlib/axis.py	2010年08月21日 17:49:53 UTC (rev 8652)
@@ -1696,11 +1696,21 @@
 return self.axes.viewLim.intervalx
 
 def set_view_interval(self, vmin, vmax, ignore=False):
+ """
+ If *ignore* is *False*, the order of vmin, vmax
+ does not matter; the original axis orientation will
+ be preserved.
+ """
 if ignore:
 self.axes.viewLim.intervalx = vmin, vmax
 else:
 Vmin, Vmax = self.get_view_interval()
- self.axes.viewLim.intervalx = min(vmin, Vmin), max(vmax, Vmax)
+ if Vmin < Vmax:
+ self.axes.viewLim.intervalx = (min(vmin, vmax, Vmin),
+ max(vmin, vmax, Vmax))
+ else:
+ self.axes.viewLim.intervalx = (max(vmin, vmax, Vmin),
+ min(vmin, vmax, Vmax))
 
 def get_minpos(self):
 return self.axes.dataLim.minposx
@@ -1947,11 +1957,21 @@
 return self.axes.viewLim.intervaly
 
 def set_view_interval(self, vmin, vmax, ignore=False):
+ """
+ If *ignore* is *False*, the order of vmin, vmax
+ does not matter; the original axis orientation will
+ be preserved.
+ """
 if ignore:
 self.axes.viewLim.intervaly = vmin, vmax
 else:
 Vmin, Vmax = self.get_view_interval()
- self.axes.viewLim.intervaly = min(vmin, Vmin), max(vmax, Vmax)
+ if Vmin < Vmax:
+ self.axes.viewLim.intervaly = (min(vmin, vmax, Vmin),
+ max(vmin, vmax, Vmax))
+ else:
+ self.axes.viewLim.intervaly = (max(vmin, vmax, Vmin),
+ min(vmin, vmax, Vmax))
 
 def get_minpos(self):
 return self.axes.dataLim.minposy
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年09月08日 14:32:27
Revision: 8690
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8690&view=rev
Author: mdboom
Date: 2010年09月08日 14:32:17 +0000 (2010年9月08日)
Log Message:
-----------
[3058804] part of a line is not drawn
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py
 branches/v1_0_maint/src/path_converters.h
Added Paths:
-----------
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.svg
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.pdf
===================================================================
(Binary files differ)
Property changes on: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.pdf
___________________________________________________________________
Added: svn:mime-type
 + application/octet-stream
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.png
===================================================================
(Binary files differ)
Property changes on: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.png
___________________________________________________________________
Added: svn:mime-type
 + application/octet-stream
Added: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.svg
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.svg	 (rev 0)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/para_equal_perp.svg	2010年09月08日 14:32:17 UTC (rev 8690)
@@ -0,0 +1,296 @@
+<?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.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.200000z"/>
+</g>
+<g id="line2d1">
+<defs>
+ <clipPath id="p50431ccdcb28178602d99d9270004dde">
+<rect x="72.000000" y="43.200000" width="446.400000" height="345.600000"/>
+ </clipPath>
+</defs><path style="fill: none; stroke: #0000ff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p50431ccdcb28178602d99d9270004dde)" d="M220.800000 158.400000L369.600000 158.400000L518.400000 43.200000
+L369.600000 158.400000L220.800000 273.600000L72.000000 388.800000
+L220.800000 273.600000L369.600000 273.600000"/>
+</g>
+<g id="line2d2">
+<defs><path id="m87f81da4bcf58d853202912065521dc1" d="M0.000000 3.000000C0.795609 3.000000 1.558740 2.683901 2.121320 2.121320
+C2.683901 1.558740 3.000000 0.795609 3.000000 0.000000
+C3.000000 -0.795609 2.683901 -1.558740 2.121320 -2.121320
+C1.558740 -2.683901 0.795609 -3.000000 0.000000 -3.000000
+C-0.795609 -3.000000 -1.558740 -2.683901 -2.121320 -2.121320
+C-2.683901 -1.558740 -3.000000 -0.795609 -3.000000 0.000000
+C-3.000000 0.795609 -2.683901 1.558740 -2.121320 2.121320
+C-1.558740 2.683901 -0.795609 3.000000 0.000000 3.000000z"/></defs>
+<g clip-path="url(#p50431ccdcb28178602d99d9270004dde)"><use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="220.800000" y="158.400000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="369.600000" y="158.400000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="518.400000" y="43.200000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="369.600000" y="158.400000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="220.800000" y="273.600000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="72.000000" y="388.800000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="220.800000" y="273.600000"/>
+<use style="fill: #ff0000; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m87f81da4bcf58d853202912065521dc1" x="369.600000" y="273.600000"/>
+</g></g>
+<g id="matplotlib.axis1">
+<g id="xtick1">
+<g id="line2d3">
+<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="72.000000" y="388.800000"/>
+</g></g>
+<g id="line2d4">
+<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="72.000000" 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(63.250000,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="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="146.400000" 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="146.400000" 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(137.775000,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="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="220.800000" 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="220.800000" 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(212.307812,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="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="295.200000" 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="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="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="369.600000" 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="369.600000" 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(360.889062,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="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="444.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="444.000000" y="43.200000"/>
+</g></g>
+<g id="text6">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(435.414062,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="line2d15">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m30e32995789d870ad79a2e54c91cf9c6" x="518.400000" y="388.800000"/>
+</g></g>
+<g id="line2d16">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m9281cae24120827b11d5ea8a7ad3e96b" x="518.400000" 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(509.712500,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="line2d17">
+<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="72.000000" y="388.800000"/>
+</g></g>
+<g id="line2d18">
+<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="518.400000" y="388.800000"/>
+</g></g>
+<g id="text8">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(50.500000,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="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="72.000000" y="331.200000"/>
+</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="518.400000" y="331.200000"/>
+</g></g>
+<g id="text9">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(50.750000,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="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="72.000000" y="273.600000"/>
+</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="518.400000" y="273.600000"/>
+</g></g>
+<g id="text10">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(51.015625,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="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="72.000000" y="216.000000"/>
+</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="518.400000" y="216.000000"/>
+</g></g>
+<g id="text11">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(51.265625,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="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="72.000000" y="158.400000"/>
+</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="518.400000" y="158.400000"/>
+</g></g>
+<g id="text12">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(50.578125,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="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="72.000000" y="100.800000"/>
+</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="518.400000" y="100.800000"/>
+</g></g>
+<g id="text13">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(50.828125,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="line2d29">
+<g ><use style="fill: none; stroke: #000000; stroke-width: 0.500000; stroke-linejoin: round; stroke-linecap: butt; opacity: 1.000000" xlink:href="#m3400efa6b1638b3fea9e19e898273957" x="72.000000" y="43.200000"/>
+</g></g>
+<g id="line2d30">
+<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="43.200000"/>
+</g></g>
+<g id="text14">
+<g style="fill: #000000; opacity: 1.000000" transform="translate(50.625000,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="M72.000000 43.200000L518.400000 43.200000"/>
+</g>
+<g id="patch4">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M518.400000 388.800000L518.400000 43.200000"/>
+</g>
+<g id="patch5">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 388.800000L518.400000 388.800000"/>
+</g>
+<g id="patch6">
+<path style="fill: none; stroke: #000000; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" d="M72.000000 388.800000L72.000000 43.200000"/>
+</g>
+</g>
+</g>
+</svg>
Modified: branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py	2010年09月08日 13:48:29 UTC (rev 8689)
+++ branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py	2010年09月08日 14:32:17 UTC (rev 8690)
@@ -73,6 +73,8 @@
 path = transform.transform_path(path)
 simplified = list(path.iter_segments(simplify=(800, 600)))
 
+ print len(simplified)
+
 assert len(simplified) == 3884
 
 def test_sine_plus_noise():
@@ -90,6 +92,8 @@
 path = transform.transform_path(path)
 simplified = list(path.iter_segments(simplify=(800, 600)))
 
+ print len(simplified)
+
 assert len(simplified) == 876
 
 @image_comparison(baseline_images=['simplify_curve'])
@@ -135,6 +139,8 @@
 path = transform.transform_path(path)
 simplified = list(path.iter_segments(simplify=(800, 600)))
 
+ print len(simplified)
+
 assert len(simplified) == 17
 
 def test_start_with_moveto():
@@ -204,6 +210,17 @@
 ax.set_xlim(5, 9)
 fig.savefig('clipper_edge')
 
+@image_comparison(baseline_images=['para_equal_perp'])
+def test_para_equal_perp():
+ x = np.array([0, 1, 2, 1, 0, -1, 0, 1])
+ y = np.array([1, 1, 2, 1, 0, -1, 0, 0])
+
+ fig = plt.figure()
+ ax = fig.add_subplot(111)
+ ax.plot(x + 1, y + 1)
+ ax.plot(x + 1, y + 1, 'ro')
+ fig.savefig('para_equal_perp')
+
 if __name__=='__main__':
 import nose
 nose.runmodule(argv=['-s','--with-doctest'], exit=False)
Modified: branches/v1_0_maint/src/path_converters.h
===================================================================
--- branches/v1_0_maint/src/path_converters.h	2010年09月08日 13:48:29 UTC (rev 8689)
+++ branches/v1_0_maint/src/path_converters.h	2010年09月08日 14:32:17 UTC (rev 8690)
@@ -682,24 +682,30 @@
 min of our final line) */
 double paradNorm2 = paradx * paradx + parady * parady;
 
- m_lastMax = false;
- if (totdot >= 0.0)
- {
- if (paradNorm2 > m_dnorm2Max)
+ if (perpdNorm2 == paradNorm2) {
+ _push(&m_lastx, &m_lasty);
+ _push(x, y);
+ break;
+ } else {
+ m_lastMax = false;
+ if (totdot >= 0.0)
 {
- m_lastMax = true;
- m_dnorm2Max = paradNorm2;
- m_nextX = *x;
- m_nextY = *y;
+ if (paradNorm2 > m_dnorm2Max)
+ {
+ m_lastMax = true;
+ m_dnorm2Max = paradNorm2;
+ m_nextX = *x;
+ m_nextY = *y;
+ }
 }
- }
- else
- {
- if (paradNorm2 < m_dnorm2Min)
+ else
 {
- m_dnorm2Min = paradNorm2;
- m_nextX = *x;
- m_nextY = *y;
+ if (paradNorm2 < m_dnorm2Min)
+ {
+ m_dnorm2Min = paradNorm2;
+ m_nextX = *x;
+ m_nextY = *y;
+ }
 }
 }
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年09月08日 15:51:28
Revision: 8691
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8691&view=rev
Author: mdboom
Date: 2010年09月08日 15:51:18 +0000 (2010年9月08日)
Log Message:
-----------
Another pass at fixing simplification.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.pdf
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png
 branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg
 branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py
 branches/v1_0_maint/src/path_converters.h
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.pdf
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.png
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg	2010年09月08日 14:32:17 UTC (rev 8690)
+++ branches/v1_0_maint/lib/matplotlib/tests/baseline_images/test_simplification/fft_peaks.svg	2010年09月08日 15:51:18 UTC (rev 8691)
@@ -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>
@@ -25,9 +25,10 @@
 </clipPath>
 </defs><path style="fill: none; stroke: #0000ff; stroke-width: 1.000000; stroke-linejoin: round; stroke-linecap: square; opacity: 1.000000" clip-path="url(#p50431ccdcb28178602d99d9270004dde)" d="M72.000000 388.800000L76.132389 388.704243L76.151520 388.455734
 L76.157897 388.474541L76.170651 262.490246L76.177029 70.552590
-L76.272686 388.786908L76.629806 388.799881L221.059337 388.800000
-L485.704389 388.713691L485.729897 388.401770L485.736274 386.681411
-L485.755406 70.552590L485.844686 388.786149L486.182674 388.799863
+L76.183406 112.959876L76.183406 112.959876L76.298194 388.793604
+L77.114469 388.799987L485.704389 388.713691L485.729897 388.401770
+L485.736274 386.681411L485.755406 70.552590L485.768160 379.474263
+L485.768160 379.474263L485.882949 388.795086L487.018080 388.799995
 L489.926057 388.800000L489.926057 388.800000"/>
 </g>
 <g id="matplotlib.axis1">
Modified: branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py	2010年09月08日 14:32:17 UTC (rev 8690)
+++ branches/v1_0_maint/lib/matplotlib/tests/test_simplification.py	2010年09月08日 15:51:18 UTC (rev 8691)
@@ -141,7 +141,7 @@
 
 print len(simplified)
 
- assert len(simplified) == 17
+ assert len(simplified) == 20
 
 def test_start_with_moveto():
 # Should be entirely clipped away to a single MOVETO
@@ -212,8 +212,8 @@
 
 @image_comparison(baseline_images=['para_equal_perp'])
 def test_para_equal_perp():
- x = np.array([0, 1, 2, 1, 0, -1, 0, 1])
- y = np.array([1, 1, 2, 1, 0, -1, 0, 0])
+ x = np.array([0, 1, 2, 1, 0, -1, 0, 1] + [1] * 128)
+ y = np.array([1, 1, 2, 1, 0, -1, 0, 0] + [0] * 128)
 
 fig = plt.figure()
 ax = fig.add_subplot(111)
Modified: branches/v1_0_maint/src/path_converters.h
===================================================================
--- branches/v1_0_maint/src/path_converters.h	2010年09月08日 14:32:17 UTC (rev 8690)
+++ branches/v1_0_maint/src/path_converters.h	2010年09月08日 15:51:18 UTC (rev 8691)
@@ -520,7 +520,7 @@
 m_moveto(true), m_after_moveto(false),
 m_lastx(0.0), m_lasty(0.0), m_clipped(false),
 m_origdx(0.0), m_origdy(0.0),
- m_origdNorm2(0.0), m_dnorm2Max(0.0), m_dnorm2Min(0.0),
+ m_origdNorm2(0.0), m_dnorm2Max(0.0),
 m_lastMax(false), m_nextX(0.0), m_nextY(0.0),
 m_lastWrittenX(0.0), m_lastWrittenY(0.0)
 {
@@ -637,7 +637,6 @@
 
 //set all the variables to reflect this new orig vector
 m_dnorm2Max = m_origdNorm2;
- m_dnorm2Min = 0.0;
 m_lastMax = true;
 
 m_nextX = m_lastWrittenX = m_lastx = *x;
@@ -677,36 +676,25 @@
 /* check if the current vector is parallel or
 anti-parallel to the orig vector. If it is
 parallel, test if it is the longest of the vectors
- we are merging in that direction. If anti-p, test
- if it is the longest in the opposite direction (the
- min of our final line) */
+ we are merging in that direction. */
 double paradNorm2 = paradx * paradx + parady * parady;
 
- if (perpdNorm2 == paradNorm2) {
+ m_lastMax = false;
+ if (totdot > 0.0)
+ {
+ if (paradNorm2 > m_dnorm2Max)
+ {
+ m_lastMax = true;
+ m_dnorm2Max = paradNorm2;
+ m_nextX = *x;
+ m_nextY = *y;
+ }
+ }
+ else
+ {
 _push(&m_lastx, &m_lasty);
 _push(x, y);
 break;
- } else {
- m_lastMax = false;
- if (totdot >= 0.0)
- {
- if (paradNorm2 > m_dnorm2Max)
- {
- m_lastMax = true;
- m_dnorm2Max = paradNorm2;
- m_nextX = *x;
- m_nextY = *y;
- }
- }
- else
- {
- if (paradNorm2 < m_dnorm2Min)
- {
- m_dnorm2Min = paradNorm2;
- m_nextX = *x;
- m_nextY = *y;
- }
- }
 }
 
 m_lastx = *x;
@@ -770,7 +758,6 @@
 double m_origdy;
 double m_origdNorm2;
 double m_dnorm2Max;
- double m_dnorm2Min;
 bool m_lastMax;
 double m_nextX;
 double m_nextY;
@@ -805,7 +792,6 @@
 m_origdNorm2 = m_origdx * m_origdx + m_origdy * m_origdy;
 
 m_dnorm2Max = m_origdNorm2;
- m_dnorm2Min = 0.0;
 m_lastMax = true;
 m_lastWrittenX = m_queue[m_queue_write-1].x;
 m_lastWrittenY = m_queue[m_queue_write-1].y;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年09月17日 02:46:10
Revision: 8706
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8706&view=rev
Author: efiring
Date: 2010年09月17日 02:46:04 +0000 (2010年9月17日)
Log Message:
-----------
include Python.h first in extension code; patch by Jason Grout.
This cleans up the preprocessor directives and allows compilation on Solaris.
A preprocessor directive is added to keep png.h from failing on Linux
because Python.h has caused setjmp.h to be included.
Modified Paths:
--------------
 branches/v1_0_maint/CXX/WrapPython.h
 branches/v1_0_maint/src/_backend_agg.cpp
 branches/v1_0_maint/src/_image.cpp
 branches/v1_0_maint/src/_png.cpp
Modified: branches/v1_0_maint/CXX/WrapPython.h
===================================================================
--- branches/v1_0_maint/CXX/WrapPython.h	2010年09月16日 16:49:27 UTC (rev 8705)
+++ branches/v1_0_maint/CXX/WrapPython.h	2010年09月17日 02:46:04 UTC (rev 8706)
@@ -38,26 +38,12 @@
 #ifndef __PyCXX_wrap_python_hxx__
 #define __PyCXX_wrap_python_hxx__
 
+/* Python API mandates Python.h is included *first* */
+#include "Python.h"
+
 // On some platforms we have to include time.h to get select defined
 #if !defined(__WIN32__) && !defined(WIN32) && !defined(_WIN32) && !defined(_WIN64)
 #include <sys/time.h>
 #endif
 
-// Prevent multiple conflicting definitions of swab from stdlib.h and unistd.h
-#if defined(__sun) || defined(sun)
-#if defined(_XPG4)
-#undef _XPG4
 #endif
-#if defined(_XPG3)
-#undef _XPG3
-#endif
-#endif
-
-// Python.h will redefine these and generate warning in the process
-#undef _XOPEN_SOURCE
-#undef _POSIX_C_SOURCE
-
-// pull in python definitions
-#include <Python.h>
-
-#endif
Modified: branches/v1_0_maint/src/_backend_agg.cpp
===================================================================
--- branches/v1_0_maint/src/_backend_agg.cpp	2010年09月16日 16:49:27 UTC (rev 8705)
+++ branches/v1_0_maint/src/_backend_agg.cpp	2010年09月17日 02:46:04 UTC (rev 8706)
@@ -1,12 +1,12 @@
 /* A rewrite of _backend_agg using PyCXX to handle ref counting, etc..
 */
+
+/* Python API mandates Python.h is included *first* */
+#include "Python.h"
+
+#define PNG_SKIP_SETJMP_CHECK
 #include <png.h>
 
-// To remove a gcc warning
-#ifdef _POSIX_C_SOURCE
-#undef _POSIX_C_SOURCE
-#endif
-
 #include "ft2font.h"
 #include "_image.h"
 #include "_backend_agg.h"
Modified: branches/v1_0_maint/src/_image.cpp
===================================================================
--- branches/v1_0_maint/src/_image.cpp	2010年09月16日 16:49:27 UTC (rev 8705)
+++ branches/v1_0_maint/src/_image.cpp	2010年09月17日 02:46:04 UTC (rev 8706)
@@ -1,8 +1,4 @@
-// To remove a gcc warning
-#ifdef _POSIX_C_SOURCE
-#undef _POSIX_C_SOURCE
-#endif
-
+/* Python API mandates Python.h is included *first* */
 #include "Python.h"
 #include <string>
 
Modified: branches/v1_0_maint/src/_png.cpp
===================================================================
--- branches/v1_0_maint/src/_png.cpp	2010年09月16日 16:49:27 UTC (rev 8705)
+++ branches/v1_0_maint/src/_png.cpp	2010年09月17日 02:46:04 UTC (rev 8706)
@@ -1,10 +1,9 @@
+/* Python API mandates Python.h is included *first* */
+#include "Python.h"
+
+#define PNG_SKIP_SETJMP_CHECK
 #include <png.h>
 
-// To remove a gcc warning
-#ifdef _POSIX_C_SOURCE
-#undef _POSIX_C_SOURCE
-#endif
-
 // TODO: Un CXX-ify this module
 #include "CXX/Extensions.hxx"
 #include "numpy/arrayobject.h"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年09月21日 20:18:54
Revision: 8714
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8714&view=rev
Author: mdboom
Date: 2010年09月21日 20:18:48 +0000 (2010年9月21日)
Log Message:
-----------
Bug #
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/tri/_tri.cpp
 branches/v1_0_maint/src/mplutils.h
Modified: branches/v1_0_maint/lib/matplotlib/tri/_tri.cpp
===================================================================
--- branches/v1_0_maint/lib/matplotlib/tri/_tri.cpp	2010年09月21日 20:16:28 UTC (rev 8713)
+++ branches/v1_0_maint/lib/matplotlib/tri/_tri.cpp	2010年09月21日 20:18:48 UTC (rev 8714)
@@ -559,10 +559,10 @@
 // Clear _boundaries_visited.
 for (BoundariesVisited::iterator it = _boundaries_visited.begin();
 it != _boundaries_visited.end(); ++it)
- fill(it->begin(), it->end(), false);
+ std::fill(it->begin(), it->end(), false);
 
 // Clear _boundaries_used.
- fill(_boundaries_used.begin(), _boundaries_used.end(), false);
+ std::fill(_boundaries_used.begin(), _boundaries_used.end(), false);
 }
 }
 
Modified: branches/v1_0_maint/src/mplutils.h
===================================================================
--- branches/v1_0_maint/src/mplutils.h	2010年09月21日 20:16:28 UTC (rev 8713)
+++ branches/v1_0_maint/src/mplutils.h	2010年09月21日 20:18:48 UTC (rev 8714)
@@ -1,4 +1,4 @@
-/* mplutils.h	--
+/* mplutils.h --
 *
 * $Header$
 * $Log$
@@ -20,7 +20,7 @@
 void _VERBOSE(const std::string&);
 
 
-#undef	CLAMP
+#undef CLAMP
 #define CLAMP(x, low, high) (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
 
 #undef MAX
@@ -45,4 +45,27 @@
 friend std::ostream &operator <<(std::ostream &, const Printf &);
 };
 
+#if defined(_MSC_VER) && (_MSC_VER == 1400)
+
+/* Required by libpng and zlib */
+#pragma comment(lib, "bufferoverflowU")
+
+/* std::max and std::min are missing in Windows Server 2003 R2
+ Platform SDK compiler. See matplotlib bug #3067191 */
+namespace std {
+
+ template <class T> inline T max(const T& a, const T& b)
+ {
+ return (a > b) ? a : b;
+ }
+
+ template <class T> inline T min(const T& a, const T& b)
+ {
+ return (a < b) ? a : b;
+ }
+
+}
+
 #endif
+
+#endif
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <ef...@us...> - 2010年09月27日 18:51:12
Revision: 8722
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8722&view=rev
Author: efiring
Date: 2010年09月27日 18:51:05 +0000 (2010年9月27日)
Log Message:
-----------
Clarify docstrings for autoscale_view and relim.
Modified Paths:
--------------
 branches/v1_0_maint/doc/pyplots/tex_demo.png
 branches/v1_0_maint/lib/matplotlib/axes.py
Modified: branches/v1_0_maint/doc/pyplots/tex_demo.png
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/axes.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/axes.py	2010年09月27日 01:51:50 UTC (rev 8721)
+++ branches/v1_0_maint/lib/matplotlib/axes.py	2010年09月27日 18:51:05 UTC (rev 8722)
@@ -1491,7 +1491,12 @@
 return tab
 
 def relim(self):
- 'recompute the data limits based on current artists'
+ """
+ Recompute the data limits based on current artists.
+
+ At present, :class:`~matplotlib.collections.Collection`
+ instances are not supported.
+ """
 # Collections are deliberately not supported (yet); see
 # the TODO note in artists.py.
 self.dataLim.ignore(True)
@@ -1760,10 +1765,16 @@
 
 def autoscale_view(self, tight=None, scalex=True, scaley=True):
 """
- autoscale the view limits using the data limits. You can
+ Autoscale the view limits using the data limits. You can
 selectively autoscale only a single axis, eg, the xaxis by
 setting *scaley* to *False*. The autoscaling preserves any
 axis direction reversal that has already been done.
+
+ The data limits are not updated automatically when artist
+ data are changed after the artist has been added to an
+ Axes instance. In that case, use
+ :meth:`matplotlib.axes.Axes.relim`
+ prior to calling autoscale_view.
 """
 if tight is not None:
 self._tight = bool(tight)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2010年10月22日 16:17:32
Revision: 8760
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8760&view=rev
Author: mdboom
Date: 2010年10月22日 16:17:26 +0000 (2010年10月22日)
Log Message:
-----------
Fix problems with funnily encoded fonts in PS backend.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/backends/backend_ps.py
 branches/v1_0_maint/ttconv/pprdrv_tt.cpp
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_ps.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_ps.py	2010年10月22日 15:01:38 UTC (rev 8759)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_ps.py	2010年10月22日 16:17:26 UTC (rev 8760)
@@ -610,8 +610,6 @@
 draw a Text instance
 """
 # local to avoid repeated attribute lookups
-
-
 write = self._pswriter.write
 if debugPS:
 write("% text\n")
@@ -622,71 +620,9 @@
 elif ismath:
 return self.draw_mathtext(gc, x, y, s, prop, angle)
 
- elif isinstance(s, unicode):
- return self.draw_unicode(gc, x, y, s, prop, angle)
-
 elif rcParams['ps.useafm']:
- font = self._get_font_afm(prop)
-
- l,b,w,h = font.get_str_bbox(s)
-
- fontsize = prop.get_size_in_points()
- l *= 0.001*fontsize
- b *= 0.001*fontsize
- w *= 0.001*fontsize
- h *= 0.001*fontsize
-
- if angle==90: l,b = -b, l # todo generalize for arb rotations
-
- pos = _nums_to_str(x-l, y-b)
- thetext = '(%s)' % s
- fontname = font.get_fontname()
- fontsize = prop.get_size_in_points()
- rotate = '%1.1f rotate' % angle
- setcolor = '%1.3f %1.3f %1.3f setrgbcolor' % gc.get_rgb()[:3]
- #h = 0
- ps = """\
-gsave
-/%(fontname)s findfont
-%(fontsize)s scalefont
-setfont
-%(pos)s moveto
-%(rotate)s
-%(thetext)s
-%(setcolor)s
-show
-grestore
- """ % locals()
- self._draw_ps(ps, gc, None)
-
- else:
- font = self._get_font_ttf(prop)
- font.set_text(s, 0, flags=LOAD_NO_HINTING)
- self.track_characters(font, s)
-
 self.set_color(*gc.get_rgb())
- self.set_font(font.get_sfnt()[(1,0,0,6)], prop.get_size_in_points())
- write("%s m\n"%_nums_to_str(x,y))
- if angle:
- write("gsave\n")
- write("%s rotate\n"%_num_to_str(angle))
- descent = font.get_descent() / 64.0
- if descent:
- write("0 %s rmoveto\n"%_num_to_str(descent))
- write("(%s) show\n"%quote_ps_string(s))
- if angle:
- write("grestore\n")
 
- def new_gc(self):
- return GraphicsContextPS()
-
- def draw_unicode(self, gc, x, y, s, prop, angle):
- """draw a unicode string. ps doesn't have unicode support, so
- we have to do this the hard way
- """
- if rcParams['ps.useafm']:
- self.set_color(*gc.get_rgb())
-
 font = self._get_font_afm(prop)
 fontname = font.get_fontname()
 fontsize = prop.get_size_in_points()
@@ -772,6 +708,9 @@
 """ % locals()
 self._pswriter.write(ps)
 
+ def new_gc(self):
+ return GraphicsContextPS()
+
 def draw_mathtext(self, gc,
 x, y, s, prop, angle):
 """
@@ -1125,7 +1064,6 @@
 if is_opentype_cff_font(font_filename):
 raise RuntimeError("OpenType CFF fonts can not be saved using the internal Postscript backend at this time.\nConsider using the Cairo backend.")
 else:
- fonttype = rcParams['ps.fonttype']
 convert_ttf_to_ps(font_filename, fh, fonttype, glyph_ids)
 print >>fh, "end"
 print >>fh, "%%EndProlog"
Modified: branches/v1_0_maint/ttconv/pprdrv_tt.cpp
===================================================================
--- branches/v1_0_maint/ttconv/pprdrv_tt.cpp	2010年10月22日 15:01:38 UTC (rev 8759)
+++ branches/v1_0_maint/ttconv/pprdrv_tt.cpp	2010年10月22日 16:17:26 UTC (rev 8760)
@@ -420,21 +420,19 @@
 -------------------------------------------------------------*/
 void ttfont_encoding(TTStreamWriter& stream, struct TTFONT *font, std::vector<int>& glyph_ids, font_type_enum target_type)
 {
- stream.putline("/Encoding StandardEncoding def");
+ if (target_type == PS_TYPE_3) {
+ stream.printf("/Encoding [ ");
 
- // if (target_type == PS_TYPE_3) {
- // stream.printf("/Encoding [ ");
+ for (std::vector<int>::const_iterator i = glyph_ids.begin();
+ i != glyph_ids.end(); ++i) {
+ const char* name = ttfont_CharStrings_getname(font, *i);
+ stream.printf("/%s ", name);
+ }
 
- // for (std::vector<int>::const_iterator i = glyph_ids.begin();
- // i != glyph_ids.end(); ++i) {
- // const char* name = ttfont_CharStrings_getname(font, *i);
- // stream.printf("/%s ", name);
- // }
-
- // stream.printf("] def\n");
- // } else {
- // stream.putline("/Encoding StandardEncoding def");
- // }
+ stream.printf("] def\n");
+ } else {
+ stream.putline("/Encoding StandardEncoding def");
+ }
 } /* end of ttfont_encoding() */
 
 /*-----------------------------------------------------------
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jo...@us...> - 2010年11月07日 08:06:47
Revision: 8776
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8776&view=rev
Author: jouni
Date: 2010年11月07日 08:06:41 +0000 (2010年11月07日)
Log Message:
-----------
Allow bypassing the download mechanism in get_sample_data
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/lib/matplotlib/cbook.py
 branches/v1_0_maint/lib/matplotlib/rcsetup.py
 branches/v1_0_maint/matplotlibrc.template
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年11月05日 18:52:52 UTC (rev 8775)
+++ branches/v1_0_maint/CHANGELOG	2010年11月07日 08:06:41 UTC (rev 8776)
@@ -1,3 +1,7 @@
+2010年11月07日 New rc parameters examples.download and examples.directory
+ allow bypassing the download mechanism in get_sample_data. 
+ - JKS
+
 2010年08月21日 Change Axis.set_view_interval() so that when updating an
 existing interval, it respects the orientation of that
 interval, and can enlarge but not reduce the interval.
Modified: branches/v1_0_maint/lib/matplotlib/cbook.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/cbook.py	2010年11月05日 18:52:52 UTC (rev 8775)
+++ branches/v1_0_maint/lib/matplotlib/cbook.py	2010年11月07日 08:06:41 UTC (rev 8776)
@@ -649,9 +649,20 @@
 svn co https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data
 
 and svn add the data file you want to support. This is primarily
- intended for use in mpl examples that need custom data
+ intended for use in mpl examples that need custom data.
+
+ To bypass all downloading, set the rc parameter examples.download to False
+ and examples.directory to the directory where we should look.
 """
 
+ if not matplotlib.rcParams['examples.download']:
+ directory = matplotlib.rcParams['examples.directory']
+ f = os.path.join(directory, fname)
+ if asfileobj:
+ return open(f, 'rb')
+ else:
+ return f
+
 myserver = get_sample_data.myserver
 if myserver is None:
 configdir = matplotlib.get_configdir()
Modified: branches/v1_0_maint/lib/matplotlib/rcsetup.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/rcsetup.py	2010年11月05日 18:52:52 UTC (rev 8775)
+++ branches/v1_0_maint/lib/matplotlib/rcsetup.py	2010年11月07日 08:06:41 UTC (rev 8776)
@@ -566,8 +566,12 @@
 'keymap.grid' : ['g', validate_stringlist],
 'keymap.yscale' : ['l', validate_stringlist],
 'keymap.xscale' : [['k', 'L'], validate_stringlist],
- 'keymap.all_axes' : ['a', validate_stringlist]
+ 'keymap.all_axes' : ['a', validate_stringlist],
 
+ # sample data
+ 'examples.download' : [True, validate_bool],
+ 'examples.directory' : ['', str],
+
 }
 
 if __name__ == '__main__':
Modified: branches/v1_0_maint/matplotlibrc.template
===================================================================
--- branches/v1_0_maint/matplotlibrc.template	2010年11月05日 18:52:52 UTC (rev 8775)
+++ branches/v1_0_maint/matplotlibrc.template	2010年11月07日 08:06:41 UTC (rev 8776)
@@ -370,3 +370,12 @@
 #keymap.xscale : L, k # toggle scaling of x-axes ('log'/'linear')
 #keymap.all_axes : a # enable all axes
 
+# Control downloading of example data. Various examples download some
+# data from the Matplotlib svn repository to avoid distributing extra
+# files, but sometimes you want to avoid that. In that case set
+# examples.download to False and examples.directory to the directory
+# where you have a checkout of
+# https://matplotlib.svn.sourceforge.net/svnroot/matplotlib/trunk/sample_data
+
+#examples.download : True # False to bypass downloading mechanism
+#examples.directory : '' # absolute directory to look in if download is false
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2010年11月09日 15:23:32
Revision: 8785
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8785&view=rev
Author: jdh2358
Date: 2010年11月09日 15:23:25 +0000 (2010年11月09日)
Log Message:
-----------
fix a bug in context so plot directive will be forced to run (but not save) figs which are already cached
Modified Paths:
--------------
 branches/v1_0_maint/doc/users/annotations_guide.rst
 branches/v1_0_maint/doc/users/gridspec.rst
 branches/v1_0_maint/doc/users/image_tutorial.rst
 branches/v1_0_maint/doc/users/recipes.rst
 branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py
Removed Paths:
-------------
 branches/v1_0_maint/examples/units/date_converter.py
 branches/v1_0_maint/examples/units/date_support.py
Modified: branches/v1_0_maint/doc/users/annotations_guide.rst
===================================================================
--- branches/v1_0_maint/doc/users/annotations_guide.rst	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/doc/users/annotations_guide.rst	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -310,6 +310,7 @@
 as 2. The callable object should take a single argument of
 renderer instance. For example, following two commands give
 identical results ::
+
 an2 = ax.annotate("Test 2", xy=(1, 0.5), xycoords=an1,
 xytext=(30,0), textcoords="offset points")
 an2 = ax.annotate("Test 2", xy=(1, 0.5), xycoords=an1.get_window_extent,
@@ -322,7 +323,7 @@
 annotate("Test", xy=(0.5, 1), xycoords=("data", "axes fraction"))
 
 0.5 is in data coordinate, and 1 is in normalized axes coordinate.
- You may use an atist or transform as with a tuple. For example, 
+ You may use an atist or transform as with a tuple. For example,
 
 .. plot:: users/plotting/examples/annotate_simple_coord02.py
 :include-source:
Modified: branches/v1_0_maint/doc/users/gridspec.rst
===================================================================
--- branches/v1_0_maint/doc/users/gridspec.rst	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/doc/users/gridspec.rst	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -1,4 +1,4 @@
-.. _gridspec-guide:
+\.. _gridspec-guide:
 
 
 ************************************************
@@ -23,7 +23,7 @@
 ====================================
 
 To use subplot2grid, you provide geometry of the grid and the location
-of the subplot in the grid. For a simple single-cell subplot, ::
+of the subplot in the grid. For a simple single-cell subplot::
 
 ax = plt.subplot2grid((2,2),(0, 0))
 
Modified: branches/v1_0_maint/doc/users/image_tutorial.rst
===================================================================
--- branches/v1_0_maint/doc/users/image_tutorial.rst	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/doc/users/image_tutorial.rst	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -40,8 +40,7 @@
 Importing image data into Numpy arrays
 ===============================================
 
-Plotting image data is supported by the Python Image Library (`PIL
-<http://www.pythonware.com/products/pil/>`_), . Natively, matplotlib
+Plotting image data is supported by the Python Image Library (`PIL <http://www.pythonware.com/products/pil/>`_), . Natively, matplotlib
 only supports PNG images. The commands shown below fall back on PIL
 if the native read fails.
 
@@ -122,8 +121,7 @@
 data. Why 8 bits? Most displays can only render 8 bits per channel
 worth of color gradation. Why can they only render 8 bits/channel?
 Because that's about all the human eye can see. More here (from a
-photography standpoint): `Luminous Landscape bit depth tutorial
-<http://www.luminous-landscape.com/tutorials/bit-depth.shtml>`_.
+photography standpoint): `Luminous Landscape bit depth tutorial <http://www.luminous-landscape.com/tutorials/bit-depth.shtml>`_.
 
 Each inner list represents a pixel. Here, with an RGB image, there
 are 3 values. Since it's a black and white image, R, G, and B are all
@@ -179,8 +177,7 @@
 
 In [6]: lum_img = img[:,:,0]
 
-This is array slicing. You can read more in the `Numpy tutorial
-<http://www.scipy.org/Tentative_NumPy_Tutorial>`_.
+This is array slicing. You can read more in the `Numpy tutorial <http://www.scipy.org/Tentative_NumPy_Tutorial>`_.
 
 .. sourcecode:: ipython
 
@@ -229,9 +226,7 @@
 imgplot = plt.imshow(lum_img)
 imgplot.set_cmap('spectral')
 
-There are many other colormap schemes available. See the `list and
-images of the colormaps
-<http://matplotlib.sourceforge.net/examples/pylab_examples/show_colormaps.html>`_.
+There are many other colormap schemes available. See the `list and images of the colormaps <http://matplotlib.sourceforge.net/examples/pylab_examples/show_colormaps.html>`_.
 
 .. _Color Bars
 
Modified: branches/v1_0_maint/doc/users/recipes.rst
===================================================================
--- branches/v1_0_maint/doc/users/recipes.rst	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/doc/users/recipes.rst	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -56,21 +56,30 @@
 everything at once, and turn off x and y sharing for the whole bunch.
 You can either unpack the axes individually::
 
- # new style method 1
- fig, (ax1, ax2, ax3, ax4) = plt.subplots(2, 2, sharex=True, sharey=True)
+ # new style method 1; unpack the axes
+ fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, sharex=True, sharey=True)
 ax1.plot(x)
 
 or get them back as a numrows x numcolumns object array which supports
 numpy indexing::
 
- # new style method 2
+ # new style method 2; use an axes array
 fig, axs = plt.subplots(2, 2, sharex=True, sharey=True)
 axs[0,0].plot(x)
 
 
+
 Fixing common date annoyances
 =============================
 
+
+.. plot::
+ :nofigs:
+ :context:
+
+ # clear the state for context use below
+ plt.close('all')
+
 matplotlib allows you to natively plots python datetime instances, and
 for the most part does a good job picking tick locations and string
 formats. There are a couple of things it does not handle so
@@ -97,13 +106,15 @@
 objects are datetime.date instances, which we can see when we print
 some samples in the ipython terminal window.
 
-If you plot the data, you will see that the x tick labels are all
-squashed together::
+If you plot the data, ::
 
 In [67]: plot(r.date, r.close)
 Out[67]: [<matplotlib.lines.Line2D object at 0x92a6b6c>]
 
+you will see that the x tick labels are all squashed together.
+
 .. plot::
+ :context:
 
 import matplotlib.cbook as cbook
 datafile = cbook.get_sample_data('goog.npy')
@@ -113,23 +124,22 @@
 plt.title('Default date handling can cause overlapping labels')
 
 Another annoyance is that if you hover the mouse over a the window and
-look in the lower right corner of the matplotlib toolbar at the x and
-y coordinates, you see that the x locations are formatted the same way
-the tick labels are, eg "Dec 2004". What we'd like is for the
-location in the toolbar to have a higher degree of precision, eg
-giving us the exact date out mouse is hovering over. To fix the first
-problem, we can use method:`matplotlib.figure.Figure.autofmt_xdate()`
-and to fix the second problem we can use the ``ax.fmt_xdata``
-attribute which can be set to any function that takes a position and
-returns a string. matplotlib has a number of date formatters built
-im, so we'll use one of those.
+look in the lower right corner of the matplotlib toolbar
+(:ref:`navigation-toolbar`) at the x and y coordinates, you see that
+the x locations are formatted the same way the tick labels are, eg
+"Dec 2004". What we'd like is for the location in the toolbar to have
+a higher degree of precision, eg giving us the exact date out mouse is
+hovering over. To fix the first problem, we can use
+method:`matplotlib.figure.Figure.autofmt_xdate` and to fix the second
+problem we can use the ``ax.fmt_xdata`` attribute which can be set to
+any function that takes a scalar and returns a string. matplotlib has
+a number of date formatters built in, so we'll use one of those.
 
 .. plot::
 :include-source:
+ :context:
 
- import matplotlib.cbook as cbook
- datafile = cbook.get_sample_data('goog.npy')
- r = np.load(datafile).view(np.recarray)
+ plt.close('all')
 fig, ax = plt.subplots(1)
 ax.plot(r.date, r.close)
 
@@ -140,10 +150,10 @@
 # toolbar
 import matplotlib.dates as mdates
 ax.fmt_xdata = mdates.DateFormatter('%Y-%m-%d')
- plt.title('autfmt_xdate fixes the labels')
+ plt.title('fig.autofmt_xdate fixes the labels')
 
 Now when you hover your mouse over the plotted data, you'll see date
-format strings like 2004年12月01日.
+format strings like 2004年12月01日 in the toolbar.
 
 Fill Between and Alpha
 ======================
@@ -154,7 +164,7 @@
 combine filling with logical ranges, eg to just fill in a curve over
 some threshold value.
 
-At it's most basic level, ``fill_between`` can be use to enhance a
+At its most basic level, ``fill_between`` can be use to enhance a
 graphs visual appearance. Let's compare two graphs of a financial
 times with a simple line plot on the left and a filled line on the
 right.
@@ -162,6 +172,9 @@
 .. plot::
 :include-source:
 
+ import matplotlib.pyplot as plt
+ import numpy as np
+
 import matplotlib.cbook as cbook
 
 # load up some sample financial data
@@ -180,6 +193,9 @@
 ax.grid(True)
 
 ax1.set_ylabel('price')
+ for label in ax2.get_yticklabels():
+ label.set_visible(False)
+
 fig.suptitle('Google (GOOG) daily closing price')
 fig.autofmt_xdate()
 
@@ -193,21 +209,24 @@
 
 Our next example computes two populations of random walkers with a
 different mean and standard deviation of the normal distributions from
-which there steps are drawn. We use shared regions to plot +/- one
+which the steps are drawn. We use shared regions to plot +/- one
 standard deviation of the mean position of the population. Here the
 alpha channel is useful, not just aesthetic.
 
 .. plot::
 :include-source:
 
+ import matplotlib.pyplot as plt
+ import numpy as np
+
 Nsteps, Nwalkers = 100, 250
 t = np.arange(Nsteps)
 
- # an Nsteps x Nwalkers array of random walk steps
+ # an (Nsteps x Nwalkers) array of random walk steps
 S1 = 0.002 + 0.01*np.random.randn(Nsteps, Nwalkers)
 S2 = 0.004 + 0.02*np.random.randn(Nsteps, Nwalkers)
 
- # an Nsteps x Nwalkers array of random walker positions
+ # an (Nsteps x Nwalkers) array of random walker positions
 X1 = S1.cumsum(axis=0)
 X2 = S2.cumsum(axis=0)
 
@@ -232,16 +251,16 @@
 ax.grid()
 
 
-The where keyword argument is very handy for highlighting certain
-regions of the graph. Where takes a boolean mask the same length as
-the x, ymin and ymax arguments, and only fills in the region where the
-boolean mask is True. In the example below, we take a a single random
-walker and compute the analytic mean and standard deviation of the
-population positions. The population mean is shown as the black
+The ``where`` keyword argument is very handy for highlighting certain
+regions of the graph. ``where`` takes a boolean mask the same length
+as the x, ymin and ymax arguments, and only fills in the region where
+the boolean mask is True. In the example below, we simulate a single
+random walker and compute the analytic mean and standard deviation of
+the population positions. The population mean is shown as the black
 dashed line, and the plus/minus one sigma deviation from the mean is
 showsn as the yellow filled region. We use the where mask
-``X>upper_bound`` to find the region where the walker is above the
-one sigma boundary, and shade that region blue.
+``X>upper_bound`` to find the region where the walker is above the one
+sigma boundary, and shade that region blue.
 
 .. plot::
 :include-source:
@@ -258,7 +277,7 @@
 S = mu + sigma*np.random.randn(Nsteps)
 X = S.cumsum()
 
- # the 1 sigma upper and lower population bounds
+ # the 1 sigma upper and lower analytic population bounds
 lower_bound = mu*t - sigma*np.sqrt(t)
 upper_bound = mu*t + sigma*np.sqrt(t)
 
@@ -323,9 +342,9 @@
 When decorating axes with text boxes, two useful tricks are to place
 the text in axes coordinates (see :ref:`transforms_tutorial`), so the
 text doesn't move around with changes in x or y limits. You can also
-use the bbox property of text to surround the text with a
-:class:`~matplotlib.patches.Patch` instance -- the boox keyword argument
-takes a dictionary with keys that are Patch properties.
+use the ``bbox`` property of text to surround the text with a
+:class:`~matplotlib.patches.Patch` instance -- the ``bbox`` keyword
+argument takes a dictionary with keys that are Patch properties.
 
 .. plot::
 :include-source:
Deleted: branches/v1_0_maint/examples/units/date_converter.py
===================================================================
--- branches/v1_0_maint/examples/units/date_converter.py	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/examples/units/date_converter.py	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -1,20 +0,0 @@
-import date_support # set up the date converters
-import datetime
-from matplotlib.dates import drange
-from pylab import figure, show
-import numpy as np
-
-
-xmin = datetime.date(2007,1,1)
-xmax = datetime.date.today()
-delta = datetime.timedelta(days=1)
-xdates = drange(xmin, xmax, delta)
-
-fig = figure()
-fig.subplots_adjust(bottom=0.2)
-ax = fig.add_subplot(111)
-ax.plot(xdates, np.random.rand(len(xdates)), 'o')
-ax.set_xlim(datetime.date(2007,2,1), datetime.date(2007,3,1))
-
-fig.autofmt_xdate()
-show()
Deleted: branches/v1_0_maint/examples/units/date_support.py
===================================================================
--- branches/v1_0_maint/examples/units/date_support.py	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/examples/units/date_support.py	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -1,36 +0,0 @@
-import matplotlib
-matplotlib.rcParams['units'] = True
-from matplotlib.cbook import iterable, is_numlike
-import matplotlib.units as units
-import matplotlib.dates as dates
-import matplotlib.ticker as ticker
-import datetime
-
-class DateConverter(units.ConversionInterface):
-
- @staticmethod
- def axisinfo(unit, axis):
- 'return the unit AxisInfo'
- if unit=='date':
- majloc = dates.AutoDateLocator()
- majfmt = dates.AutoDateFormatter(majloc)
- return units.AxisInfo(
- majloc = majloc,
- majfmt = majfmt,
- label='date',
- )
- else: return None
-
- @staticmethod
- def convert(value, unit, axis):
- if units.ConversionInterface.is_numlike(value): return value
- return dates.date2num(value)
-
- @staticmethod
- def default_units(x, axis):
- 'return the default unit for x or None'
- return 'date'
-
-
-units.registry[datetime.date] = DateConverter()
-units.registry[datetime.datetime] = DateConverter()
Modified: branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py	2010年11月09日 07:46:54 UTC (rev 8784)
+++ branches/v1_0_maint/lib/matplotlib/sphinxext/plot_directive.py	2010年11月09日 15:23:25 UTC (rev 8785)
@@ -210,6 +210,7 @@
 
 if plot_code is not None:
 exec_code = 'import numpy as np; import matplotlib.pyplot as plt\n%s'%plot_code
+ #print 'CONTEXT', context, plot_context, exec_code
 if context:
 exec(exec_code, None, plot_context)
 else:
@@ -279,6 +280,8 @@
 basedir, fname = os.path.split(plot_path)
 basename, ext = os.path.splitext(fname)
 
+
+
 all_exists = True
 
 # Look for single-figure output files first
@@ -288,7 +291,7 @@
 all_exists = False
 break
 
- if all_exists:
+ if not context and all_exists:
 return 1
 
 # Then look for multi-figure output files, assuming
@@ -307,7 +310,7 @@
 else:
 break
 
- if i != 0:
+ if not context and i != 0:
 return i
 
 # We didn't find the files, so build them
@@ -321,13 +324,17 @@
 warnings.warn(s, PlotWarning)
 return 0
 
- num_figs = run_savefig(plot_path, basename, tmpdir, destdir, formats)
+ if not all_exists:
+ num_figs = run_savefig(plot_path, basename, tmpdir, destdir, formats)
 
- if '__plot__' in sys.modules:
- del sys.modules['__plot__']
+ if '__plot__' in sys.modules:
+ del sys.modules['__plot__']
 
- return num_figs
+ return num_figs
+ else:
+ return 1
 
+
 def _plot_directive(plot_path, basedir, function_name, plot_code, caption,
 options, state_machine):
 context = options.has_key('context')
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <wea...@us...> - 2010年11月12日 16:10:34
Revision: 8794
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8794&view=rev
Author: weathergod
Date: 2010年11月12日 16:10:21 +0000 (2010年11月12日)
Log Message:
-----------
Fixed a bug in axis3d.py which caused axis labels to not be centered along the axis as well as correctly calculating the rotation angle needed to keep the axis label parallel to the axis irrespectively of the plot's aspect ratio.
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/lib/mpl_toolkits/mplot3d/axis3d.py
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年11月12日 14:59:38 UTC (rev 8793)
+++ branches/v1_0_maint/CHANGELOG	2010年11月12日 16:10:21 UTC (rev 8794)
@@ -1,3 +1,5 @@
+2010年11月12日 Fixed the placement and angle of axis labels in 3D plots. - BVR
+
 2010年11月07日 New rc parameters examples.download and examples.directory
 allow bypassing the download mechanism in get_sample_data. 
 - JKS
Modified: branches/v1_0_maint/lib/mpl_toolkits/mplot3d/axis3d.py
===================================================================
--- branches/v1_0_maint/lib/mpl_toolkits/mplot3d/axis3d.py	2010年11月12日 14:59:38 UTC (rev 8793)
+++ branches/v1_0_maint/lib/mpl_toolkits/mplot3d/axis3d.py	2010年11月12日 16:10:21 UTC (rev 8794)
@@ -91,6 +91,7 @@
 self.gridlines = art3d.Line3DCollection([], )
 self.axes._set_artist_props(self.gridlines)
 self.axes._set_artist_props(self.label)
+ # Need to be able to place the label at the correct location
 self.label._transform = self.axes.transData
 self.set_rotate_label(kwargs.get('rotate_label', None))
 
@@ -209,13 +210,23 @@
 xyz0.append(coord)
 
 # Draw labels
- dy = pep[1][1] - pep[1][0]
- dx = pep[0][1] - pep[0][0]
+ peparray = np.asanyarray(pep)
+ # The transAxes transform is used because the Text object
+ # rotates the text relative to the display coordinate system.
+ # Therefore, if we want the labels to remain parallel to the
+ # axis regardless of the aspect ratio, we need to convert the
+ # edge points of the plane to display coordinates and calculate
+ # an angle from that.
+ # TODO: Maybe Text objects should handle this themselves?
+ dx, dy = (self.axes.transAxes.transform(peparray[0:2, 1]) - 
+ self.axes.transAxes.transform(peparray[0:2, 0]))
 
 lxyz = 0.5*(edgep1 + edgep2)
 
 labeldeltas = 1.3 * deltas
- lxyz = move_from_center(lxyz, centers, labeldeltas)
+ axmask = [True, True, True]
+ axmask[index] = False
+ lxyz = move_from_center(lxyz, centers, labeldeltas, axmask)
 tlx, tly, tlz = proj3d.proj_transform(lxyz[0], lxyz[1], lxyz[2], \
 renderer.M)
 self.label.set_position((tlx, tly))
@@ -223,6 +234,7 @@
 angle = art3d.norm_text_angle(math.degrees(math.atan2(dy, dx)))
 self.label.set_rotation(angle)
 self.label.set_va('center')
+ self.label.set_ha('center')
 self.label.draw(renderer)
 
 # Grid points at end of one plane
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <wea...@us...> - 2010年11月22日 16:05:23
Revision: 8808
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8808&view=rev
Author: weathergod
Date: 2010年11月22日 16:05:17 +0000 (2010年11月22日)
Log Message:
-----------
Fixed a mistake with the Hammer projection in the geo module.
Thanks to Matthias Plum for reporting and Tobias Winchen for confirming.
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/lib/matplotlib/projections/geo.py
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2010年11月22日 14:01:21 UTC (rev 8807)
+++ branches/v1_0_maint/CHANGELOG	2010年11月22日 16:05:17 UTC (rev 8808)
@@ -1,3 +1,5 @@
+2010年11月22日 Fixed error with Hammer projection. - BVR
+
 2010年11月12日 Fixed the placement and angle of axis labels in 3D plots. - BVR
 
 2010年11月07日 New rc parameters examples.download and examples.directory
Modified: branches/v1_0_maint/lib/matplotlib/projections/geo.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/projections/geo.py	2010年11月22日 14:01:21 UTC (rev 8807)
+++ branches/v1_0_maint/lib/matplotlib/projections/geo.py	2010年11月22日 16:05:17 UTC (rev 8808)
@@ -346,7 +346,7 @@
 cos_latitude = np.cos(latitude)
 sqrt2 = np.sqrt(2.0)
 
- alpha = 1.0 + cos_latitude * np.cos(half_long)
+ alpha = np.sqrt(1.0 + cos_latitude * np.cos(half_long))
 x = (2.0 * sqrt2) * (cos_latitude * np.sin(half_long)) / alpha
 y = (sqrt2 * np.sin(latitude)) / alpha
 return np.concatenate((x, y), 1)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2011年01月03日 20:35:05
Revision: 8876
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8876&view=rev
Author: jdh2358
Date: 2011年01月03日 20:34:57 +0000 (2011年1月03日)
Log Message:
-----------
update pytz to 2010o
Modified Paths:
--------------
 branches/v1_0_maint/examples/animation/animation_blit_gtk.py
 branches/v1_0_maint/examples/animation/animation_blit_gtk2.py
 branches/v1_0_maint/lib/pytz/__init__.py
 branches/v1_0_maint/lib/pytz/tests/test_tzinfo.py
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Bamako
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Cairo
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Casablanca
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Conakry
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Dar_es_Salaam
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Kampala
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Mogadishu
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Nairobi
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Nouakchott
 branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Timbuktu
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Catamarca
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/ComodRivadavia
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Cordoba
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Jujuy
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/La_Rioja
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Mendoza
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Rio_Gallegos
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Salta
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/San_Juan
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/San_Luis
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Tucuman
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Ushuaia
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Asuncion
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Cambridge_Bay
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Cancun
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Caracas
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Catamarca
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Chicago
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Chihuahua
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Cordoba
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Goose_Bay
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Hermosillo
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Indiana/Knox
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Indiana/Tell_City
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Iqaluit
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Jujuy
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Knox_IN
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Managua
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Mazatlan
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Mendoza
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Menominee
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Merida
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Montevideo
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Ojinaga
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Pangnirtung
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Rankin_Inlet
 branches/v1_0_maint/lib/pytz/zoneinfo/America/Rosario
 branches/v1_0_maint/lib/pytz/zoneinfo/America/St_Johns
 branches/v1_0_maint/lib/pytz/zoneinfo/Antarctica/Casey
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Aqtau
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Colombo
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Dili
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Gaza
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Harbin
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Ho_Chi_Minh
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Hong_Kong
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Irkutsk
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Jayapura
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Jerusalem
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Krasnoyarsk
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Magadan
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Makassar
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Manila
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Omsk
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Phnom_Penh
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Pyongyang
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Riyadh87
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Riyadh88
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Riyadh89
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Saigon
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Seoul
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Taipei
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Tbilisi
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Tehran
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Tel_Aviv
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Ujung_Pandang
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Vientiane
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Vladivostok
 branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Yakutsk
 branches/v1_0_maint/lib/pytz/zoneinfo/Atlantic/Stanley
 branches/v1_0_maint/lib/pytz/zoneinfo/Canada/Newfoundland
 branches/v1_0_maint/lib/pytz/zoneinfo/Egypt
 branches/v1_0_maint/lib/pytz/zoneinfo/Europe/Helsinki
 branches/v1_0_maint/lib/pytz/zoneinfo/Europe/Mariehamn
 branches/v1_0_maint/lib/pytz/zoneinfo/Europe/Moscow
 branches/v1_0_maint/lib/pytz/zoneinfo/Hongkong
 branches/v1_0_maint/lib/pytz/zoneinfo/Iran
 branches/v1_0_maint/lib/pytz/zoneinfo/Israel
 branches/v1_0_maint/lib/pytz/zoneinfo/Mexico/BajaSur
 branches/v1_0_maint/lib/pytz/zoneinfo/Mideast/Riyadh87
 branches/v1_0_maint/lib/pytz/zoneinfo/Mideast/Riyadh88
 branches/v1_0_maint/lib/pytz/zoneinfo/Mideast/Riyadh89
 branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Apia
 branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Fiji
 branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Kosrae
 branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Truk
 branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Yap
 branches/v1_0_maint/lib/pytz/zoneinfo/ROC
 branches/v1_0_maint/lib/pytz/zoneinfo/ROK
 branches/v1_0_maint/lib/pytz/zoneinfo/US/Central
 branches/v1_0_maint/lib/pytz/zoneinfo/US/Indiana-Starke
 branches/v1_0_maint/lib/pytz/zoneinfo/W-SU
 branches/v1_0_maint/lib/pytz/zoneinfo/localtime
 branches/v1_0_maint/lib/pytz/zoneinfo/zone.tab
 branches/v1_0_maint/src/_gtkagg.cpp
Modified: branches/v1_0_maint/examples/animation/animation_blit_gtk.py
===================================================================
--- branches/v1_0_maint/examples/animation/animation_blit_gtk.py	2011年01月03日 19:00:11 UTC (rev 8875)
+++ branches/v1_0_maint/examples/animation/animation_blit_gtk.py	2011年01月03日 20:34:57 UTC (rev 8876)
@@ -29,15 +29,28 @@
 # for profiling
 tstart = time.time()
 
+def on_draw(event):
+ background = canvas.copy_from_bbox(ax.bbox)
+ if on_draw.background is None:
+ gobject.idle_add(update_line)
+
+ on_draw.background = background
+
+on_draw.background = None
+
+fig.canvas.mpl_connect('draw_event', on_draw)
+
 def update_line(*args):
- print 'you are here', update_line.cnt
- if update_line.background is None:
- update_line.background = canvas.copy_from_bbox(ax.bbox)
+ if on_draw.background is None:
+ return True
 
+ print 'frame', update_line.cnt
+
 # restore the clean slate background
- canvas.restore_region(update_line.background)
+ canvas.restore_region(on_draw.background)
 # update the data
 line.set_ydata(np.sin(x+update_line.cnt/10.0))
+
 # just draw the animated artist
 ax.draw_artist(line)
 
@@ -54,15 +67,7 @@
 return True
 
 update_line.cnt = 0
-update_line.background = None
 
 
-def start_anim(event):
- gobject.idle_add(update_line)
- canvas.mpl_disconnect(start_anim.cid)
 
-start_anim.cid = canvas.mpl_connect('draw_event', start_anim)
-
-
-
 plt.show()
Modified: branches/v1_0_maint/examples/animation/animation_blit_gtk2.py
===================================================================
--- branches/v1_0_maint/examples/animation/animation_blit_gtk2.py	2011年01月03日 19:00:11 UTC (rev 8875)
+++ branches/v1_0_maint/examples/animation/animation_blit_gtk2.py	2011年01月03日 20:34:57 UTC (rev 8876)
@@ -20,9 +20,9 @@
 
 class UpdateLine(object):
 def get_bg_bbox(self):
- 
+
 return self.ax.bbox.padded(-3)
- 
+
 def __init__(self, canvas, ax):
 self.cnt = 0
 self.canvas = canvas
@@ -31,8 +31,8 @@
 self.prev_time = time.time()
 self.start_time = self.prev_time
 self.prev_pixel_offset = 0.
- 
 
+
 self.x0 = 0
 self.phases = np.random.random_sample((20,)) * np.pi * 2
 self.line, = ax.plot([], [], "-", animated=True, lw=2)
@@ -70,7 +70,7 @@
 # restore the clean slate background
 self.canvas.restore_region(self.background1)
 
- # restore subregion (x1+dx, y1, x2, y2) of the second bg 
+ # restore subregion (x1+dx, y1, x2, y2) of the second bg
 # in a offset position (x1-dx, y1)
 x1, y1, x2, y2 = self.background2.get_extents()
 self.canvas.restore_region(self.background2,
@@ -82,18 +82,18 @@
 def on_draw(self, *args):
 self.save_bg()
 return False
- 
+
 def update_line(self, *args):
 
 if self.background1 is None:
 return True
- 
+
 cur_time = time.time()
 pixel_offset = int((cur_time - self.start_time)*100.)
 dx_pixel = pixel_offset - self.prev_pixel_offset
 self.prev_pixel_offset = pixel_offset
 dx_data = self.get_dx_data(dx_pixel) #cur_time - self.prev_time)
- 
+
 x0 = self.x0
 self.x0 += dx_data
 self.prev_time = cur_time
@@ -109,7 +109,7 @@
 
 self.line.set_color(self.color_cycle.next())
 
- # now plot line segment within [x0, x0+dx_data], 
+ # now plot line segment within [x0, x0+dx_data],
 # Note that we're only plotting a line between [x0, x0+dx_data].
 xx = np.array([x0, self.x0])
 self.line.set_xdata(xx)
Modified: branches/v1_0_maint/lib/pytz/__init__.py
===================================================================
--- branches/v1_0_maint/lib/pytz/__init__.py	2011年01月03日 19:00:11 UTC (rev 8875)
+++ branches/v1_0_maint/lib/pytz/__init__.py	2011年01月03日 20:34:57 UTC (rev 8876)
@@ -9,7 +9,7 @@
 '''
 
 # The Olson database is updated several times a year.
-OLSON_VERSION = '2010h'
+OLSON_VERSION = '2010o'
 VERSION = OLSON_VERSION
 # Version format for a patch release - only one so far.
 #VERSION = OLSON_VERSION + '.2'
@@ -358,7 +358,7 @@
 return FixedOffset, (self._minutes, )
 
 def dst(self, dt):
- return None
+ return ZERO
 
 def tzname(self, dt):
 return None
@@ -387,12 +387,16 @@
 pytz.FixedOffset(-330)
 >>> one.utcoffset(datetime.datetime.now())
 datetime.timedelta(-1, 66600)
+ >>> one.dst(datetime.datetime.now())
+ datetime.timedelta(0)
 
 >>> two = FixedOffset(1380)
 >>> two
 pytz.FixedOffset(1380)
 >>> two.utcoffset(datetime.datetime.now())
 datetime.timedelta(0, 82800)
+ >>> two.dst(datetime.datetime.now())
+ datetime.timedelta(0)
 
 The datetime.timedelta must be between the range of -1 and 1 day,
 non-inclusive.
@@ -530,6 +534,7 @@
 'America/Atikokan',
 'America/Atka',
 'America/Bahia',
+ 'America/Bahia_Banderas',
 'America/Barbados',
 'America/Belem',
 'America/Belize',
@@ -956,6 +961,7 @@
 'Pacific/Apia',
 'Pacific/Auckland',
 'Pacific/Chatham',
+ 'Pacific/Chuuk',
 'Pacific/Easter',
 'Pacific/Efate',
 'Pacific/Enderbury',
@@ -981,6 +987,7 @@
 'Pacific/Pago_Pago',
 'Pacific/Palau',
 'Pacific/Pitcairn',
+ 'Pacific/Pohnpei',
 'Pacific/Ponape',
 'Pacific/Port_Moresby',
 'Pacific/Rarotonga',
@@ -1095,6 +1102,7 @@
 'America/Asuncion',
 'America/Atikokan',
 'America/Bahia',
+ 'America/Bahia_Banderas',
 'America/Barbados',
 'America/Belem',
 'America/Belize',
@@ -1155,6 +1163,7 @@
 'America/Maceio',
 'America/Managua',
 'America/Manaus',
+ 'America/Marigot',
 'America/Martinique',
 'America/Matamoros',
 'America/Mazatlan',
@@ -1195,6 +1204,8 @@
 'America/Santo_Domingo',
 'America/Sao_Paulo',
 'America/Scoresbysund',
+ 'America/Shiprock',
+ 'America/St_Barthelemy',
 'America/St_Johns',
 'America/St_Kitts',
 'America/St_Lucia',
@@ -1220,8 +1231,10 @@
 'Antarctica/McMurdo',
 'Antarctica/Palmer',
 'Antarctica/Rothera',
+ 'Antarctica/South_Pole',
 'Antarctica/Syowa',
 'Antarctica/Vostok',
+ 'Arctic/Longyearbyen',
 'Asia/Aden',
 'Asia/Almaty',
 'Asia/Amman',
@@ -1331,6 +1344,7 @@
 'Europe/Athens',
 'Europe/Belgrade',
 'Europe/Berlin',
+ 'Europe/Bratislava',
 'Europe/Brussels',
 'Europe/Bucharest',
 'Europe/Budapest',
@@ -1338,35 +1352,46 @@
 'Europe/Copenhagen',
 'Europe/Dublin',
 'Europe/Gibraltar',
+ 'Europe/Guernsey',
 'Europe/Helsinki',
+ 'Europe/Isle_of_Man',
 'Europe/Istanbul',
+ 'Europe/Jersey',
 'Europe/Kaliningrad',
 'Europe/Kiev',
 'Europe/Lisbon',
+ 'Europe/Ljubljana',
 'Europe/London',
 'Europe/Luxembourg',
 'Europe/Madrid',
 'Europe/Malta',
+ 'Europe/Mariehamn',
 'Europe/Minsk',
 'Europe/Monaco',
 'Europe/Moscow',
 'Europe/Oslo',
 'Europe/Paris',
+ 'Europe/Podgorica',
 'Europe/Prague',
 'Europe/Riga',
 'Europe/Rome',
 'Europe/Samara',
+ 'Europe/San_Marino',
+ 'Europe/Sarajevo',
 'Europe/Simferopol',
+ 'Europe/Skopje',
 'Europe/Sofia',
 'Europe/Stockholm',
 'Europe/Tallinn',
 'Europe/Tirane',
 'Europe/Uzhgorod',
 'Europe/Vaduz',
+ 'Europe/Vatican',
 'Europe/Vienna',
 'Europe/Vilnius',
 'Europe/Volgograd',
 'Europe/Warsaw',
+ 'Europe/Zagreb',
 'Europe/Zaporozhye',
 'Europe/Zurich',
 'GMT',
@@ -1384,6 +1409,7 @@
 'Pacific/Apia',
 'Pacific/Auckland',
 'Pacific/Chatham',
+ 'Pacific/Chuuk',
 'Pacific/Easter',
 'Pacific/Efate',
 'Pacific/Enderbury',
@@ -1409,14 +1435,13 @@
 'Pacific/Pago_Pago',
 'Pacific/Palau',
 'Pacific/Pitcairn',
- 'Pacific/Ponape',
+ 'Pacific/Pohnpei',
 'Pacific/Port_Moresby',
 'Pacific/Rarotonga',
 'Pacific/Saipan',
 'Pacific/Tahiti',
 'Pacific/Tarawa',
 'Pacific/Tongatapu',
- 'Pacific/Truk',
 'Pacific/Wake',
 'Pacific/Wallis',
 'US/Alaska',
Modified: branches/v1_0_maint/lib/pytz/tests/test_tzinfo.py
===================================================================
--- branches/v1_0_maint/lib/pytz/tests/test_tzinfo.py	2011年01月03日 19:00:11 UTC (rev 8875)
+++ branches/v1_0_maint/lib/pytz/tests/test_tzinfo.py	2011年01月03日 20:34:57 UTC (rev 8876)
@@ -16,7 +16,7 @@
 
 # I test for expected version to ensure the correct version of pytz is
 # actually being tested.
-EXPECTED_VERSION='2010h'
+EXPECTED_VERSION='2010o'
 
 fmt = '%Y-%m-%d %H:%M:%S %Z%z'
 
@@ -44,6 +44,7 @@
 dt.hour, dt.minute, dt.second,
 dt.tzname(), offset)
 
+
 class BasicTest(unittest.TestCase):
 
 def testVersion(self):
@@ -643,6 +644,28 @@
 '2004-10-31 02:00:00 CET+0100'
 )
 
+
+class CommonTimezonesTestCase(unittest.TestCase):
+ def test_bratislava(self):
+ # Bratislava is the default timezone for Slovakia, but our
+ # heuristics where not adding it to common_timezones. Ideally,
+ # common_timezones should be populated from zone.tab at runtime,
+ # but I'm hesitant to pay the startup cost as loading the list
+ # on demand whilst remaining backwards compatible seems
+ # difficult.
+ self.failUnless('Europe/Bratislava' in pytz.common_timezones)
+ self.failUnless('Europe/Bratislava' in pytz.common_timezones_set)
+
+ def test_us_eastern(self):
+ self.failUnless('US/Eastern' in pytz.common_timezones)
+ self.failUnless('US/Eastern' in pytz.common_timezones_set)
+
+ def test_belfast(self):
+ # Belfast uses London time.
+ self.failUnless('Europe/Belfast' in pytz.all_timezones_set)
+ self.failIf('Europe/Belfast' in pytz.common_timezones)
+ self.failIf('Europe/Belfast' in pytz.common_timezones_set)
+
 def test_suite():
 suite = unittest.TestSuite()
 suite.addTest(doctest.DocTestSuite('pytz'))
@@ -651,6 +674,7 @@
 suite.addTest(unittest.defaultTestLoader.loadTestsFromModule(test_tzinfo))
 return suite
 
+
 if __name__ == '__main__':
 unittest.main(defaultTest='test_suite')
 
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Bamako
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Cairo
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Casablanca
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Conakry
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Dar_es_Salaam
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Kampala
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Mogadishu
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Nairobi
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Nouakchott
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Africa/Timbuktu
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Catamarca
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/ComodRivadavia
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Cordoba
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Jujuy
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/La_Rioja
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Mendoza
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Rio_Gallegos
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Salta
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/San_Juan
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/San_Luis
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Tucuman
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Argentina/Ushuaia
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Asuncion
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Cambridge_Bay
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Cancun
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Caracas
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Catamarca
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Chicago
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Chihuahua
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Cordoba
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Goose_Bay
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Hermosillo
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Indiana/Knox
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Indiana/Tell_City
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Iqaluit
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Jujuy
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Knox_IN
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Managua
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Mazatlan
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Mendoza
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Menominee
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Merida
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Montevideo
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Ojinaga
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Pangnirtung
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Rankin_Inlet
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/Rosario
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/America/St_Johns
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Antarctica/Casey
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Aqtau
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Colombo
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Dili
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Gaza
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Harbin
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Ho_Chi_Minh
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Hong_Kong
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Irkutsk
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Jayapura
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Jerusalem
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Krasnoyarsk
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Magadan
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Makassar
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Manila
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Omsk
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Phnom_Penh
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Pyongyang
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Riyadh87
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Riyadh88
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Riyadh89
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Saigon
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Seoul
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Taipei
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Tbilisi
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Tehran
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Tel_Aviv
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Ujung_Pandang
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Vientiane
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Vladivostok
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Asia/Yakutsk
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Atlantic/Stanley
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Canada/Newfoundland
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Egypt
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Europe/Helsinki
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Europe/Mariehamn
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Europe/Moscow
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Hongkong
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Iran
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Israel
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Mexico/BajaSur
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Mideast/Riyadh87
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Mideast/Riyadh88
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Mideast/Riyadh89
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Apia
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Fiji
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Kosrae
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Truk
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/Pacific/Yap
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/ROC
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/ROK
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/US/Central
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/US/Indiana-Starke
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/W-SU
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/localtime
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/pytz/zoneinfo/zone.tab
===================================================================
--- branches/v1_0_maint/lib/pytz/zoneinfo/zone.tab	2011年01月03日 19:00:11 UTC (rev 8875)
+++ branches/v1_0_maint/lib/pytz/zoneinfo/zone.tab	2011年01月03日 20:34:57 UTC (rev 8876)
@@ -1,5 +1,5 @@
 # <pre>
-# @(#)zone.tab	8.35
+# @(#)zone.tab	8.38
 # This file is in the public domain, so clarified as of
 # 2009年05月17日 by Arthur David Olson.
 #
@@ -41,7 +41,7 @@
 AQ	-6736+06253	Antarctica/Mawson	Mawson Station, Holme Bay
 AQ	-6835+07758	Antarctica/Davis	Davis Station, Vestfold Hills
 AQ	-6617+11031	Antarctica/Casey	Casey Station, Bailey Peninsula
-AQ	-7824+10654	Antarctica/Vostok	Vostok Station, S Magnetic Pole
+AQ	-7824+10654	Antarctica/Vostok	Vostok Station, Lake Vostok
 AQ	-6640+14001	Antarctica/DumontDUrville	Dumont-d'Urville Station, Terre Adelie
 AQ	-690022+0393524	Antarctica/Syowa	Syowa Station, E Ongul I
 AQ	-5430+15857	Antarctica/Macquarie	Macquarie Island Station, Macquarie Island
@@ -177,8 +177,8 @@
 FI	+6010+02458	Europe/Helsinki
 FJ	-1808+17825	Pacific/Fiji
 FK	-5142-05751	Atlantic/Stanley
-FM	+0725+15147	Pacific/Truk	Truk (Chuuk) and Yap
-FM	+0658+15813	Pacific/Ponape	Ponape (Pohnpei)
+FM	+0725+15147	Pacific/Chuuk	Chuuk (Truk) and Yap
+FM	+0658+15813	Pacific/Pohnpei	Pohnpei (Ponape)
 FM	+0519+16259	Pacific/Kosrae	Kosrae
 FO	+6201-00646	Atlantic/Faroe
 FR	+4852+00220	Europe/Paris
@@ -288,6 +288,7 @@
 MX	+2904-11058	America/Hermosillo	Mountain Standard Time - Sonora
 MX	+3232-11701	America/Tijuana	US Pacific Time - Baja California near US border
 MX	+3018-11452	America/Santa_Isabel	Mexican Pacific Time - Baja California away from US border
+MX	+2048-10515	America/Bahia_Banderas	Mexican Central Time - Bahia de Banderas
 MY	+0310+10142	Asia/Kuala_Lumpur	peninsular Malaysia
 MY	+0133+11020	Asia/Kuching	Sabah & Sarawak
 MZ	-2558+03235	Africa/Maputo
Modified: branches/v1_0_maint/src/_gtkagg.cpp
===================================================================
--- branches/v1_0_maint/src/_gtkagg.cpp	2011年01月03日 19:00:11 UTC (rev 8875)
+++ branches/v1_0_maint/src/_gtkagg.cpp	2011年01月03日 20:34:57 UTC (rev 8876)
@@ -136,6 +136,7 @@
 {
 init_pygobject();
 init_pygtk();
+
 import_array();
 //suppress unused warning by creating in two lines
 static _gtkagg_module* _gtkagg = NULL;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2011年01月05日 13:31:30
Revision: 8886
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8886&view=rev
Author: mdehoon
Date: 2011年01月05日 13:31:24 +0000 (2011年1月05日)
Log Message:
-----------
Replace MacOS.WMAvailable, as the MacOS module is not available with 64-bit Pythons, and deprecated for Python 3.
Modified Paths:
--------------
 branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py
 branches/v1_0_maint/src/_macosx.m
Modified: branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py	2011年01月04日 22:43:44 UTC (rev 8885)
+++ branches/v1_0_maint/lib/matplotlib/backends/backend_macosx.py	2011年01月05日 13:31:24 UTC (rev 8886)
@@ -2,7 +2,6 @@
 
 import os
 import numpy
-import MacOS
 
 from matplotlib._pylab_helpers import Gcf
 from matplotlib.backend_bases import RendererBase, GraphicsContextBase,\
@@ -229,7 +228,7 @@
 """
 Create a new figure manager instance
 """
- if not MacOS.WMAvailable():
+ if not _macosx.verify_main_display():
 import warnings
 warnings.warn("Python is not installed as a framework. The MacOSX backend may not work correctly if Python is not installed as a framework. Please see the Python documentation for more information on installing Python as a framework on Mac OS X")
 FigureClass = kwargs.pop('FigureClass', Figure)
Modified: branches/v1_0_maint/src/_macosx.m
===================================================================
--- branches/v1_0_maint/src/_macosx.m	2011年01月04日 22:43:44 UTC (rev 8885)
+++ branches/v1_0_maint/src/_macosx.m	2011年01月05日 13:31:24 UTC (rev 8886)
@@ -4399,16 +4399,6 @@
 return Py_None;
 }
 
-static char show__doc__[] = "Show all the figures and enter the main loop.\nThis function does not return until all Matplotlib windows are closed,\nand is normally not needed in interactive sessions.";
-
-static PyObject*
-show(PyObject* self)
-{
- if(nwin > 0) [NSApp run];
- Py_INCREF(Py_None);
- return Py_None;
-}
-
 @implementation Window
 - (Window*)initWithContentRect:(NSRect)rect styleMask:(unsigned int)mask backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation withManager: (PyObject*)theManager
 {
@@ -5139,11 +5129,32 @@
 }
 @end
 
+
+static PyObject*
+show(PyObject* self)
+{
+ if(nwin > 0) [NSApp run];
+ Py_INCREF(Py_None);
+ return Py_None;
+}
+
+static PyObject*
+verify_main_display(PyObject* self)
+{
+ CGDirectDisplayID display = CGMainDisplayID();
+ if (display == 0) {
+ PyErr_SetString(PyExc_RuntimeError, "Failed to obtain the display ID of the main display");
+ return NULL;
+ }
+ Py_INCREF(Py_True);
+ return Py_True;
+}
+
 static struct PyMethodDef methods[] = {
 {"show",
 (PyCFunction)show,
 METH_NOARGS,
- show__doc__
+ "Show all the figures and enter the main loop.\nThis function does not return until all Matplotlib windows are closed,\nand is normally not needed in interactive sessions."
 },
 {"choose_save_file",
 (PyCFunction)choose_save_file,
@@ -5155,11 +5166,17 @@
 METH_VARARGS,
 "Sets the active cursor."
 },
+ {"verify_main_display",
+ (PyCFunction)verify_main_display,
+ METH_NOARGS,
+ "Verifies if the main display can be found. This function fails if Python is not built as a framework."
+ },
 {NULL, NULL, 0, NULL}/* sentinel */
 };
 
 void init_macosx(void)
 { PyObject *m;
+
 import_array();
 
 if (PyType_Ready(&GraphicsContextType) < 0) return;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2011年01月05日 15:59:40
Revision: 8889
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8889&view=rev
Author: jdh2358
Date: 2011年01月05日 15:59:33 +0000 (2011年1月05日)
Log Message:
-----------
fix rc file defaults issue for docs; python 2.4 compliance for formlayout
Modified Paths:
--------------
 branches/v1_0_maint/doc/matplotlibrc
 branches/v1_0_maint/lib/matplotlib/__init__.py
 branches/v1_0_maint/lib/matplotlib/backends/qt4_editor/formlayout.py
Modified: branches/v1_0_maint/doc/matplotlibrc
===================================================================
--- branches/v1_0_maint/doc/matplotlibrc	2011年01月05日 15:43:30 UTC (rev 8888)
+++ branches/v1_0_maint/doc/matplotlibrc	2011年01月05日 15:59:33 UTC (rev 8889)
@@ -232,7 +232,7 @@
 
 ### FIGURE
 # See http://matplotlib.sourceforge.net/matplotlib.figure.html#Figure
-figure.figsize : 6, 4 # figure size in inches
+figure.figsize : 5.5, 4.5 # figure size in inches
 #figure.dpi : 80 # figure dots per inch
 #figure.facecolor : 0.75 # figure facecolor; 0.75 is scalar gray
 #figure.edgecolor : white # figure edgecolor
Modified: branches/v1_0_maint/lib/matplotlib/__init__.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月05日 15:43:30 UTC (rev 8888)
+++ branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月05日 15:59:33 UTC (rev 8889)
@@ -762,6 +762,7 @@
 
 # this is the instance used by the matplotlib classes
 rcParams = rc_params()
+rcParamsOrig = rcParams.copy()
 
 rcParamsDefault = RcParams([ (key, default) for key, (default, converter) in \
 defaultParams.iteritems() ])
@@ -843,11 +844,19 @@
 
 def rcdefaults():
 """
- Restore the default rc params - the ones that were created at
- matplotlib load time.
+ Restore the default rc params - these are not the params loaded by
+ the rc file, but mpl's internal params. See rc_file_defaults for
+ reloading the default params from the rc file
 """
 rcParams.update(rcParamsDefault)
 
+def rc_file_defaults():
+ """
+ Restore the default rc params from the original matplotlib rc that
+ was loaded
+ """
+ rcParams.update(rcParamsOrig)
+
 _use_error_msg = """ This call to matplotlib.use() has no effect
 because the the backend has already been chosen;
 matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
Modified: branches/v1_0_maint/lib/matplotlib/backends/qt4_editor/formlayout.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/backends/qt4_editor/formlayout.py	2011年01月05日 15:43:30 UTC (rev 8888)
+++ branches/v1_0_maint/lib/matplotlib/backends/qt4_editor/formlayout.py	2011年01月05日 15:59:33 UTC (rev 8889)
@@ -272,7 +272,11 @@
 field.setCurrentIndex(selindex)
 elif isinstance(value, bool):
 field = QCheckBox(self)
- field.setCheckState(Qt.Checked if value else Qt.Unchecked)
+ if value:
+ field.setCheckState(Qt.Checked)
+ else:
+ field.setCheckedState(Qt.Unchecked)
+ 
 elif isinstance(value, float):
 field = QLineEdit(repr(value), self)
 elif isinstance(value, int):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2011年01月05日 22:04:53
Revision: 8893
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8893&view=rev
Author: jdh2358
Date: 2011年01月05日 22:04:47 +0000 (2011年1月05日)
Log Message:
-----------
bumpt the rc version num
Modified Paths:
--------------
 branches/v1_0_maint/doc/pyplots/tex_demo.png
 branches/v1_0_maint/lib/matplotlib/__init__.py
Modified: branches/v1_0_maint/doc/pyplots/tex_demo.png
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/__init__.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月05日 18:14:36 UTC (rev 8892)
+++ branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月05日 22:04:47 UTC (rev 8893)
@@ -99,7 +99,7 @@
 """
 from __future__ import generators
 
-__version__ = '1.0.1rc1'
+__version__ = '1.0.1rc2'
 __revision__ = '$Revision$'
 __date__ = '$Date$'
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2011年01月06日 13:50:13
Revision: 8897
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8897&view=rev
Author: jdh2358
Date: 2011年01月06日 13:50:07 +0000 (2011年1月06日)
Log Message:
-----------
tag 1.0.1 for release
Modified Paths:
--------------
 branches/v1_0_maint/CHANGELOG
 branches/v1_0_maint/doc/api/gridspec_api.rst
 branches/v1_0_maint/doc/pyplots/tex_demo.png
 branches/v1_0_maint/lib/matplotlib/__init__.py
Modified: branches/v1_0_maint/CHANGELOG
===================================================================
--- branches/v1_0_maint/CHANGELOG	2011年01月06日 01:26:35 UTC (rev 8896)
+++ branches/v1_0_maint/CHANGELOG	2011年01月06日 13:50:07 UTC (rev 8897)
@@ -1,3 +1,5 @@
+2011年01月04日 Tag 1.0.1 for release at r8896
+
 2010年11月22日 Fixed error with Hammer projection. - BVR
 
 2010年11月12日 Fixed the placement and angle of axis labels in 3D plots. - BVR
@@ -3,5 +5,5 @@
 
 2010年11月07日 New rc parameters examples.download and examples.directory
- allow bypassing the download mechanism in get_sample_data. 
+ allow bypassing the download mechanism in get_sample_data.
 - JKS
 
Modified: branches/v1_0_maint/doc/api/gridspec_api.rst
===================================================================
--- branches/v1_0_maint/doc/api/gridspec_api.rst	2011年01月06日 01:26:35 UTC (rev 8896)
+++ branches/v1_0_maint/doc/api/gridspec_api.rst	2011年01月06日 13:50:07 UTC (rev 8897)
@@ -1,6 +1,6 @@
-*************
+*******************
 matplotlib gridspec
-*************
+*******************
 
 
 :mod:`matplotlib.gridspec`
Modified: branches/v1_0_maint/doc/pyplots/tex_demo.png
===================================================================
(Binary files differ)
Modified: branches/v1_0_maint/lib/matplotlib/__init__.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月06日 01:26:35 UTC (rev 8896)
+++ branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月06日 13:50:07 UTC (rev 8897)
@@ -99,7 +99,7 @@
 """
 from __future__ import generators
 
-__version__ = '1.0.1rc2'
+__version__ = '1.0.1'
 __revision__ = '$Revision$'
 __date__ = '$Date$'
 
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <jd...@us...> - 2011年01月06日 19:42:14
Revision: 8899
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8899&view=rev
Author: jdh2358
Date: 2011年01月06日 19:42:08 +0000 (2011年1月06日)
Log Message:
-----------
support relative paths in examples.directory
Modified Paths:
--------------
 branches/v1_0_maint/doc/matplotlibrc
 branches/v1_0_maint/lib/matplotlib/__init__.py
Modified: branches/v1_0_maint/doc/matplotlibrc
===================================================================
--- branches/v1_0_maint/doc/matplotlibrc	2011年01月06日 13:57:51 UTC (rev 8898)
+++ branches/v1_0_maint/doc/matplotlibrc	2011年01月06日 19:42:08 UTC (rev 8899)
@@ -8,6 +8,8 @@
 # w/o invoking file downloads for the sampledata (see
 # matplotlib.cbook.get_sample_data. Unpack
 # mpl_sampledata-VERSION.tar.gz and point examples.directory to it.
+# You can use a relative path for examples.directory and it must be
+# relative to this matplotlibrc file
 
 #examples.download : False # False to bypass downloading mechanism
-#examples.directory : /home/titan/johnh/python/svn/matplotlib.trunk/sample_data/ # directory to look in if download is false
+#examples.directory : /your/path/to/sample_data/ # directory to look in if download is false
Modified: branches/v1_0_maint/lib/matplotlib/__init__.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月06日 13:57:51 UTC (rev 8898)
+++ branches/v1_0_maint/lib/matplotlib/__init__.py	2011年01月06日 19:42:08 UTC (rev 8899)
@@ -762,6 +762,21 @@
 
 # this is the instance used by the matplotlib classes
 rcParams = rc_params()
+
+if rcParams['examples.directory']:
+ # paths that are intended to be relative to matplotlib_fname()
+ # are allowed for the examples.directory parameter.
+ # However, we will need to fully qualify the path because
+ # Sphinx requires absolute paths.
+ if not os.path.isabs(rcParams['examples.directory']):
+ _basedir, _fname = os.path.split(matplotlib_fname())
+ # Sometimes matplotlib_fname() can return relative paths,
+ # Also, using realpath() guarentees that Sphinx will use
+ # the same path that matplotlib sees (in case of weird symlinks).
+ _basedir = os.path.realpath(_basedir)
+ _fullpath = os.path.join(_basedir, rcParams['examples.directory'])
+ rcParams['examples.directory'] = _fullpath
+
 rcParamsOrig = rcParams.copy()
 
 rcParamsDefault = RcParams([ (key, default) for key, (default, converter) in \
@@ -770,6 +785,8 @@
 rcParams['ps.usedistiller'] = checkdep_ps_distiller(rcParams['ps.usedistiller'])
 rcParams['text.usetex'] = checkdep_usetex(rcParams['text.usetex'])
 
+
+
 def rc(group, **kwargs):
 """
 Set the current rc params. Group is the grouping for the rc, eg.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
From: <md...@us...> - 2011年02月01日 16:03:01
Revision: 8939
 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8939&view=rev
Author: mdboom
Date: 2011年02月01日 16:02:54 +0000 (2011年2月01日)
Log Message:
-----------
[3167200] Use from PIL import Image
Modified Paths:
--------------
 branches/v1_0_maint/examples/pylab_examples/image_demo3.py
 branches/v1_0_maint/examples/pylab_examples/to_numeric.py
 branches/v1_0_maint/examples/user_interfaces/histogram_demo_canvasagg.py
 branches/v1_0_maint/lib/matplotlib/image.py
Modified: branches/v1_0_maint/examples/pylab_examples/image_demo3.py
===================================================================
--- branches/v1_0_maint/examples/pylab_examples/image_demo3.py	2011年02月01日 04:15:20 UTC (rev 8938)
+++ branches/v1_0_maint/examples/pylab_examples/image_demo3.py	2011年02月01日 16:02:54 UTC (rev 8939)
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 from pylab import *
 try:
- import Image
+ from PIL import Image
 except ImportError, exc:
 raise SystemExit("PIL must be installed to run this example")
 
Modified: branches/v1_0_maint/examples/pylab_examples/to_numeric.py
===================================================================
--- branches/v1_0_maint/examples/pylab_examples/to_numeric.py	2011年02月01日 04:15:20 UTC (rev 8938)
+++ branches/v1_0_maint/examples/pylab_examples/to_numeric.py	2011年02月01日 16:02:54 UTC (rev 8939)
@@ -8,7 +8,7 @@
 from pylab import *
 from matplotlib.backends.backend_agg import FigureCanvasAgg
 try:
- import Image
+ from PIL import Image
 except ImportError, exc:
 raise SystemExit("PIL must be installed to run this example")
 
Modified: branches/v1_0_maint/examples/user_interfaces/histogram_demo_canvasagg.py
===================================================================
--- branches/v1_0_maint/examples/user_interfaces/histogram_demo_canvasagg.py	2011年02月01日 04:15:20 UTC (rev 8938)
+++ branches/v1_0_maint/examples/user_interfaces/histogram_demo_canvasagg.py	2011年02月01日 16:02:54 UTC (rev 8939)
@@ -54,7 +54,7 @@
 
 if 0:
 # pass off to PIL
- import Image
+ from PIL import Image
 im = Image.fromstring( "RGB", (w,h), s)
 im.show()
 
Modified: branches/v1_0_maint/lib/matplotlib/image.py
===================================================================
--- branches/v1_0_maint/lib/matplotlib/image.py	2011年02月01日 04:15:20 UTC (rev 8938)
+++ branches/v1_0_maint/lib/matplotlib/image.py	2011年02月01日 16:02:54 UTC (rev 8939)
@@ -1157,7 +1157,7 @@
 
 def pilread():
 'try to load the image with PIL or return None'
- try: import Image
+ try: from PIL import Image
 except ImportError: return None
 image = Image.open( fname )
 return pil_to_array(image)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
1 2 > >> (Page 1 of 2)
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 によって変換されたページ (->オリジナル) /