es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo almacenar las coordenadas en una variable del evento onclick de Matplotlib?

Quiero poder usar las coordenadas del punto en el que hago clic en mi gráfico para utilizarlas más adelante en mi script. He estado intentando con variables globales dentro de la función onclick y eso no funciona. ¿Por qué?
Segunda pregunta: ¿cómo puedo resolver esto?

Aquí está mi código simplificado donde intento almacenar las coordenadas x en la variable x. Después de que se completa el script, la variable x tiene el valor -999, es decir, el valor de inicio. Quiero obtener la coordenada x de mi clic de ratón en el gráfico:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(np.random.rand(10))

x = -999

def onclick(event):
    print(event.xdata, event.ydata)
    global x
    x = event.xdata
    print(x)
    plt.close()

cid = fig.canvas.mpl_connect('button_press_event', onclick)

plt.show()
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Primera pregunta:
    La razón por la cual el uso de variables globales dentro de la función onclick no funciona, es que cuando se utiliza global, crea una variable en el ámbito global que oculta la variable con el mismo nombre en el ámbito local. Sin embargo, en este caso, la variable x que se define fuera de la función no está en el ámbito global, sino en el ámbito del módulo. Por lo tanto, cuando se utiliza global x dentro de la función onclick, se crea una nueva variable global x que es diferente de la variable x definida fuera de la función. Como resultado, cuando se establece el valor de x dentro de la función, no se está cambiando el valor de la variable x fuera de la función.

    Segunda pregunta:
    Para resolver el problema, puedes declarar la variable x como una variable global dentro de la función onclick, agregando la línea global x al comienzo de la función. Esto le indicará a Python que deseas utilizar la variable x que está definida fuera de la función. Aquí está el código modificado:

    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot(np.random.rand(10))
    
    x = -999
    
    
    def onclick(event):
        global x
        print(event.xdata, event.ydata)
        x = event.xdata
        print(x)
        plt.close()
    
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    
    plt.show()
    

    Ahora, cuando hagas clic en el gráfico, el valor de x se establecerá en la coordenada x del punto en el que hiciste clic. Puedes utilizar este valor más adelante en tu script o en una función a la que llames desde la función onclick.

Comments are closed.