Sì, è possibile. L'idea è di sostituire il valore predefinito plt.figure
con uno personalizzato (una tecnica nota come monkey patching) che inietta un gestore di tastiera per la copia negli Appunti. Il seguente codice vi permetterà di copiare qualsiasi figura MPL negli appunti premendo Ctrl + C:
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()
Si noti che se si desidera utilizzare from matplotlib.pyplot import *
(ad esempio, in una sessione interattiva), è necessario fare in modo dopo hai eseguito il codice sopra, altrimenti lo figure
che importi nello spazio dei nomi predefinito sarà la versione senza patch.