From 1219530962654f52d1010e4dc158ecc2ba9187dd Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Sat, 22 Sep 2018 16:15:42 -0700 Subject: [PATCH 1/7] change proposed in issue #12191 removed the confusing if 1: as propsed in #12191 --- examples/axisartist/demo_axisline_style.py | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/examples/axisartist/demo_axisline_style.py b/examples/axisartist/demo_axisline_style.py index 0ddabcb15cb9..fc61375147e4 100644 --- a/examples/axisartist/demo_axisline_style.py +++ b/examples/axisartist/demo_axisline_style.py @@ -10,23 +10,23 @@ import matplotlib.pyplot as plt import numpy as np -if 1: - fig = plt.figure() - ax = SubplotZero(fig, 111) - fig.add_subplot(ax) - for direction in ["xzero", "yzero"]: - # adds arrows at the ends of each axis - ax.axis[direction].set_axisline_style("-|>") +fig = plt.figure() +ax = SubplotZero(fig, 111) +fig.add_subplot(ax) - # adds X and Y-axis from the origin - ax.axis[direction].set_visible(True) +for direction in ["xzero", "yzero"]: + # adds arrows at the ends of each axis + ax.axis[direction].set_axisline_style("-|>") - for direction in ["left", "right", "bottom", "top"]: - # hides borders - ax.axis[direction].set_visible(False) + # adds X and Y-axis from the origin + ax.axis[direction].set_visible(True) - x = np.linspace(-0.5, 1., 100) - ax.plot(x, np.sin(x*np.pi)) +for direction in ["left", "right", "bottom", "top"]: + # hides borders + ax.axis[direction].set_visible(False) - plt.show() +x = np.linspace(-0.5, 1., 100) +ax.plot(x, np.sin(x*np.pi)) + +plt.show() From 487581ea115918486d2c04109b25d71c01ad40d9 Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Sat, 22 Sep 2018 19:36:26 -0700 Subject: [PATCH 2/7] change requested in #12191 --- examples/event_handling/pick_event_demo.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 4f2a924e1d23..54a4ad159eb1 100644 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -74,7 +74,7 @@ def pick_handler(event): import numpy as np from numpy.random import rand -if 1: # simple picking, lines, rectangles and text +def single_pick() # simple picking, lines, rectangles and text fig, (ax1, ax2) = plt.subplots(2, 1) ax1.set_title('click on points, rectangles or text', picker=True) ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red')) @@ -101,7 +101,7 @@ def onpick1(event): fig.canvas.mpl_connect('pick_event', onpick1) -if 1: # picking with a custom hit test function +def pick_custom_hit(): # picking with a custom hit test function # you can define custom pickers by setting picker to a callable # function. The function has the signature # @@ -142,7 +142,7 @@ def onpick2(event): fig.canvas.mpl_connect('pick_event', onpick2) -if 1: # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) +if pick_scatter_plot(): # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) x, y, c, s = rand(4, 100) @@ -155,7 +155,7 @@ def onpick3(event): #fig.savefig('pscoll.eps') fig.canvas.mpl_connect('pick_event', onpick3) -if 1: # picking images (matplotlib.image.AxesImage) +def pick_image(): # picking images (matplotlib.image.AxesImage) fig, ax = plt.subplots() im1 = ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True) im2 = ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True) From 5df8729da3f8ce811924d49380e9dfa82f52560d Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Mon, 24 Sep 2018 15:09:05 -0700 Subject: [PATCH 3/7] added main() to resolve comments from #12191 --- examples/event_handling/pick_event_demo.py | 154 +-------------------- 1 file changed, 1 insertion(+), 153 deletions(-) diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 54a4ad159eb1..63d9ea1e3591 100644 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -21,156 +21,4 @@ off an event if it's data is within epsilon of the mouse event. For some artists like lines and patch collections, the artist may provide additional data to the pick event - that is generated, for example, the indices of the data within - epsilon of the pick event - - function - if picker is callable, it is a user supplied - function which determines whether the artist is hit by the - mouse event. - - hit, props = picker(artist, mouseevent) - - to determine the hit test. If the mouse event is over the - artist, return hit=True and props is a dictionary of properties - you want added to the PickEvent attributes - - -After you have enabled an artist for picking by setting the "picker" -property, you need to connect to the figure canvas pick_event to get -pick callbacks on mouse press events. For example, - - def pick_handler(event): - mouseevent = event.mouseevent - artist = event.artist - # now do something with this... - - -The pick event (matplotlib.backend_bases.PickEvent) which is passed to -your callback is always fired with two attributes: - - mouseevent - the mouse event that generate the pick event. The - mouse event in turn has attributes like x and y (the coordinates in - display space, such as pixels from left, bottom) and xdata, ydata (the - coords in data space). Additionally, you can get information about - which buttons were pressed, which keys were pressed, which Axes - the mouse is over, etc. See matplotlib.backend_bases.MouseEvent - for details. - - artist - the matplotlib.artist that generated the pick event. - -Additionally, certain artists like Line2D and PatchCollection may -attach additional meta data like the indices into the data that meet -the picker criteria (for example, all the points in the line that are within -the specified epsilon tolerance) - -The examples below illustrate each of these methods. -""" - -import matplotlib.pyplot as plt -from matplotlib.lines import Line2D -from matplotlib.patches import Rectangle -from matplotlib.text import Text -from matplotlib.image import AxesImage -import numpy as np -from numpy.random import rand - -def single_pick() # simple picking, lines, rectangles and text - fig, (ax1, ax2) = plt.subplots(2, 1) - ax1.set_title('click on points, rectangles or text', picker=True) - ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red')) - line, = ax1.plot(rand(100), 'o', picker=5) # 5 points tolerance - - # pick the rectangle - bars = ax2.bar(range(10), rand(10), picker=True) - for label in ax2.get_xticklabels(): # make the xtick labels pickable - label.set_picker(True) - - def onpick1(event): - if isinstance(event.artist, Line2D): - thisline = event.artist - xdata = thisline.get_xdata() - ydata = thisline.get_ydata() - ind = event.ind - print('onpick1 line:', zip(np.take(xdata, ind), np.take(ydata, ind))) - elif isinstance(event.artist, Rectangle): - patch = event.artist - print('onpick1 patch:', patch.get_path()) - elif isinstance(event.artist, Text): - text = event.artist - print('onpick1 text:', text.get_text()) - - fig.canvas.mpl_connect('pick_event', onpick1) - -def pick_custom_hit(): # picking with a custom hit test function - # you can define custom pickers by setting picker to a callable - # function. The function has the signature - # - # hit, props = func(artist, mouseevent) - # - # to determine the hit test. if the mouse event is over the artist, - # return hit=True and props is a dictionary of - # properties you want added to the PickEvent attributes - - def line_picker(line, mouseevent): - """ - find the points within a certain distance from the mouseclick in - data coords and attach some extra attributes, pickx and picky - which are the data points that were picked - """ - if mouseevent.xdata is None: - return False, dict() - xdata = line.get_xdata() - ydata = line.get_ydata() - maxd = 0.05 - d = np.sqrt((xdata - mouseevent.xdata)**2. + (ydata - mouseevent.ydata)**2.) - - ind = np.nonzero(np.less_equal(d, maxd)) - if len(ind): - pickx = np.take(xdata, ind) - picky = np.take(ydata, ind) - props = dict(ind=ind, pickx=pickx, picky=picky) - return True, props - else: - return False, dict() - - def onpick2(event): - print('onpick2 line:', event.pickx, event.picky) - - fig, ax = plt.subplots() - ax.set_title('custom picker for line data') - line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker) - fig.canvas.mpl_connect('pick_event', onpick2) - - -if pick_scatter_plot(): # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) - - x, y, c, s = rand(4, 100) - - def onpick3(event): - ind = event.ind - print('onpick3 scatter:', ind, np.take(x, ind), np.take(y, ind)) - - fig, ax = plt.subplots() - col = ax.scatter(x, y, 100*s, c, picker=True) - #fig.savefig('pscoll.eps') - fig.canvas.mpl_connect('pick_event', onpick3) - -def pick_image(): # picking images (matplotlib.image.AxesImage) - fig, ax = plt.subplots() - im1 = ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True) - im2 = ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True) - im3 = ax.imshow(rand(20, 25), extent=(1, 2, 3, 4), picker=True) - im4 = ax.imshow(rand(30, 12), extent=(3, 4, 3, 4), picker=True) - ax.axis([0, 5, 0, 5]) - - def onpick4(event): - artist = event.artist - if isinstance(artist, AxesImage): - im = artist - A = im.get_array() - print('onpick4 image', A.shape) - - fig.canvas.mpl_connect('pick_event', onpick4) - - -plt.show() +"test.py" 186L, 6570C 1,1 Top From a6473cde94e8ed59ea96973500791cf305fe0c1a Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Mon, 24 Sep 2018 15:11:19 -0700 Subject: [PATCH 4/7] update #12191 --- examples/event_handling/pick_event_demo.py | 164 ++++++++++++++++++++- 1 file changed, 163 insertions(+), 1 deletion(-) diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 63d9ea1e3591..37ec87bec420 100644 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -21,4 +21,166 @@ off an event if it's data is within epsilon of the mouse event. For some artists like lines and patch collections, the artist may provide additional data to the pick event -"test.py" 186L, 6570C 1,1 Top + that is generated, for example, the indices of the data within + epsilon of the pick event + + function - if picker is callable, it is a user supplied + function which determines whether the artist is hit by the + mouse event. + + hit, props = picker(artist, mouseevent) + + to determine the hit test. If the mouse event is over the + artist, return hit=True and props is a dictionary of properties + you want added to the PickEvent attributes + + +After you have enabled an artist for picking by setting the "picker" +property, you need to connect to the figure canvas pick_event to get +pick callbacks on mouse press events. For example, + + def pick_handler(event): + mouseevent = event.mouseevent + artist = event.artist + # now do something with this... + + +The pick event (matplotlib.backend_bases.PickEvent) which is passed to +your callback is always fired with two attributes: + + mouseevent - the mouse event that generate the pick event. The + mouse event in turn has attributes like x and y (the coordinates in + display space, such as pixels from left, bottom) and xdata, ydata (the + coords in data space). Additionally, you can get information about + which buttons were pressed, which keys were pressed, which Axes + the mouse is over, etc. See matplotlib.backend_bases.MouseEvent + for details. + + artist - the matplotlib.artist that generated the pick event. + +Additionally, certain artists like Line2D and PatchCollection may +attach additional meta data like the indices into the data that meet +the picker criteria (for example, all the points in the line that are within +the specified epsilon tolerance) + +The examples below illustrate each of these methods. +""" + +import matplotlib.pyplot as plt +from matplotlib.lines import Line2D +from matplotlib.patches import Rectangle +from matplotlib.text import Text +from matplotlib.image import AxesImage +import numpy as np +from numpy.random import rand + +def pick_simple(): + # simple picking, lines, rectangles and text + fig, (ax1, ax2) = plt.subplots(2, 1) + ax1.set_title('click on points, rectangles or text', picker=True) + ax1.set_ylabel('ylabel', picker=True, bbox=dict(facecolor='red')) + line, = ax1.plot(rand(100), 'o', picker=5) # 5 points tolerance + + # pick the rectangle + bars = ax2.bar(range(10), rand(10), picker=True) + for label in ax2.get_xticklabels(): # make the xtick labels pickable + label.set_picker(True) + + def onpick1(event): + if isinstance(event.artist, Line2D): + thisline = event.artist + xdata = thisline.get_xdata() + ydata = thisline.get_ydata() + ind = event.ind + print('onpick1 line:', zip(np.take(xdata, ind), np.take(ydata, ind))) + elif isinstance(event.artist, Rectangle): + patch = event.artist + print('onpick1 patch:', patch.get_path()) + elif isinstance(event.artist, Text): + text = event.artist + print('onpick1 text:', text.get_text()) + + fig.canvas.mpl_connect('pick_event', onpick1) + plt.show() + +def pick_custom_hit(): + # picking with a custom hit test function + # you can define custom pickers by setting picker to a callable + # function. The function has the signature + # + # hit, props = func(artist, mouseevent) + # + # to determine the hit test. if the mouse event is over the artist, + # return hit=True and props is a dictionary of + # properties you want added to the PickEvent attributes + + def line_picker(line, mouseevent): + """ + find the points within a certain distance from the mouseclick in + data coords and attach some extra attributes, pickx and picky + which are the data points that were picked + """ + if mouseevent.xdata is None: + return False, dict() + xdata = line.get_xdata() + ydata = line.get_ydata() + maxd = 0.05 + d = np.sqrt((xdata - mouseevent.xdata)**2. + (ydata - mouseevent.ydata)**2.) + + ind = np.nonzero(np.less_equal(d, maxd)) + if len(ind): + pickx = np.take(xdata, ind) + picky = np.take(ydata, ind) + props = dict(ind=ind, pickx=pickx, picky=picky) + return True, props + else: + return False, dict() + + def onpick2(event): + print('onpick2 line:', event.pickx, event.picky) + + fig, ax = plt.subplots() + ax.set_title('custom picker for line data') + line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker) + fig.canvas.mpl_connect('pick_event', onpick2) + plt.show() + +def pick_scatter_plot(): + # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) + + x, y, c, s = rand(4, 100) + + def onpick3(event): + ind = event.ind + print('onpick3 scatter:', ind, np.take(x, ind), np.take(y, ind)) + + fig, ax = plt.subplots() + col = ax.scatter(x, y, 100*s, c, picker=True) + #fig.savefig('pscoll.eps') + fig.canvas.mpl_connect('pick_event', onpick3) + plt.show() + +def pick_image(): + # picking images (matplotlib.image.AxesImage) + fig, ax = plt.subplots() + im1 = ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True) + im2 = ax.imshow(rand(5, 10), extent=(3, 4, 1, 2), picker=True) + im3 = ax.imshow(rand(20, 25), extent=(1, 2, 3, 4), picker=True) + im4 = ax.imshow(rand(30, 12), extent=(3, 4, 3, 4), picker=True) + ax.axis([0, 5, 0, 5]) + + def onpick4(event): + artist = event.artist + if isinstance(artist, AxesImage): + im = artist + A = im.get_array() + print('onpick4 image', A.shape) + + fig.canvas.mpl_connect('pick_event', onpick4) + plt.show() + +if __name__ == '__main__': + pick_simple() + pick_custom_hit() + pick_scatter_plot() + pick_image() From a9fee9c248a642ac8b380f3c8ccc99ce3a5dc2c5 Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Mon, 24 Sep 2018 15:41:35 -0700 Subject: [PATCH 5/7] flake-8 corrections #12191 --- examples/event_handling/pick_event_demo.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 37ec87bec420..48e8c733cf48 100644 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -74,6 +74,7 @@ def pick_handler(event): import numpy as np from numpy.random import rand + def pick_simple(): # simple picking, lines, rectangles and text fig, (ax1, ax2) = plt.subplots(2, 1) @@ -103,6 +104,7 @@ def onpick1(event): fig.canvas.mpl_connect('pick_event', onpick1) plt.show() + def pick_custom_hit(): # picking with a custom hit test function # you can define custom pickers by setting picker to a callable @@ -145,6 +147,7 @@ def onpick2(event): fig.canvas.mpl_connect('pick_event', onpick2) plt.show() + def pick_scatter_plot(): # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) @@ -160,6 +163,7 @@ def onpick3(event): fig.canvas.mpl_connect('pick_event', onpick3) plt.show() + def pick_image(): # picking images (matplotlib.image.AxesImage) fig, ax = plt.subplots() @@ -179,6 +183,7 @@ def onpick4(event): fig.canvas.mpl_connect('pick_event', onpick4) plt.show() + if __name__ == '__main__': pick_simple() pick_custom_hit() From 0c98309ffeca2c7fd244e94c80ff93ad20328b4c Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Mon, 24 Sep 2018 15:59:35 -0700 Subject: [PATCH 6/7] update ```plt.show``` for #12191 --- examples/event_handling/pick_event_demo.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 48e8c733cf48..9bc7e1198c05 100644 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -102,7 +102,6 @@ def onpick1(event): print('onpick1 text:', text.get_text()) fig.canvas.mpl_connect('pick_event', onpick1) - plt.show() def pick_custom_hit(): @@ -145,7 +144,6 @@ def onpick2(event): ax.set_title('custom picker for line data') line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker) fig.canvas.mpl_connect('pick_event', onpick2) - plt.show() def pick_scatter_plot(): @@ -161,7 +159,6 @@ def onpick3(event): col = ax.scatter(x, y, 100*s, c, picker=True) #fig.savefig('pscoll.eps') fig.canvas.mpl_connect('pick_event', onpick3) - plt.show() def pick_image(): @@ -181,7 +178,6 @@ def onpick4(event): print('onpick4 image', A.shape) fig.canvas.mpl_connect('pick_event', onpick4) - plt.show() if __name__ == '__main__': @@ -189,3 +185,4 @@ def onpick4(event): pick_custom_hit() pick_scatter_plot() pick_image() + plt.show() From e64129f86bce2c274a18ff16ce2f46180051912a Mon Sep 17 00:00:00 2001 From: Abhinuv Nitin Pitale Date: Mon, 24 Sep 2018 16:46:59 -0700 Subject: [PATCH 7/7] flake8 update #12191 --- examples/event_handling/pick_event_demo.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/event_handling/pick_event_demo.py b/examples/event_handling/pick_event_demo.py index 9bc7e1198c05..7198bff484a5 100644 --- a/examples/event_handling/pick_event_demo.py +++ b/examples/event_handling/pick_event_demo.py @@ -103,7 +103,7 @@ def onpick1(event): fig.canvas.mpl_connect('pick_event', onpick1) - + def pick_custom_hit(): # picking with a custom hit test function # you can define custom pickers by setting picker to a callable @@ -145,7 +145,7 @@ def onpick2(event): line, = ax.plot(rand(100), rand(100), 'o', picker=line_picker) fig.canvas.mpl_connect('pick_event', onpick2) - + def pick_scatter_plot(): # picking on a scatter plot (matplotlib.collections.RegularPolyCollection) @@ -160,8 +160,8 @@ def onpick3(event): #fig.savefig('pscoll.eps') fig.canvas.mpl_connect('pick_event', onpick3) - -def pick_image(): + +def pick_image(): # picking images (matplotlib.image.AxesImage) fig, ax = plt.subplots() im1 = ax.imshow(rand(10, 5), extent=(1, 2, 1, 2), picker=True) @@ -179,7 +179,7 @@ def onpick4(event): fig.canvas.mpl_connect('pick_event', onpick4) - + if __name__ == '__main__': pick_simple() pick_custom_hit()