From: <jd...@us...> - 2008-12-16 16:54:15
|
Revision: 6631 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6631&view=rev Author: jdh2358 Date: 2008-12-16 16:54:10 +0000 (Tue, 16 Dec 2008) Log Message: ----------- added markevery property to Line2D Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/doc/users/pyplot_tutorial.rst trunk/matplotlib/lib/matplotlib/lines.py trunk/matplotlib/unit/nose_tests.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2008-12-16 16:19:21 UTC (rev 6630) +++ trunk/matplotlib/CHANGELOG 2008-12-16 16:54:10 UTC (rev 6631) @@ -1,3 +1,6 @@ +2008-12-16 Added markevery property to Line2D to support subsampling + of markers - JDH + 2008-12-15 Removed mpl_data symlink in docs. On platforms that do not support symlinks, these become copies, and the font files are large, so the distro becomes unneccessarily bloaded. Modified: trunk/matplotlib/doc/users/pyplot_tutorial.rst =================================================================== --- trunk/matplotlib/doc/users/pyplot_tutorial.rst 2008-12-16 16:19:21 UTC (rev 6630) +++ trunk/matplotlib/doc/users/pyplot_tutorial.rst 2008-12-16 16:54:10 UTC (rev 6631) @@ -117,6 +117,7 @@ markeredgewidth or mew float value in points markerfacecolor or mfc any matplotlib color markersize or ms float +markevery None | integer | (startind, stride) picker used in interactive line selection pickradius the line pick selection radius solid_capstyle ['butt' | 'round' | 'projecting'] Modified: trunk/matplotlib/lib/matplotlib/lines.py =================================================================== --- trunk/matplotlib/lib/matplotlib/lines.py 2008-12-16 16:19:21 UTC (rev 6630) +++ trunk/matplotlib/lib/matplotlib/lines.py 2008-12-16 16:54:10 UTC (rev 6631) @@ -177,6 +177,7 @@ solid_joinstyle = None, pickradius = 5, drawstyle = None, + markevery = None, **kwargs ): """ @@ -226,6 +227,7 @@ self.set_linewidth(linewidth) self.set_color(color) self.set_marker(marker) + self.set_markevery(markevery) self.set_antialiased(antialiased) self.set_markersize(markersize) self._dashSeq = None @@ -320,6 +322,32 @@ """ self.pickradius = d + + def set_markevery(self, every): + """ + Set the markevery property to subsample the plot when using + markers. Eg if ``markevery=5``, every 5-th marker will be + plotted. *every* can be + + None + Every point will be plotted + + an integer N + Every N-th marker will be plotted starting with marker 0 + + A length-2 tuple of integers + every=(start, N) will start at point start and plot every N-th marker + + + ACCEPTS: None | integer | (startind, stride) + + """ + self._markevery = every + + def get_markevery(self): + 'return the markevery setting' + return self._markevery + def set_picker(self,p): """Sets the event picker details for the line. @@ -472,6 +500,19 @@ funcname = self._markers.get(self._marker, '_draw_nothing') if funcname != '_draw_nothing': tpath, affine = self._transformed_path.get_transformed_points_and_affine() + + # subsample the markers if markevery is not None + markevery = self.get_markevery() + if markevery is not None: + if iterable(markevery): + startind, stride = markevery + else: + startind, stride = 0, markevery + if tpath.codes is not None: + tpath.codes = tpath.codes[startind::stride] + tpath.vertices = tpath.vertices[startind::stride] + + markerFunc = getattr(self, funcname) markerFunc(renderer, gc, tpath, affine.frozen()) Modified: trunk/matplotlib/unit/nose_tests.py =================================================================== --- trunk/matplotlib/unit/nose_tests.py 2008-12-16 16:19:21 UTC (rev 6630) +++ trunk/matplotlib/unit/nose_tests.py 2008-12-16 16:54:10 UTC (rev 6631) @@ -1,3 +1,5 @@ +import numpy as np + import nose, nose.tools as nt import numpy.testing as nptest @@ -3,5 +5,4 @@ import matplotlib matplotlib.use('Agg') -import numpy as np import matplotlib.pyplot as plt import matplotlib.axes as maxes @@ -11,7 +12,32 @@ fig = plt.figure() ax = maxes.Subplot(fig, 1, 1, 1) fig.add_subplot(ax) + plt.close(fig) +def test_markevery(): + x, y = np.random.rand(2, 100) + + # check marker only plot + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot(x, y, 'o') + ax.plot(x, y, 'd', markevery=None) + ax.plot(x, y, 's', markevery=10) + ax.plot(x, y, '+', markevery=(5, 20)) + fig.canvas.draw() + plt.close(fig) + + # check line/marker combos + fig = plt.figure() + ax = fig.add_subplot(111) + ax.plot(x, y, '-o') + ax.plot(x, y, '-d', markevery=None) + ax.plot(x, y, '-s', markevery=10) + ax.plot(x, y, '-+', markevery=(5, 20)) + fig.canvas.draw() + plt.close(fig) + if __name__=='__main__': nose.runmodule(argv=['-s','--with-doctest'], exit=False) - pass + + plt.show() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |