Hello,
I don't know what I'm doing wrong, but it don't work for me.
I have to open different sets of data, plot it, select an initial point,
make some calculations and save all the data.
Each plot have a diferente initial point, so I thought of do this with a for
sentences, opening each plot, doing all and so on.
But I open the first one, and then it plots the second one, but don't let me
select the original point, it catches the previos one. And the same for the
rest.
And I don't know why it doesn't work.

Here you have all the program:

--------------------------

#!/usr/bin/python
# -*- encoding: latin1 -*-


#Importamos los módulos necesarios:

import Numeric as num
import pylab
import random
import array
import sys
from matplotlib.widgets import SpanSelector
from matplotlib.widgets import Cursor


#Leemos el fichero que contiene el valor de la energia y la suma de los
espines:

def readfiles(filename):
   """
   Lee el fichero donde estan los datos. La primera fila del fichero nos da
la temperatura y el numero de puntos.
   Las dos columnas tienen la energia y la suma de los spines.
   """

   fin = open (filename, 'r')
   fields = fin.readline()
   fin.close()
   labels = fields[1:].split()
   t = eval(labels[1])
   n = eval(labels[6])

   datos = pylab.load(filename,comments='#')
   energia =datos[:,0]
   sumspines =datos[:,1]

   return t, n, energia, sumspines

def filelist(filename):
       fin = open(filename,'r')
       files = []
       for line in fin:
               files.append(line[:-1]),
       return files

def writefile(filename,start,cv,mag,t):
       """
       Escribimos en un fichero todos los datos de punto de corte, calores
especificos,
       magnetizacion y temperatura
       """
       fout = open(filename,'w')
       fout.write ("#punto de corte    cv    magnetizacion    temperatura")
       for i in range (len(start)):
               fout.write("%f \t %f \t %f \t %f \n"  %  (start[i],cv[i],
mag[i], t[i]))
       fout.close()

def cv(energia,T,n,g,start):
   """
   Calculamos el calor específico segun la formula:
   Cv= k*B**2/(nx*ny)*(<H²> - <H>²
   donde:
   <H>² = (sumatorio H/n) **2
   <H²> = (sumatorio H) **2 /n
   """
   hp = sum(energia[start:])/(n*g*g*2.)
   energia2 = num.asarray(energia)
   hp2 = sum(energia2[start:]**2)/n*(g*g*2)**2
#    print 'Algunos valores de la energia: ',energia[start:start+10]

   return (hp2-hp**2)/(g*g*T**2)

def mag(sumspines,n,g,start):
   """
   Calculamos la magnetizacion, usando la formula:
   <M> = (sumatorio S) /n
   """
#    print 'Algunos valores de sumspines: ', sumspines[start:start+10]
#    print 'la n es: ', n
   return sum(sumspines[start:]) /(n*g*g)



def grid(zn):
   im1 = pylab.imshow(zn, cmap=pylab.cm.gray, interpolation='nearest')
   pylab.show()

def plotear(energia):
   fig=pylab.figure(figsize=(8,6))
   ax = fig.add_subplot(111)
   x=pylab.arange(0,len(energia),1)
   ax.plot(x,energia,linewidth=2)
   pylab.grid(True)

   cursor = Cursor(ax, useblit=False, color='red', linewidth=2)
   cursor.horizOn = False


def click(event):
   global x
   #x,y = event.x,event.y
   if event.button == 1:
       if event.inaxes:
#            print 'coordenada x', event.xdata
           x = event.xdata
           pylab.disconnect(cid)
           pylab.close()
   return x


def main0 ():
   global cid

   filename = raw_input("Introduce el fichero de datos: ")

# t= temperatura
# n= numero de pasos
# energia = valores de la energia, sin normalizar (hay que multiplicar por
# 1/( 2*nx*ny)
# sumspines= valor de la suma de los espines para cada energia
# g = grid (nx =ny)

   t, n, energia, sumspines =  readfiles(filename)
   g = float(filename[(filename.find('-')+1):])


   plotear(energia)
   cid = pylab.connect('button_press_event', click)
   pylab.show()
   x1 = int(x)
   print 'Coordenada x: ',x1

   print 'El calor especifico es: ',cv(energia,t, n,g,x1)
   print 'La magnetizacion es: ', mag(sumspines,n,g,x1)


def main1():
       global x, cid
       filename = raw_input("Introduce el fichero con la lista: ")
       files = filelist(filename)
       start=[]
       cvall=[]
       magall=[]
       ts=[]
       for i in range(len(files)):
               t,n,energia,sumspines= readfiles(files[i])
               g = float(files[1][(files[1].find('-')+1):])
               plotear(energia)
               cid = pylab.connect('button_press_event', click)
               pylab.show()
               x1 = int(x)
               start.append(x1)
               cv1=cv(energia,t, n,g,start[i])
               mag1= mag(sumspines,n,g,start[i])

               cvall.append(cv1)
               magall.append(mag1)
               ts.append(t)
               print 'Coordenada x: ',x1

               print 'El calor especifico es: ',cv1
               print 'La magnetizacion es: ', mag1

       filename2='resultados_globales.%s' % (g)
       writefile(filename2,start,cvall,magall,ts)


def main2():
       print "todavia no esta hecho"


if __name__ == "__main__":

   print "Selecciona una de las siguientes opciones: \n "
   print "Un solo fichero de datos (0)"
   print "Lista de ficheros de datos (1)"
   print "Lista de ficheros de datos y valores de corte (2)"

   option = input()

   if option ==0:
           main0()
   if option == 1:
           main1()
   if option ==2:
           main2()

 -------------------------------------

2007/6/27, Matthias Michler <[EMAIL PROTECTED]>:

Hello darkside,

I'm a little confused that you are sending the email directly to me ...
and I'm not sure I really understand your problem, but I set up an example
that hopefully satify your needs and shows that it works in principle :

>-----------------------------------------------------------------------------------------------------------
import pylab

def click(event):
    global x           # allow to change global variable
    if event.button == 1:
        if event.inaxes:
            x = event.xdata             # change global variable
            print " x - intern = ", x
            pylab.disconnect(cid)
            pylab.close()

xlist = []            # list for x values
global x
for i in xrange(8):
    pylab.figure()
    pylab.subplot(111)
    pylab.draw()
    cid = pylab.connect('button_press_event', click)
    pylab.show()
    print " x - extern = ", x
    xlist.append(x)

pylab.figure()
pylab.subplot(111)
pylab.plot(xlist, 'b+', ms=8, mew=4)     # plot ensemble of x values
pylab.show()

>-------------------------------------------------------------------------------------------

If this example is not sufficient for you, please set up a little example
of
your problem, which can be executed from here, too.
This you may send to mpl mailing-list.


I have already tried this example and it doesn't  work for me. It  catches
the same x for all the plots.

Thank you for you kind help.

P.D. I send the previous message to you because I clicked the reply button
and I didn't see that it was only you, sorry.
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to