• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

389
Vistas
python matplotlib actualizar diagrama de dispersión de una función

Estoy tratando de actualizar automáticamente un gráfico de dispersión. La fuente de mis valores X e Y es externa, y los datos se insertan automáticamente en mi código en intervalos de tiempo no previstos (rondas).

Solo logré trazar todos los datos cuando finalizó todo el proceso, mientras que trato de agregar y trazar datos constantemente en mi lienzo.

Lo que SÍ obtengo (al final de toda la ejecución) es esto: ingrese la descripción de la imagen aquí

Mientras que lo que busco es esto: ingrese la descripción de la imagen aquí

Una versión simplificada de mi código:

 import matplotlib.pyplot as plt def read_data(): #This function gets the values of xAxis and yAxis xAxis = [some values] #these valuers change in each run yAxis = [other values] #these valuers change in each run plt.scatter(xAxis,yAxis, label = 'myPlot', color = 'k', s=50) plt.xlabel('x') plt.ylabel('y') plt.show()
over 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Hay varias formas de animar un diagrama de matplotlib. A continuación, veamos dos ejemplos mínimos usando un diagrama de dispersión.

(a) usar el modo interactivo plt.ion()

Para que tenga lugar una animación, necesitamos un bucle de eventos. Una forma de obtener el bucle de eventos es usar plt.ion() ("activación interactiva"). Luego, primero se debe dibujar la figura y luego se puede actualizar la trama en un bucle. Dentro del ciclo, necesitamos dibujar el lienzo e introducir una pequeña pausa para que la ventana procese otros eventos (como las interacciones del mouse, etc.). Sin esta pausa, la ventana se congelaría. Finalmente, llamamos a plt.waitforbuttonpress() para permitir que la ventana permanezca abierta incluso después de que la animación haya terminado.

 import matplotlib.pyplot as plt import numpy as np plt.ion() fig, ax = plt.subplots() x, y = [],[] sc = ax.scatter(x,y) plt.xlim(0,10) plt.ylim(0,10) plt.draw() for i in range(1000): x.append(np.random.rand(1)*10) y.append(np.random.rand(1)*10) sc.set_offsets(np.c_[x,y]) fig.canvas.draw_idle() plt.pause(0.1) plt.waitforbuttonpress()

(b) utilizando FuncAnimation

Gran parte de lo anterior se puede automatizar usando matplotlib.animation.FuncAnimation . FuncAnimation se encargará del bucle y del redibujado y llamará constantemente a una función (en este caso, animate() ) después de un intervalo de tiempo determinado. La animación solo comenzará una vez que se llame a plt.show() , por lo que se ejecutará automáticamente en el bucle de eventos de la ventana de gráficos.

 import matplotlib.pyplot as plt import matplotlib.animation import numpy as np fig, ax = plt.subplots() x, y = [],[] sc = ax.scatter(x,y) plt.xlim(0,10) plt.ylim(0,10) def animate(i): x.append(np.random.rand(1)*10) y.append(np.random.rand(1)*10) sc.set_offsets(np.c_[x,y]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=2, interval=100, repeat=True) plt.show()
over 3 years ago · Santiago Trujillo Denunciar

0

Por lo que entiendo, desea actualizar interactivamente su trama. Si es así, puede usar el gráfico en lugar del gráfico de dispersión y actualizar los datos de su gráfico de esta manera.

 import numpy import matplotlib.pyplot as plt fig = plt.figure() axe = fig.add_subplot(111) X,Y = [],[] sp, = axe.plot([],[],label='toto',ms=10,color='k',marker='o',ls='') fig.show() for iter in range(5): X.append(numpy.random.rand()) Y.append(numpy.random.rand()) sp.set_data(X,Y) axe.set_xlim(min(X),max(X)) axe.set_ylim(min(Y),max(Y)) raw_input('...') fig.canvas.draw()

Si este es el comportamiento que está buscando, solo necesita crear una función agregando los datos de sp, y obtener en esa función los nuevos puntos que desea trazar (ya sea con la gestión de E/S o cualquiera que sea el proceso de comunicación que esté). utilizando). Espero que ayude.

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda