首页 > 解决方案 > 我可以阻止 Spyder 暂时显示内联图像吗?

问题描述

在 Spyder IDE 中,我想保留内联控制台绘图(我不想为每个绘图生成单独的窗口),但我想以编程方式禁用绘图,即在不同的单元格中。

在我的工作流程中,我需要绘制一些简单的图形,然后生成图形并将它们保存为视频帧(数千个)。我的框架是通过加载 jpg 图像创建的,然后覆盖一些注释,即;

for jpg_path in path_list:
    img = mpl.image.imread(jpg_path)
    ax.imshow(img)
    ax.text(etc...)
    fig.savefig(etc...)

我想保留内联后端;%matplotlib inline.

但是用类似的东西关闭绘图plt.ioff()

plt.ioff()仅适用于 ie%matplotlib qt后端,不适用于inline!

我有几种情况我忘记更改为%matplotlib qt(因为它不是 python 命令,我必须将它单独输入到控制台中)然后plt.ioff()- 导致 10000 张图像被发布到控制台中,从而冻结了我的机器。

标签: pythonmatplotlibipythonspyder

解决方案


好的,多亏了这个答案,我想我找到了答案;

https://stackoverflow.com/a/46360516/789215

关键是行 magics 的 python 命令get_ipython().run_line_magic('matplotlib', 'inline')。我创建了一个上下文管理器来包装我的视频帧 for-loop;

from IPython import get_ipython

class NoPlots:
    def __enter__(self):
        get_ipython().run_line_magic('matplotlib', 'qt')
        plt.ioff()
    def __exit__(self, type, value, traceback):
        get_ipython().run_line_magic('matplotlib', 'inline')
        plt.ion()

还是有更好的方法?


推荐阅读