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.

matplotlib: Problema con la actualización en tiempo real de la figura en un bucle.

Quiero dibujar 4 bloques donde sus colores cambien aleatoriamente a blanco o rojo. Sin embargo, cuando programo como abajo, los colores anteriores permanecen sin cambios hasta que los cuatro bloques estén rojos.

from numpy import random, round
from matplotlib.pyplot import figure, show, close, clf, cla, ion, ioff, pause

LDX = [100, 100, 150, 150]
LDY = [50, 100, 50, 100]

fig = figure()
ax = fig.add_axes([0.125, 0.1, 0.7, 0.8])
ion()
for ii in range(100):
randperm = round(random.rand(len(LDX)))
for i in range(len(LDX)):
ldx = LDX[i]
ldy = LDY[i]
h11, = ax.plot(
[ldx-25, ldx+25, ldx+25, ldx-25, ldx-25],
[ldy+25, ldy+25, ldy-25, ldy-25, ldy+25],
color=’k’)
for i in range(len(LDX)):
if randperm[i]==1:
ldx = LDX[i]
ldy = LDY[i]
h12, = ax.fill(
[ldx-25, ldx+25, ldx+25, ldx-25, ldx-25],
[ldy+25, ldy+25, ldy-25, ldy-25, ldy+25],
color=’r’)
fig.show()
fig.canvas.draw()
fig.canvas.flush_events()
pause(0.001)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para trazar 4 bloques con colores que cambian aleatoriamente, se pueden realizar las siguientes modificaciones en el código:

    1. Eliminar la línea “h11, = ax.plot” ya que no es necesaria para esta tarea.
    2. Agregar la línea “ax.clear()” antes del segundo bucle “for” para borrar la gráfica anterior.
    3. Cambiar el argumento de color en el segundo bucle “for” a “color=random.choice([‘w’, ‘r’])”.

    El código modificado sería:

    from numpy import random, round
    from matplotlib.pyplot import figure, show, \
         close, clf, cla, ion, ioff, pause
    
    
    LDX = [100, 100, 150, 150]
    LDY = [50, 100, 50, 100]
    
    fig = figure()
    ax = fig.add_axes([0.125, 0.1, 0.7, 0.8])
    ion()
    for ii in range(100):
        randperm = round(random.rand(len(LDX)))
        ax.clear()
        for i in range(len(LDX)):
            if randperm[i]==1:
                ldx = LDX[i]
                ldy = LDY[i]
                ax.fill(
                    [ldx-25, ldx+25, ldx+25,
                     ldx-25, ldx-25], 
                    [ldy+25, ldy+25, ldy-25,
                     ldy-25, ldy+25],
                    color=random.choice(['w', 'r']))
        fig.show()
        fig.canvas.draw()
        fig.canvas.flush_events()
        pause(0.001)
    

    Con estas modificaciones, cada bloque tendrá un color generado aleatoriamente entre blanco y rojo, y se actualizará en tiempo real.

Comments are closed.