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.

Gráfico interactivo con matplotlib

Estoy tratando de escribir una función que me permite elegir un punto en mi polígono y cambiar sus coordenadas de la siguiente manera:

  1. elegir un punto p(i)
  2. asociarlo con las coordenadas del mouse y luego dibujar el cambio
  3. el segundo clic almacena estas coordenadas en p(i)

    import matplotlib as plt
    import numpy as np
    def mouve(event):
    fig=plt.gcf()
    ax=plt.gca()
    global poly

    cl=[]
    m = np.array( [event.xdata, event.ydata])
    print(m)
    

    global coords

    cl.append(m)
    ax.clear()
    M1=ax.plot(poly[:,0], poly[:,1], ‘-ro’)
    plt.xlim([-10, 10])
    plt.ylim([-10, 10])
    fig.canvas.draw()
    plt.show()
    global cidd
    for i in range(len(poly)):
    if dist(m,poly[i])<1: poly[i]=m if (len(cl) > 2 and all(cl[-1,:]==X[-2,:])) :
    fig.canvas.mpl_disconnect(cidd)
    print(‘done’)
    return poly

    def change(p):
    %matplotlib qt
    global poly
    poly=p
    fig=plt.figure()
    ax = fig.add_subplot(111)
    plt.xlim([-10, 10])
    plt.ylim([-10, 10])
    ax.plot(poly[:,0], poly[:,1], ‘-bo’)
    global cidd
    cidd=fig.canvas.mpl_connect(‘buttonpressevent’, mouve)
    return poly


Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr el resultado deseado de seleccionar y cambiar las coordenadas de un punto en un polígono, puedes usar las funciones proporcionadas change() y mouve().

    La función change() toma el polígono inicial como entrada y lo muestra en una figura de matplotlib. También conecta un button_press_event a la figura y establece la variable global cidd que se usará más adelante para desconectar el evento. Cuando se activa el evento con un clic del ratón, se llama a la función mouve().

    La función mouve() recibe el objeto event y extrae las coordenadas x e y del clic del ratón. Luego itera sobre cada punto del polígono e identifica el punto más cercano al clic del ratón dentro de una distancia especificada (en este caso, dist=1). El punto del polígono elegido se reemplaza por las nuevas coordenadas del ratón. Cuando se producen dos clics a menos de 1 píxel de distancia entre sí, el evento se desconecta y se devuelve el polígono actualizado.

    Para usar estas funciones, simplemente llama a change() con el polígono deseado como entrada. El polígono actualizado se devolverá después de que se termine el bucle del evento.

    Nota: El comando %matplotlib qt permite realizar gráficas interactivas fuera de un entorno de cuaderno Jupyter.

Comments are closed.