在MATLAB中,有一个非常方便的选项可以将当前图形复制到剪贴板。虽然Python / numpy / scipy / matplotlib是MATLAB的一个很好的替代品,但遗憾的是缺少这样的选项。
这个选项可以轻松添加到Matplotlib数据中吗?优选地,所有MPL数字应自动受益于此功能。
我正在使用MPL的Qt4Agg后端和PySide。
答案 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)
最后一条评论非常有用。
使用以下软件包安装软件包
pip install addcopyfighandler
导入模块后导入模块,例如:
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from matplotlib.cm import get_cmap
import addcopyfighandler
使用ctr + C
将图形复制到剪贴板
享受。