在 matplotlib 内联和 QT 后端之间切换 Python 脚本
Posted
技术标签:
【中文标题】在 matplotlib 内联和 QT 后端之间切换 Python 脚本【英文标题】:Python script switching between matplotlib inline and QT backend 【发布时间】:2015-10-10 12:30:01 【问题描述】:我希望能够基于名为 inlinemode 的变量(例如下面的代码片段)在内联显示 matplotlib 图形或在脚本文件中使用 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 魔术 %matplotlib inline -或- %matplotlib qt,这将完成此任务。但是,据我所知,无法从脚本文件中发送这些魔法。
任何建议将不胜感激!
(仅供参考:我在 Windows 10 上的 Anaconda Python 2.7 中从 Spyder 运行)
【问题讨论】:
使用%matplotlib qt
魔法
如果我使用 %run foo.py 从 IPython 控制台执行脚本,魔法就会起作用。但是,如果我使用 Spyder 的运行按钮,它会将 runfile('foo.py') 发送到 IPython 控制台。在这种情况下,它会在 %matplotlib qt 语句中出现语法错误。
【参考方案1】:
这可以使用以下块来实现,这将允许脚本在 IPython 中使用 %run
或直接通过标准 python 运行。
try:
import IPython
shell = IPython.get_ipython()
shell.enable_matplotlib(gui='inline')
except:
pass
这就是%matplotlib inline
的魔力实际上在做的事情。您可以将关键字参数更改为 gui='qt'
以选择不同的后端。
【讨论】:
以上是关于在 matplotlib 内联和 QT 后端之间切换 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章
在同一进程中将 matplotlib 与 Qt5 后端一起使用并运行现有 QApplication
在 Matplotlib 3.1.2 中使用 qt5agg 后端,get_backend() 会改变行为