2010-08-25 20 views
3

Je voudrais personnaliser l'affichage de l'image matplotlib pour que je puisse taper control-c et copier l'image dans le presse-papiers afin que je puisse la copier dans la feuille de calcul openoffice pour organiser mes résultats bruts de données et d'images. Est-ce qu'il y a un moyen de faire ça? Merci!Personnalisation de l'affichage de l'image matplotlib pour ajouter un copier/coller

+1

Je suis sûr que c'est possible, mais si Matplotlib ne possède pas déjà la fonctionnalité de copie intégrée, je pense qu'il faudrait beaucoup de travailler pour l'ajouter. Si vous avez besoin d'une solution plus rapide, vous pouvez également envisager d'exporter l'image de Matplotlib vers un fichier (ce qui peut être fait à partir du code Python), puis de l'importer dans OpenOffice. –

+0

Si cela ne vous dérange pas les solutions de hack rapide manuel, je suggérerais l'outil Snipping de Windows (fourni avec Windows 7). Il donne un moyen très rapide de sélectionner la zone d'écran et de la copier tout de suite. – karpathy

+0

im sur Ubuntu! Je pense avoir trouvé des solutions pour sauvegarder l'image et la copier sous linux, je me demandais vraiment si je pouvais modifier l'affichage interactif de graphes matplotlib afin qu'il puisse capturer control-c et ensuite appeler la fonction de copie que je crée. – josh

Répondre

4

Si vous utilisez le backend wx, FigureCanvasWxAgg dispose d'une méthode Copy_to_Clipboard que vous pouvez utiliser. Vous pouvez lier l'événement de touche CTRL + C pour appeler cette méthode. Pour un exemple, voir ceci sample code.

+0

mais est-il possible d'avoir le graphique automatiquement mis à jour lorsque vous appelez des fonctions graphiques comme plot(), title() (mode interactif comme ipython?) – josh

+0

vous pouvez effacer la figure et redessiner, ou vous pouvez utiliser quelque chose comme les méthodes Pour l'animation sur cette page: http://www.scipy.org/Cookbook/Matplotlib/Animations – ars

+0

arg, wx backend ne fonctionne pas pour moi, les parcelles une fois ne fonctionne pas. coincé avec tk backend – josh

2
import matplotlib 
import matplotlib.pyplot as plt 
if not globals().has_key('__figure'): 
    __figure = matplotlib.pyplot.figure 

def on_key(event): 
    print event 
    if event.key=='c': 
     #print event.canvas.__dict__#.Copy_to_Clipboard(event=event) 
     # print event.canvas._tkphoto.__dict__ 
     plt.savefig("/tmp/fig.png") 
def my_figure(): 
    fig = __figure() 
    fig.canvas.mpl_connect('key_press_event',on_key) 
    return fig  
matplotlib.pyplot.figure = my_figure 

Cela fonctionne pour tk backend, mais je n'ai aucune idée de la façon de copier une image dans un presse-papiers. Pour le texte, je peux utiliser xclip, mais les images ne fonctionnent pas! Et pour une raison quelconque, le backend wx ne fonctionne pas très bien sur ubuntu ...