forked from matplotlib/matplotlib
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrectangle_selector.py
More file actions
59 lines (48 loc) · 2 KB
/
Copy pathrectangle_selector.py
File metadata and controls
59 lines (48 loc) · 2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
"""
==================
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()