Maison > Article > développement back-end > Comment tracer de manière non bloquante avec Matplotlib : pourquoi « show(block=False) » ne fonctionne-t-il pas toujours ?
Tracer de manière non bloquante avec Matplotlib : résoudre les problèmes d'exécution
Lorsque vous essayez de tracer une fonction avec Matplotlib sans interrompre l'exécution, vous peut rencontrer des difficultés liées aux interactions GUI et backend. Un malentendu courant est l'utilisation de show(block=False), qui peut ne pas toujours fonctionner en fonction du backend.
Le code fourni démontre l'utilisation de show(block=False), mais il semble que vous soyez ne pas utiliser plt.ion() avant d'appeler show(). plt.ion() active le mode interactif, permettant un traçage non bloquant où vous pouvez dessiner et suspendre les mises à jour.
Avec plt.ion() activé, vous pouvez appeler plt.show() pour afficher la fenêtre de tracé . Cette fenêtre restera ouverte et non bloquante, vous permettant de poursuivre l'exécution. Cependant, pour voir les tracés mis à jour, vous devez utiliser plt.draw() pour redessiner le canevas et plt.pause(timeout) pour suspendre l'exécution pendant une brève période. Le paramètre timeout dans plt.pause() détermine la durée de la pause en secondes.
Dans votre cas spécifique, il est également crucial de noter qu'à chaque fois que vous appelez plt.plot(), un nouveau tracé sera être créé dans la même fenêtre. Si vous souhaitez plutôt mettre à jour le tracé existant, vous devez utiliser plt.plot(x, y, color='r'). Cela tracera les nouveaux points de données en rouge, tout en préservant le tracé existant.
Vous trouverez ci-dessous une version révisée de votre code qui devrait résoudre le problème non bloquant et mettre à jour le tracé existant :
<code class="python">import matplotlib.pyplot as plt import numpy as np def main(): plt.ion() # Activate interactive mode plt.show() # Display the plot window plt.axis([-50,50,0,10000]) x = np.arange(-50, 51) for pow in range(1,5): y = [Xi**pow for Xi in x] plt.plot(x, y, color='r') # Update the plot in red color plt.draw() plt.pause(0.001) # Pause for a brief period input("Press [enter] to continue.") if __name__ == '__main__': main()</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!