# Rectangle Selector¶

Do a mouseclick somewhere, move the mouse to some destination, release the button. This class gives click- and release-events and also draws a line or a box from the click-point to the actual mouseposition (within the same axes) until the button is released. Within the method self.ignore() it is checked whether the button from eventpress and eventrelease are the same.

from matplotlib.widgets import RectangleSelector
import numpy as np
import matplotlib.pyplot as plt

def line_select_callback(eclick, erelease):
"""
Callback for line selection.

*eclick* and *erelease* are the press and release events.
"""
x1, y1 = eclick.xdata, eclick.ydata
x2, y2 = erelease.xdata, erelease.ydata
print(f"({x1:3.2f}, {y1:3.2f}) --> ({x2:3.2f}, {y2:3.2f})")
print(f" The buttons you used were: {eclick.button} {erelease.button}")

def toggle_selector(event):
print(' Key pressed.')
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, 10, N)

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,
drawtype='box', useblit=True,
button=[1, 3],  # disable middle button
minspanx=5, minspany=5,
spancoords='pixels',
interactive=True)
fig.canvas.mpl_connect('key_press_event', toggle_selector)
plt.show()


## References¶

The use of the following functions, methods, classes and modules is shown in this example:

import matplotlib
matplotlib.widgets.RectangleSelector


Keywords: matplotlib code example, codex, python plot, pyplot Gallery generated by Sphinx-Gallery