【问题标题】:How to check that pylab backend of matplotlib runs inline?如何检查 matplotlib 的 pylab 后端是否内联运行?
【发布时间】:2013-02-26 19:36:09
【问题描述】:

我正在修改一个使用 matplotlib 绘制一些特殊图形的 python 模块。

目前,该模块只是将所有图形保存为文件。

我希望能够在 ipython notebook 中工作时导入模块并查看“内联”结果,另一方面,我希望保留在导入模块时将图形保存为文件的默认功能在所有其他情况下。

所以我需要以某种方式检查模块是否已导入 ipython notebook 并且 pylab 是否内联运行。

如何检查?

【问题讨论】:

    标签: python matplotlib ipython ipython-notebook


    【解决方案1】:

    试试怎么样:

    try:
        cfg = get_ipython().config
        print('Called by IPython.')
    
        # Caution: cfg is an IPython.config.loader.Config
        if cfg['IPKernelApp']:
            print('Within IPython QtConsole.')
    
            try:
                if cfg['IPKernelApp']['pylab'] == 'inline':
                    print('inline pylab loaded.')
                else:
                    print('pylab loaded, but not in inline mode.')
            except:
                print('pylab not loaded.')
        elif cfg['TerminalIPythonApp']:
            try:
                if cfg['TerminalIPythonApp']['pylab'] == 'inline':
                    print('inline pylab loaded.')
                else:
                    print('pylab loaded, but not in inline mode.')
            except:
                print('pylab not loaded.')
    except:
        print('Not called by IPython.')
    

    【讨论】:

      【解决方案2】:

      您可以通过以下方式检查 matplotlib 后端:

      import matplotlib
      matplotlib.get_backend()
      

      特别是检查内联 matplotlib:

      mpl_is_inline = 'inline' in matplotlib.get_backend()
      

      请注意,使用 IPython 笔记本,您可以始终显示内联图形,而不管活动的 matplotlib 后端如何,使用:

      display(fig)
      

      【讨论】:

        【解决方案3】:

        这让我开始搜索,我想我找到了解决方案。不确定这是否实际记录或什至是有意的,但它可能非常有效:

        get_ipython().config['IPKernelApp']['pylab'] == 'inline'
        

        get_ipython() 似乎是仅在运行 IPython 时定义的方法;它返回我假设的当前 IPython 会话。然后,您可以访问config 属性,它是一个字典,其中包含“IPKernelApp”元素。后者本身就是一个字典,可以包含一个键pylab,可以是字符串'inline'

        我没有广泛尝试过,但我猜如果你没有运行 pylab 内联,上面的代码行将评估为 False。

        更重要的是,当您不运行 notebook 或 pylab 选项时,它会引发 KeyError,因此您需要捕获该异常并将引发的异常视为“否”以运行带有 pylab 内联的笔记本。

        最后,get_ipython() 可能会抛出一个NameError,和上面类似,这当然也意味着你没有运行 IPython。

        我只对此进行了最低限度的测试,但将其导入我的 IPython 笔记本,然后在默认的 Python cmdline 上确实显示它可以工作。

        让我们知道这是否适合您。

        【讨论】:

        • 此配置检查不会捕获笔记本服务器未使用 --pylab inline 启动的情况,而是在运行时在每个笔记本的基础上使用 %pylab inline 激活。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-09-09
        • 2012-12-03
        • 2011-10-20
        • 2016-06-26
        • 2013-11-09
        • 2013-04-05
        • 1970-01-01
        相关资源
        最近更新 更多