## matplotlib-users

 [Matplotlib-users] pick event From: Arek Kedzior - 2012-05-12 13:07:44 Attachments: Message as HTML ```I am trying to use pick event.  See the simple script below.  I am interested to find the shortest distance between pick point (mouse coord.) and the  line at the discrete points only (points on the curve from data) What am I doing wrong ? Regards, Arek   import numpy as np import matplotlib.pyplot as plt from matplotlib.lines import Line2D import math as math   # create figure and attach axes to it fig = plt.figure(1) ax = fig.add_subplot(111)     def getMinDistance(xmouse, ymouse, xList, yList):     """     find shortest distance between mouse coordinates and pick point     point pick may be a list of points if data is clouded     Input     xmouse - x coordinate of mouse (x - pick)     ymouse - y coordinate of mouse (y - pick)     xList  - xData from curve     yList  - yData from curve     Returns:     dmin  - minimum distance     index - index of data point in the xList and yList     """     dmin  = math.sqrt((xList[0] - xmouse)**2. + (yList[0]-ymouse)**2.)      index = 0     for idx in range(1,len(xList)):         d = math.sqrt((xList[idx] - xmouse)**2. + (yList[idx]-ymouse)**2.)         if(d < dmin):             dmin = d             index = idx     return dmin, index   def showMarker(x, y, color):     """     draw marker at loction x, y with color     """     # draw marker     markerOn, = ax.plot(x, y, 'o', color = color)      def OnPick(event):     """     pick event     """     print '****************************'     mouseEvent = event.mouseevent     # get pick coord     xmouse, ymouse = mouseEvent.xdata, mouseEvent.ydata     # get the artist     lineObj = event.artist     print lineObj     if not isinstance(lineObj, Line2D):         return     ind = event.ind     # check if indexes exist of the pick object     N = len(ind)     if not N:         return     # get curve picked data     Xdata, Ydata = lineObj.get_data()     color = lineObj.get_color()     xLi = np.take(Xdata, ind)     yLi = np.take(Ydata, ind)     dmin, index = getMinDistance(xmouse, ymouse, xLi, yLi)         xP = xLi[index]     yP = yLi[index]         xStr = '%.4g' % xP     yStr = '%.4g' % yP     txt = 'X = ' + xStr + ' ;  ' + 'Y = ' + yStr     print txt     # show marker     showMarker(xP, yP, color)     # redraw to show marker     fig.canvas.draw()     # connect to pick event    fig.canvas.mpl_connect('pick_event',OnPick)   # generate data for display x = np.arange(-4,4,0.1)      # x- coord y2 = x**2 + 5.0              # y coord of first curve y  = 2*x + 4.0               # y coord of the second curve # create the list of x and y data xList = [x, x]               yList = [y, y2] objList = []     # store draw lines (artists) # display 2 curves for idx in range(len(xList)):     obj, = ax.plot(xList[idx], yList[idx], picker = 5)     objList.append(obj)   # display plot plt.show(1)```
 Re: [Matplotlib-users] pick event From: Jerzy Karczmarczuk - 2012-05-12 14:44:29 Attachments: Message as HTML ```Arek Ke;dzior: > I am trying to use pick event. ... > What am I doing wrong ? Wrong with WHAT? What do you expect? Jerzy Karczmarczuk ```
 Re: [Matplotlib-users] pick event From: Benjamin Root - 2012-05-12 14:59:45 Attachments: Message as HTML ```On Saturday, May 12, 2012, Jerzy Karczmarczuk wrote: > Arek Kędzior: > > I am trying to use pick event. > > ... > > What am I doing wrong ? > > Wrong with WHAT? > What do you expect? > > Jerzy Karczmarczuk > Arek. Could you provide a little more detail about your issue? Cheers! Ben Root ```