Suggestion On Handling Plots

Hello NG,

    in my app, I plot the position of some oil wells
represented by dots in a x-y plot. The coordinates of the positions are
integers. I use the command:

myaxes.plot(xc, yc, "ko")

where xc, yc
are the wells' coordinates. After some calculations, I would like to do
these 2 things in the most *efficient* or *intelligent* way:

1)
Depending on the value of a certain parameter, every well (dot) should
have a color (there are only 5 colors that a well may assume). For
example, if this parameter has a value less than 0.1, a well is painted
green, if it has a value greater than 0.1 but smaller than 1, a well is
painted blue and so on. At the moment, the only way I can think about
to implement such a thing is to do:

for ii in xrange(len(xc)):
    
axdata.plot([xc[i]], [yc[i]], 'ko')

which means defining a new Lines2D
object for every well. Next, it is easier to assign a different colour
to each well.

2) When the user presses the mouse "near" a well, I
would like to be able to:
a) Verify that the mouse click was "really"
near a well and not somewhere else, where there are no wells;
b) If a)
is True, retrieving which wells was clicked (which Lines2D was
clicked).

At the moment, using the plot command:

self.mp = myaxes.plot
(xc, yc, "ko")

I do these steps:

def mouse_press(self, event):

        # Check if the click is inside the axes
        if event.inaxes
is None:
            return

        xvalue, yvalue = event.xdata,
event.ydata

        # Round to integer the click coordinates
        
xc, yc = int(round(xvalue)), int(round(yvalue))
        
        # get
xdata and ydata for all the wells
        xdata = self.mp[0][0].
get_xdata()
        ydata = self.mp[0][0].get_ydata()
        
if xc in xdata:
            # find which wells have X coordinates
equals to xc
            indxs = [x[0] for x in enumerate(xdata) if x
[1] == xc]

            if yc in ydata:
                # find which
wells have Y coordinates equals to yc
                indys = [x[0] for
x in enumerate(ydata) if x[1] == yc]

                lenx = len(indxs)
                leny = len(indys)

                # create 2 lists
that can be compared in length

                if lenx < leny:
                    indxs.extend([-9999]*(leny-lenx))
                
elif leny < lenx:
                    indys.extend([-9999]*(lenx-leny))

                tmp = []
                # find the intersections
between the 2 lists
                for xcoord in indxs:
                    if xcoord in indys:
                        tmp.
append(indys.index(xcoord))
                    
                # ==>
The click matches the well if len(tmp) > 0
                if len(tmp)

0:

                    ind = tmp[0]
                    # get
wellnames from other sources
                    currentwell = self.
wellnames[indys[ind]]

Thank you for every suggestion. Great work with
matplotlib!

Andrea.