Así que estoy representando una red Token Ring (haciendo la simulación en SimPy), soy totalmente novato en matplotlib, pero me dijeron que sería realmente bueno para representando mi simulación visualmenteMatplotlib en Python - Dibujando formas y animándolas
Así que busqué en Google y descubrí cómo dibujar formas y líneas, usando add_patch y add_line, respectivamente, a los ejes (creo). Así que ahora tengo esta salida que es absolutamente bien:
(No puede enviar imágenes hasta ahora !!) http://img137.imageshack.us/img137/7822/screenshot20100121at120.png
Pero me estoy haciendo esto usando la función pylab.show(), y lo que pienso Lo que quiero es lograr esto usando la función pylab.plot() para poder luego actualizarla a medida que progresa mi simulación usando pylab.draw() luego.
Mi código es el siguiente:
plab.ion()
plab.axes()
for circ in self.circleList:
plab.gca().add_patch(circ)
for line in self.lineList:
plab.gca().add_line(line)
plab.axis('scaled')
plab.show()
Dónde circleList y LineList son listas con los círculos y las líneas en el diagrama
probablemente estoy algo simple malentendido aquí, pero en realidad no puede encuentre ejemplos que no estén basados abiertamente en gráficos que usen la función plot().
Aclaración:
¿Cómo puedo conseguir que la misma salida, utilizando pylab.plot() en lugar de pylab.show()?
Mark, gracias por toda su ayuda. Para aclarar, para lo que necesito esto es para cambiar el color de los círculos a medida que se mueve un token (es decir, el que tiene el token puede ser rojo y el otro verde), lo maneja una biblioteca de simulación que se ejecuta en tiempo real . Sé que puede volver a dibujar tramas sobre la marcha utilizando el método pylab.draw() cuando el modo interactivo está activado (pylab.ion) pero no puede volver a dibujar una figura producida utilizando pylab.show(), solo una producida por pylab.plot() (¡Creo!) Así que necesito una forma de cambiar los colores del círculo individualmente antes de volver a dibujar. ¡Espero que eso tenga más sentido! Gracias –
@Duncan, pylab.draw() bloquea el resto de la aplicación, para animar con ella pasas una función de devolución de llamada. Cómo se pasa la función depende de tu back-end. Por ejemplo, con la GTK predeterminada, usted llama a gobject.idle_add (animate); plt.show(). Creo que su principal problema es cómo mantener una simulación en ejecución (en un proceso o hilo separado) y actualizar la ventana de GTK al mismo tiempo. Trataré de encontrar un ejemplo. – Mark
@Duncan, ver las ediciones de mi respuesta. – Mark