J'ai joué avec Numpy et matplotlib ces derniers jours. J'ai des problèmes en essayant de faire de matplotlib plot une fonction sans bloquer l'exécution. Je sais qu'il y a déjà beaucoup de fils ici sur SO posant des questions similaires, et j'ai beaucoup cherché sur Google mais je n'ai pas réussi à faire fonctionner cela.
J'ai essayé d'utiliser show (block = False) comme certains le suggèrent, mais tout ce que j'obtiens est une fenêtre figée. Si j'appelle simplement show (), le résultat est tracé correctement mais l'exécution est bloquée jusqu'à ce que la fenêtre soit fermée. À partir d 'autres threads que j'ai lus, je soupçonne que si show (block = False) fonctionne ou non dépend du backend. Est-ce correct? Mon back-end est Qt4Agg. Pourriez-vous jeter un œil à mon code et me dire si quelque chose ne va pas? Voici mon code. Merci pour toute aide.
from math import *
from matplotlib import pyplot as plt
print plt.get_backend()
def main():
x = range(-50, 51, 1)
for pow in range(1,5): # plot x^1, x^2, ..., x^4
y = [Xi**pow for Xi in x]
print y
plt.plot(x, y)
plt.draw()
#plt.show() #this plots correctly, but blocks execution.
plt.show(block=False) #this creates an empty frozen window.
_ = raw_input("Press [enter] to continue.")
if __name__ == '__main__':
main()
PS. J'ai oublié de dire que je voudrais mettre à jour la fenêtre existante chaque fois que je trace quelque chose, au lieu d'en créer une nouvelle.
matplotlib
.
plt.ion()
avantplt.show()
? Il doit alors être non bloquant car chaque tracé est généré dans un thread enfant.