Revision: 5769
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5769&view=rev
Author: jdh2358
Date: 2008-07-14 08:14:02 -0700 (Mon, 14 Jul 2008)
Log Message:
-----------
added support for pixels or data min coords to the rectangle selector widget
Modified Paths:
--------------
trunk/matplotlib/doc/faq/howto_faq.rst
trunk/matplotlib/examples/widgets/rectangle_selector.py
trunk/matplotlib/lib/matplotlib/artist.py
trunk/matplotlib/lib/matplotlib/pyplot.py
trunk/matplotlib/lib/matplotlib/widgets.py
Modified: trunk/matplotlib/doc/faq/howto_faq.rst
===================================================================
--- trunk/matplotlib/doc/faq/howto_faq.rst 2008-07-14 12:54:59 UTC (rev
5768)
+++ trunk/matplotlib/doc/faq/howto_faq.rst 2008-07-14 15:14:02 UTC (rev
5769)
@@ -6,6 +6,33 @@
.. contents::
+
+.. _howto-findobj:
+
+How do I find all the objects in my figure of a certain type?
+=============================================================
+
+Every matplotlib artist (see :ref:`artist-tutorial`) has a method
+called :meth:`~matplotlib.artist.Artist.findobj` that can be used to
+recursively search the artist for any artists it may contain that meet
+some criteria (eg match all :class:`~matplotlib.lines.Line2D`
+instances or match some arbitrary filter function). For example, the
+following snippet finds every object in the figure which has a
+`set_color` property and makes the object blue::
+
+ def myfunc(x):
+ return hasattr(x, 'set_color')
+
+ for o in fig.findobj(myfunc):
+ o.set_color('blue')
+
+You can also filter on class instances::
+
+ import matplotlib.text as text
+ for o in fig.findobj(text.Text):
+ o.set_fontstyle('italic')
+
+
.. _howto-transparent:
How do I save transparent figures?
Modified: trunk/matplotlib/examples/widgets/rectangle_selector.py
===================================================================
--- trunk/matplotlib/examples/widgets/rectangle_selector.py 2008-07-14
12:54:59 UTC (rev 5768)
+++ trunk/matplotlib/examples/widgets/rectangle_selector.py 2008-07-14
15:14:02 UTC (rev 5769)
@@ -29,5 +29,6 @@
# drawtype is 'box' or 'line' or 'none'
LS = RectangleSelector(current_ax, line_select_callback,
- drawtype='box',useblit=True)
+ drawtype='box',useblit=True,
+ minspanx=5,minspany=5,spancoords='pixels')
show()
Modified: trunk/matplotlib/lib/matplotlib/artist.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/artist.py 2008-07-14 12:54:59 UTC (rev
5768)
+++ trunk/matplotlib/lib/matplotlib/artist.py 2008-07-14 15:14:02 UTC (rev
5769)
@@ -510,6 +510,9 @@
def findobj(self, match=None):
"""
+ pyplot signature:
+ findobj(o=gcf(), match=None)
+
recursively find all :class:matplotlib.artist.Artist instances
contained in self
@@ -520,6 +523,8 @@
- function with signature ``boolean = match(artist)`` used to filter
matches
- class instance: eg Line2D. Only return artists of class type
+
+ .. plot:: ../mpl_examples/pylab_examples/findobj_demo.py
"""
if match is None: # always return True
Modified: trunk/matplotlib/lib/matplotlib/pyplot.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/pyplot.py 2008-07-14 12:54:59 UTC (rev
5768)
+++ trunk/matplotlib/lib/matplotlib/pyplot.py 2008-07-14 15:14:02 UTC (rev
5769)
@@ -7,7 +7,7 @@
from matplotlib.backend_bases import FigureCanvasBase
from matplotlib.image import imread as _imread
from matplotlib import rcParams, rcParamsDefault, get_backend
-from matplotlib.artist import getp, get
+from matplotlib.artist import getp, get, Artist
from matplotlib.artist import setp as _setp
from matplotlib.axes import Axes
from matplotlib.projections import PolarAxes
@@ -41,26 +41,11 @@
def findobj(o=None, match=None):
- """
- recursively find all :class:matplotlib.artist.Artist instances
- contained in artist instance *p*. if *o* is None, use
- current figure
-
- *match* can be
-
- - None: return all objects contained in artist (including artist)
-
- - function with signature ``boolean = match(artist)`` used to filter
matches
-
- - class instance: eg Line2D. Only return artists of class type
-
- """
-
if o is None:
o = gcf()
return o.findobj(match)
+findobj.__doc__ = Artist.findobj.__doc__
-
def switch_backend(newbackend):
"""
Switch the default backend to newbackend. This feature is
Modified: trunk/matplotlib/lib/matplotlib/widgets.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/widgets.py 2008-07-14 12:54:59 UTC (rev
5768)
+++ trunk/matplotlib/lib/matplotlib/widgets.py 2008-07-14 15:14:02 UTC (rev
5769)
@@ -979,7 +979,7 @@
"""
Select a min/max range of the x axes for a matplotlib Axes
- Example usage:
+ Example usage::
from matplotlib.widgets import RectangleSelector
from pylab import *
@@ -1011,7 +1011,7 @@
"""
def __init__(self, ax, onselect, drawtype='box',
minspanx=None, minspany=None, useblit=False,
- lineprops=None, rectprops=None):
+ lineprops=None, rectprops=None, spancoords='data'):
"""
Create a selector in ax. When a selection is made, clear
@@ -1035,7 +1035,12 @@
Use type if you want the mouse to draw a line, a box or nothing
between click and actual position ny setting
+
drawtype = 'line', drawtype='box' or drawtype = 'none'.
+
+ spancoords is one of 'data' or 'pixels'. If 'data', minspanx
+ and minspanx will be interpreted in the same coordinates as
+ the x and ya axis, if 'pixels', they are in pixels
"""
self.ax = ax
self.visible = True
@@ -1072,6 +1077,10 @@
self.useblit = useblit
self.minspanx = minspanx
self.minspany = minspany
+
+ assert(spancoords in ('data', 'pixels'))
+
+ self.spancoords = spancoords
self.drawtype = drawtype
# will save the data (position at mouseclick)
self.eventpress = None
@@ -1125,15 +1134,22 @@
self.canvas.draw()
# release coordinates, button, ...
self.eventrelease = event
- xmin, ymin = self.eventpress.xdata, self.eventpress.ydata
- xmax, ymax = self.eventrelease.xdata, self.eventrelease.ydata
- # calculate dimensions of box or line get values in the right
- # order
+
+ if self.spancoords=='data':
+ xmin, ymin = self.eventpress.xdata, self.eventpress.ydata
+ xmax, ymax = self.eventrelease.xdata, self.eventrelease.ydata
+ # calculate dimensions of box or line get values in the right
+ # order
+ elif self.spancoords=='pixels':
+ xmin, ymin = self.eventpress.x, self.eventpress.y
+ xmax, ymax = self.eventrelease.x, self.eventrelease.y
+ else:
+ raise ValueError('spancoords must be "data" or "pixels"')
+
+
if xmin>xmax: xmin, xmax = xmax, xmin
if ymin>ymax: ymin, ymax = ymax, ymin
-
-
spanx = xmax - xmin
spany = ymax - ymin
xproblems = self.minspanx is not None and spanx<self.minspanx
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins