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)