如何为Matplotlib数字添加剪贴板支持?

时间:2015-07-24 09:53:19

标签: python matplotlib plot scipy clipboard

在MATLAB中,有一个非常方便的选项可以将当前图形复制到剪贴板。虽然Python / numpy / scipy / matplotlib是MATLAB的一个很好的替代品,但遗憾的是缺少这样的选项。

这个选项可以轻松添加到Matplotlib数据中吗?优选地,所有MPL数字应自动受益于此功能。

我正在使用MPL的Qt4Agg后端和PySide。

4 个答案:

答案 0 :(得分:8)

是的,它可以。我们的想法是将默认的plt.figure替换为自定义的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() (一种称为monkey patching的技术),它将注册键盘处理程序复制到剪贴板。以下代码允许您通过按Ctrl + C将任何MPL图形复制到剪贴板:

from matplotlib.pyplot import *

请注意,如果您想使用figure(例如在交互式会话中),您需要在执行上述代码之后执行,否则{{1}导入默认命名空间的将是未修补的版本。

答案 1 :(得分:1)

EelkeSpaak's answer中描述的解决方案的基础上,我们可以编写一个函数来代替matplotlib的Figure类来修补猴子:

let yourCollection = mongoose.connection.db.collection('<tbd>');
const result = await yourCollection.find({...});

请注意,此变体使用Qt5。

答案 2 :(得分:0)

EelkeSpaak的解决方案包装在一个不错的模块中: addcopyfighandler

只需通过pip install addcopyfighandler安装,然后在导入matplotlib或pyplot之后导入模块。

答案 3 :(得分:0)

最后一条评论非常有用。

  1. 使用以下软件包安装软件包

    pip install addcopyfighandler

  2. 导入模块后导入模块,例如:

    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm
    from matplotlib.cm import get_cmap
    import addcopyfighandler

  3. 使用ctr + C将图形复制到剪贴板

享受。