2015-07-24 11 views
5

MATLAB'da, geçerli rakamı panoya kopyalamak için çok uygun bir seçenek vardır. Python/numpy/scipy/matplotlib MATLAB'a harika bir alternatif olsa da, böyle bir seçenek maalesef eksiktir.Matplotlib rakamlarına pano desteği nasıl eklenir?

Bu seçenek Matplotlib rakamlarına kolayca eklenebilir mi? Tercihen, tüm MPL şekilleri otomatik olarak bu işlevsellikten faydalanmalıdır.

PySide ile MPL'nin Qt4Agg arka ucunu kullanıyorum.

cevap

8

Evet, yapabilir. Buradaki fikir, varsayılan plt.figure'u, panoya kopyalamak için bir klavye işleyicisini enjekte eden özel bir (monkey patching olarak bilinen bir teknik) ile değiştirmektir. Eğer (interaktif oturumda örneğin) from matplotlib.pyplot import * kullanmak isterseniz, sonra çok yapmamız gereken

import io 
import matplotlib.pyplot as plt 
from PySide.QtGui import QApplication, QImage 

def add_clipboard_to_figures(): 
    # use monkey-patching to replace the original plt.figure() function with 
    # our own, which supports clipboard-copying 
    oldfig = plt.figure 

    def newfig(*args, **kwargs): 
     fig = oldfig(*args, **kwargs) 
     def clipboard_handler(event): 
      if event.key == 'ctrl+c': 
       # store the image in a buffer using savefig(), this has the 
       # advantage of applying all the default savefig parameters 
       # such as background color; those would be ignored if you simply 
       # grab the canvas using Qt 
       buf = io.BytesIO() 
       fig.savefig(buf) 
       QApplication.clipboard().setImage(QImage.fromData(buf.getvalue())) 
       buf.close() 

     fig.canvas.mpl_connect('key_press_event', clipboard_handler) 
     return fig 

    plt.figure = newfig 

add_clipboard_to_figures() 

Not: Aşağıdaki kod Ctrl + C tuşlarına basarak panoya herhangi MPL rakam kopyalama sağlayacak Yukarıdaki kodu uyguladınız, aksi halde varsayılan ad alanına içe aktardığınız figure, gönderilmemiş sürüm olacaktır.