Luk*_*vis 2 qt matplotlib ipython python-3.x
%matplotlib在我的设置中,从我的终端应用程序切换到任何其他正在运行的应用程序后,用 IPython shell 的魔法创建的图弹出窗口(不完全确定它是如何工作的)消失,然后再返回。因此,举例来说,如果我正在绘制一个图形并想要在 Chrome 中查看 StackOverflow 帖子,那么在返回到我的终端应用程序后,我必须重新声明命令plt.show()以重新打开弹出窗口。
这种行为听起来是否不典型(我的设置可能有问题),或者如果它是典型的,是否有一些可能的解决方法?这对于我的安装/操作系统来说可能是独一无二的吗?
我在 MacOS Sierra 上运行最新(刚刚更新)版本的 Anaconda 和 IPython。使用 iTerm2 和 Terminal 都会出现此问题;似乎与终端应用程序无关。
注意:我的目标是复制matlab -nodesktop在终端中生成绘图的行为,这会从 Matlab 应用程序创建持久的图形窗口。
编辑:我决定有条不紊地检查 ipython 和 jupyter qtconsole 选项的不同组合,这里是令人疯狂且令人着迷的不一致结果,使用命令行参数、IPython 加载后的魔术命令或两者的某种组合(简而言之,一个应该使用ipython --matplotlib=qt5):
对于 iPython 终端:
指定--gui:
--gui=qt, %matplotlib qt: 尝试声明图后,得到“缺少 1 个必需的位置参数:'图'”(嗯...什么?)--gui=qt --matplotlib=qt:得到“没有名为 PyQt4 的模块”--gui=qt,%matplotlib qt5: 成功; 与 osx 不同的窗口格式,保存对话框提供文件类型选择--gui=qt --matplotlib=qt5:成功; 与上面相同 --gui=qt,%matplotlib osx: 成功; 窗口作为单独的应用程序弹出--gui=qt --matplotlib=osx: QApplication 窗口永远不会启动;图显示为弹出窗口/终端应用程序的一部分,没有自己的“窗口”不指定 GUI:
--matplotlib=qt5或%matplotlib qt5:成功
--matplotlib=qt或者%matplotlib qt:得到“没有名为 PyQt4 的模块”
--matplotlib=osx或者%matplotlib osx:QApplication 窗口永远不会启动;数字显示为临时弹出窗口
对于 Jupyter QTConsole(即jupyter qtconsole ...)
指定--gui:
--gui=qt, %matplotlib qt5: 获取“运行时错误:无法激活多个 GUI 事件循环”
--gui=qt --matplotlib=qt5:有效,并为图形创建 QApplication 窗口(说真的......什么?那为什么不起作用%matplotlib qt5?)
--gui=qt --matplotlib=inline或者%matplotlib inline:尝试使用后plt.show(),得到“matplotlib当前正在使用非GUI后端”
--gui=qt, %matplotlib osx: 获取“运行时错误:无法激活多个 GUI 事件循环”
--gui=qt --matplotlib=osx:可以,但没有 QApplication 窗口;再次,只是一个无窗口的弹出窗口。
不指定 GUI:
--matplotlib=qt5或%matplotlib qt5:与我们指定 GUI 时相同:有效
--matplotlib=osx或%matplotlib osx:与我们指定 GUI 时相同:有效,但没有 QApplication 窗口
--matplotlib=inline或者%matplotlib inline:尝试使用后plt.show(),得到“matplotlib当前正在使用非GUI后端”
--matplotlib=qt:获取“Eventloop 或 matplotlib 集成失败。是否安装了 matplotlib?”
%matplotlib qt:得到“没有名为 PyQt4 的模块”
原答案:
只需使用
%gui qt
Run Code Online (Sandbox Code Playgroud)
magic,其次是任何%matplotlib <backend>基于 GUI 的;在 Mac 上,我使用了%matplotlib osx. gui 魔法创建一个持久的 Qt 窗口作为它自己的 QApplication,而不是临时的弹出窗口。