我使用matplotlib 1.4和OSX后端:
>>> matplotlib.get_backend()
u'MacOSX'
如果我绘制任何东西,窗口是活跃且健康的:我可以使用缩放按钮,保存等。我导入Qt的那一刻:
from PyQt4 import QtGui, QtCore
情节窗口冻结,如果我将鼠标悬停在它们上方,将产生旋转的沙滩球。我可以使用pl.draw()
更新绘图窗口,但我无法与它们进行交互。特别是,当通过Dock或apple-tab激活时,Mac OS将不再将窗口置于前面。
这尤其是一个问题,因为我正在使用另一个导入PyQt4
的模块,但我需要使用该模块,并提供交互式绘图。这个问题有解决方法吗?
答案 0 :(得分:1)
使用--matplotlib
参数启动IPython会加载并使用matplotlib
中设置的默认后端初始化.matplotlibrc
。有一个matplotlib限制,一旦加载后你就无法切换后端。这是use()
的{{3}}:
首次导入
pyplot
之前必须先调用此函数;或者,如果您未使用pyplot
,则必须在导入matplotlib.backends
之前调用它。
有一个实验switch_backend()
,但这适用于described in the documentation,不适用于Qt或MacOSX后端。
此功能实验性,并且只能切换到图像后端[...]如果您尝试以交互方式从一个GUI后端切换到另一个GUI后端,则会爆炸。
所有这一切的结果是,一旦你用--matplotlib
启动了IPython,就不可能改变后端(不管你是否已经确认)。解决方案是以ipython --matplotlib=qt
开头或更改.matplotlibrc
文件中的默认后端。
在MacOSX上,matplotlib配置文件位于~/.matplotlibrc/matplotlibrc
。打开该文件并更改以下行:
backend : MacOSX
为...
backend : Qt4Agg
保存文件,默认情况下,当您使用ipython --matplotlib
时,IPython(和matplotlib)将启动Qt4后端。
image-only backends中提供了.matplotlibrc
配置中的更多信息。