2017-06-08 5 views
1

J'ai un thread de tracé séparé avec matplotlib et multiprocessus. Maintenant, si j'effectue un zoom interactif sur la fenêtre, autoscale_view() ne fonctionne plus (corrigé avec autoscale()). Mais le bouton "home" de la boîte à outils ne fonctionne toujours pas: il semble appeler autoscale_view() et n'affiche pas la vue mise à jour mais l'ancienne vue (au point zoom avant). Exemple de code:Réinitialiser l'historique de la barre d'outils dans Matplotlib avec le backend Qt4Agg

import matplotlib 
matplotlib.use("qt4agg") 
from matplotlib import pyplot as plt 
import multiprocessing 

def reset_view(): 
    plt.get 

    xdata = [] 
    ydata = [] 
    temp = 0 

    test_ax = plt.gca() 
    test_line, = plt.plot(xdata, ydata) 
    plt.show(block=False) 

    for i in range(10): 
     temp = temp+1 
     xdata.append(temp) 
     ydata.append(temp) 
     test_line.set_data(xdata, ydata) 

     test_ax.relim() 
     test_ax.autoscale(tight= False) 
     plt.show(block=False) 
     plt.pause(2) 

plot_thread = multiprocessing.Process(target = reset_view, args =()) 

reset_view() 

if __name__ == '__main__': 
    plot_thread.start() 

Essayez d'effectuer un zoom avant pendant le traçage et d'appuyer sur le bouton principal après. Existe-t-il un moyen de rendre le bouton d'accueil utiliser autoscale() au lieu de autoscale_view() ou de réinitialiser & mettre à jour l'historique de la barre d'outils afin qu'il ne revienne pas aux anciennes vues?

P.s .: « Home » -bouton = reset Afficher l'original

Répondre

2

j'ai finalement été en mesure de le comprendre (essayez & erreur): Il y a une fonction pour mettre à jour la barre d'outils. Cela met à jour l'historique des barres d'outils et définit la fonction home() à la nouvelle vue. Solution:

figure = plt.gcf() #Get current figure 
toolbar = figure.canvas.toolbar #Get the toolbar handler 
toolbar.update() #Update the toolbar memory 
plt.show(block = False) #Show changes