2010-01-12 6 views
3

Il y a longtemps, je comparais la sortie de deux fonctions en utilisant python et matplotlib. Le résultat était aussi simple que simple, car tracer avec matplotlib est assez facile: je viens de tracer deux tableaux avec des marqueurs différents. Part de gâteau.Modifier dynamiquement le contenu d'un graphe matplotlib

Maintenant, je me retrouve avec le même problème, mais maintenant j'ai beaucoup de paire de courbes à comparer. J'ai d'abord essayé de tout tracer avec des couleurs et des marqueurs différents. Cela ne m'a pas satisfait car les portées de chaque courbe ne sont pas tout à fait les mêmes. En plus de cela, j'ai rapidement manqué de couleurs et de marqueurs qui étaient suffisamment différents pour identifier (RGBCMYK, après cela, les couleurs personnalisées ressemblent à celles des précédentes).

J'ai également essayé de sous-tracer chaque paire de courbes, obtenant une fenêtre avec beaucoup de tracés. Trop de monde. J'ai essayé une fenêtre par intrigue, trop de fenêtres.

Je me demandais s'il y a un widget de existant ou si vous avez une suggestion (ou une autre idée) d'y arriver:

Je veux voir une paire de courbes, puis sélectionnez facilement le prochain , avec une barre de défilement, un bouton, un défilement de la souris ou tout autre widget ou événement. En changeant les courbes, la précédente devrait disparaître, la légende devrait changer et son axe aussi.

+0

Je vise actuellement à connecter un gestionnaire d'événements qui modifie les données de l'intrigue et le repeint. – YuppieNetworking

Répondre

8

Eh bien, j'ai réussi à le faire avec un gestionnaire d'événements pour les clics de souris. Je vais le changer pour quelque chose de plus utile, mais je poste quand même ma solution.

import matplotlib.pyplot as plt 

figure = plt.figure() 
# plotting 
plt.plot([1,2,3],[10,20,30],'bo-') 
plt.grid() 
plt.legend() 

def on_press(event): 
    print 'you pressed', event.button, event.xdata, event.ydata 
    event.canvas.figure.clear() 
    # select new curves to plot, in this example [1,2,3] [0,0,0] 
    event.canvas.figure.gca().plot([1,2,3],[0,0,0], 'ro-') 
    event.canvas.figure.gca().grid() 
    event.canvas.figure.gca().legend() 
    event.canvas.draw() 


figure.canvas.mpl_connect('button_press_event', on_press) 
2

Je aime vraiment utiliser les traits. Si vous suivez le tutoriel Writing a graphical application for scientific programming, vous devriez être capable de faire ce que vous voulez. Le tutoriel montre comment interagir avec un graphe matplotlib en utilisant une interface utilisateur graphique.

Questions connexes