8000 Merge pull request #2595 from Tillsten/patch-1 · matplotlib/matplotlib@4d244bb · GitHub
[go: up one dir, main page]

Skip to content

Commit 4d244bb

Browse files
committed
Merge pull request #2595 from Tillsten/patch-1
EHN: add a span_stays option to widget.SpanSelector
2 parents 673dbb8 + e1d75d3 commit 4d244bb

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

lib/matplotlib/widgets.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1044,7 +1044,7 @@ def onselect(vmin, vmax):
10441044
"""
10451045

10461046
def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
1047-
rectprops=None, onmove_callback=None):
1047+
rectprops=None, onmove_callback=None, span_stays=False):
10481048
"""
10491049
Create a span selector in *ax*. When a selection is made, clear
10501050
the span and call *onselect* with::
@@ -1062,6 +1062,9 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
10621062
10631063
Set the visible attribute to *False* if you want to turn off
10641064
the functionality of the span selector
1065+
1066+
If *span_stays* is True, the span stays visble after making
1067+
a valid selection.
10651068
"""
10661069
AxesWidget.__init__(self, ax)
10671070

@@ -1081,7 +1084,8 @@ def __init__(self, ax, onselect, direction, minspan=None, useblit=False,
10811084
self.onselect = onselect
10821085
self.onmove_callback = onmove_callback
10831086
self.minspan = minspan
1084-
1087+
self.span_stays = span_stays
1088+
10851089
# Needed when dragging out of axes
10861090
self.buttonDown = False
10871091
self.prev = (0, 0)
@@ -1116,7 +1120,13 @@ def new_axes(self, ax):
11161120
transform=trans,
11171121
visible=False,
11181122
**self.rectprops)
1119-
1123+
if self.span_stays:
1124+
self.stay_rect = Rectangle((0, 0), w, h,
1125+
transform=trans,
1126+
visible=False,
1127+
**self.rectprops)
1128+
self.ax.add_patch(self.stay_rect)
1129+
11201130
if not self.useblit:
11211131
self.ax.add_patch(self.rect)
11221132

@@ -1140,6 +1150,9 @@ def press(self, event):
11401150
self.buttonDown = True
11411151

11421152
self.rect.set_visible(self.visible)
1153+
if self.span_stays:
1154+
self.stay_rect.set_visible(False)
1155+
11431156
if self.direction == 'horizontal':
11441157
self.pressv = event.xdata
11451158
else:
@@ -1155,6 +1168,14 @@ def release(self, event):
11551168
self.buttonDown = False
11561169

11571170
self.rect.set_visible(False)
1171+
1172+
if self.span_stays:
1173+
self.stay_rect.set_x(self.rect.get_x())
1174+
self.stay_rect.set_y(self.rect.get_y())
1175+
self.stay_rect.set_width(self.rect.get_width())
1176+
self.stay_rect.set_height(self.rect.get_height())
1177+
self.stay_rect.set_visible(True)
1178+
11581179
self.canvas.draw()
11591180
vmin = self.pressv
11601181
if self.direction == 'horizontal':

0 commit comments

Comments
 (0)
0