Python脚本在matplotlib内联和QT后端之间切换

Python脚本在matplotlib内联和QT后端之间切换,python,qt,matplotlib,backend,Python,Qt,Matplotlib,Backend,我希望能够在内联显示matplotlib图形或基于名为inlinemode的变量(如下面的代码片段)在脚本文件中使用QT后端之间切换 import matplotlib.pylab as plt inlinemode = False if inlinemode: print "plot will be inline..." else: print "plot will be qt..." plt.switch_backend('qt4agg') plt.figure

我希望能够在内联显示matplotlib图形或基于名为inlinemode的变量(如下面的代码片段)在脚本文件中使用QT后端之间切换

import matplotlib.pylab as plt
inlinemode = False
if inlinemode:   
    print "plot will be inline..."
else:
    print "plot will be qt..."
    plt.switch_backend('qt4agg')
plt.figure()
plt.plot(range(10))
默认情况下,我的IPython控制台以内联模式启动,执行上面的代码片段仍然会生成内联图而不是qt窗口。如果可以在If块中发送IPython magic%matplotlib inline-或-%matplotlib qt,则可以完成此任务。然而,从我收集到的信息来看,不可能从脚本文件发送这些魔法

如有任何建议,将不胜感激


(仅供参考:我是在Windows 10上的Anaconda Python 2.7中从Spyder运行的)

这可以使用下面的块,这将允许脚本在IPython中使用
%run
或直接通过标准Python运行

try:
    import IPython
    shell = IPython.get_ipython()
    shell.enable_matplotlib(gui='inline')
except:
    pass   

这就是magic
%matplotlib inline
在引擎盖下实际执行的操作。您可以将关键字参数更改为
gui='qt'
以选择不同的后端。

使用
%matplotlib-qt
magic如果我使用%run foo.py从IPython控制台执行脚本,则该魔术会起作用。但是,如果使用Spyder中的run按钮,它会将runfile('foo.py')发送到IPython控制台。在这种情况下,%matplotlib qt语句出现语法错误。