Comment tracer de manière non bloquante avec Matplotlib : pourquoi « show(block=False) » ne fonctionne-t-il pas toujours ?

Barbara Streisand
Libérer: 2024-11-03 04:02:02
original
442 Les gens l'ont consulté

How to Plot in a Non-Blocking Way with Matplotlib: Why Does `show(block=False)` Not Always Work?

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal