如何在Spyder/IPython/matplotlib中重新获取交互式绘图?
我把Python(x,y)从2.7.2.3升级到了2.7.6.0,是在Windows 7上进行的(我很高兴看到我终于可以输入function_name?
来查看对象检查器中的文档字符串了),但是现在绘图的功能不再像以前那样好用了。
之前(Spyder 2.1.9,IPython 0.10.2,matplotlib 1.2.1),当我运行这个脚本时,它会在一个互动窗口中并排显示子图:
现在(Spyder 2.2.5,IPython 1.2.0,Matplotlib 1.3.1),当我尝试绘图时,它只会把子图显示成很小的内嵌PNG图片,这在IPython中是个变化:
所以我去选项里查看,发现了这个:
看起来这个设置可以让我恢复到以前的互动绘图方式,四个子图并排显示,但当我切换到“自动”选项后,尝试绘图时却什么都不显示,根本没有图。
如果我把这个下拉菜单切换到Qt,或者取消勾选“激活支持”,它只会绘制第一个子图,或者只显示一部分,然后就停止了:
我该如何才能恢复到以前那种可以互动的四个并排子图的效果呢?
6 个回答
其实这个问题很简单,不需要写代码就能解决:
1. 点击控制台上方的“Plots”标签。
2. 然后在图形界面的右上角点击“选项”按钮。
3. 最后取消勾选“静音内联绘图”这个选项。
现在重新运行你的脚本,你的图表就应该能在控制台里显示出来了。
正如评论中所说,问题出在你的脚本上。实际上,有两个问题:
- 有一个matplotlib的错误,我猜是你在某个地方传了一个
None
的参数。可能是因为使用了defaultdict? - 你在每个子图后都调用了
show()
。show()
应该在你的脚本最后只调用一次。另一种方法是使用交互模式,可以在matplotlib的文档中查找ion
。
你可以通过在Spyder的IPython控制台里输入一些内置的魔法命令,快速控制图形的显示方式。我觉得这样比从偏好设置菜单里选择要快得多。更改后会立即生效,不需要重启Spyder或内核。
如果你想切换到“自动”(也就是交互式)图形显示,可以输入:
%matplotlib auto
如果你想切换回“内联”显示,可以输入:
%matplotlib inline
(注意:这些命令在非IPython控制台中是无效的)
想了解更多背景信息,可以查看这个链接:“%matplotlib inline”的目的
把后台设置成自动:
工具 > 首选项 > IPython 控制台 > 图形 > 图形后台 > 后台:自动
然后关闭再打开 Spyder。