From f2886583e43fc6e7d41f651033b89aef63a85f0a Mon Sep 17 00:00:00 2001 From: Antony Lee Date: Thu, 21 May 2020 13:34:11 +0200 Subject: [PATCH] Cleanup RectangleSelector example. - Don't use "q" or "a" as keys given that they are already mapped to "quit" and "all_axes" (even though the latter is deprecated). - Document the interactivity directly as the axes title. - No need to plot too many things in the axes; they're irrelevant. --- examples/widgets/rectangle_selector.py | 24 +++++++++---------- lib/matplotlib/widgets.py | 32 +++----------------------- 2 files changed, 15 insertions(+), 41 deletions(-) diff --git a/examples/widgets/rectangle_selector.py b/examples/widgets/rectangle_selector.py index b70d8c3aabb6..0b38bebf88bd 100644 --- a/examples/widgets/rectangle_selector.py +++ b/examples/widgets/rectangle_selector.py @@ -30,23 +30,23 @@ def line_select_callback(eclick, erelease): def toggle_selector(event): print(' Key pressed.') - if event.key in ['Q', 'q'] and toggle_selector.RS.active: - print(' RectangleSelector deactivated.') - toggle_selector.RS.set_active(False) - if event.key in ['A', 'a'] and not toggle_selector.RS.active: - print(' RectangleSelector activated.') - toggle_selector.RS.set_active(True) + if event.key == 't': + if toggle_selector.RS.active: + print(' RectangleSelector deactivated.') + toggle_selector.RS.set_active(False) + else: + print(' RectangleSelector activated.') + toggle_selector.RS.set_active(True) fig, ax = plt.subplots() N = 100000 # If N is large one can see improvement by using blitting. -x = np.linspace(0.0, 10.0, N) +x = np.linspace(0, 10, N) -ax.plot(x, +np.sin(.2*np.pi*x), lw=3.5, c='b', alpha=.7) # plot something -ax.plot(x, +np.cos(.2*np.pi*x), lw=3.5, c='r', alpha=.5) -ax.plot(x, -np.sin(.2*np.pi*x), lw=3.5, c='g', alpha=.3) - -print("\n click --> release") +ax.plot(x, np.sin(2*np.pi*x)) # plot something +ax.set_title( + "Click and drag to draw a rectangle.\n" + "Press 't' to toggle the selector on and off.") # drawtype is 'box' or 'line' or 'none' toggle_selector.RS = RectangleSelector(ax, line_select_callback, diff --git a/lib/matplotlib/widgets.py b/lib/matplotlib/widgets.py index cea3e3f03057..e6ebb5c5e487 100644 --- a/lib/matplotlib/widgets.py +++ b/lib/matplotlib/widgets.py @@ -1896,35 +1896,9 @@ class RectangleSelector(_SelectorWidget): For the cursor to remain responsive you must keep a reference to it. - Example usage:: - - import numpy as np - import matplotlib.pyplot as plt - from matplotlib.widgets import RectangleSelector - - def onselect(eclick, erelease): - "eclick and erelease are matplotlib events at press and release." - print('startposition: (%f, %f)' % (eclick.xdata, eclick.ydata)) - print('endposition : (%f, %f)' % (erelease.xdata, erelease.ydata)) - print('used button : ', eclick.button) - - def toggle_selector(event): - print('Key pressed.') - if event.key in ['Q', 'q'] and toggle_selector.RS.active: - print('RectangleSelector deactivated.') - toggle_selector.RS.set_active(False) - if event.key in ['A', 'a'] and not toggle_selector.RS.active: - print('RectangleSelector activated.') - toggle_selector.RS.set_active(True) - - x = np.arange(100.) / 99 - y = np.sin(x) - fig, ax = plt.subplots() - ax.plot(x, y) - - toggle_selector.RS = RectangleSelector(ax, onselect, drawtype='line') - fig.canvas.mpl_connect('key_press_event', toggle_selector) - plt.show() + Examples + -------- + :doc:`/gallery/widgets/rectangle_selector` """ _shape_klass = Rectangle