如何在Spyder / IPython / matplotlib中再次获得交互式图?


91

我在Windows 7中从Python(x,y)2.7.2.3升级到2.7.6.0(很高兴看到我终于可以function_name?再次在Object Inspector中键入并看到文档字符串),但是现在绘图无法正常工作过去。

以前(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中变化

小型内联PNG

所以我进入选项,发现了这一点:

图形选项

这似乎表明我可以找回旧的交互式图,并排显示4个子图,但是当我切换到“自动”并尝试绘制某些内容时,它什么也没做。完全没有情节。

如果我将此下拉菜单切换为Qt,或取消选中“激活支持”,则它只会绘制第一个子图或部分子图,然后停止:

在此处输入图片说明

如何在可以与之交互的单个图形中获得4个并排子图的旧行为?


我认为这应该作为对pythonxy的错误报告。我天真的猜测是,他们正在使用pyplot处理那里的所有绘图,并为此而被咬了(这似乎是错误的,因为他们有自己的qt小部件)。
塔卡斯韦尔2014年

1
@tcaswell谁是“他们”,他们将用什么代替pyplot?
Endlith 2014年

1
您能否在pythonxy之外重现此问题(仅使用直接的ipython + qtconsole)?这里没有足够的信息来找出问题所在。
塔卡斯韦尔2014年

1
我猜这是Spyder中的一个错误(Spyder是IDE,pythonxy是发行版)。
托马斯K

1
@tcaswell:啊哈。看来我的脚本产生了matplotlib错误,然后将其发送到IPython控制台以外的其他地方。如果我改用Qt控制台,它们就会显示出来,而现在我正在寻找它,它们就会显示在Spyder的常规“控制台”选项卡中。如果我编写一个更简单的脚本,则无论状态机还是面向对象,它都可以工作。由于新的内联图,我以为我必须更改某些IPython设置。
endlith 2014年

Answers:


134

将后端更改为自动:

工具>首选项> IPython控制台>图形>图形后端>后端:自动

然后关闭并打开Spyder。


27
确实需要关闭和打开。只是想知道为什么这不是默认值。
Mathias711 '16

5
另外,对于仍然看不到自己绘图的任何人(例如我不是)​​,绘图窗口可能会悄无声息地出现在控制台窗口之后(至少在Windows 10的Spyder中如此),因此您可能不得不四处寻找窗口。
约书亚·格雷泽

3
对于那些发现困难的人,它位于python > preferences > IPython console > Graphics > Graphics backend > Backend: Automatic
cameronroytaylor

6
除了重新启动Spyder外,您还可以重新启动内核(通过在控制台中单击“设置”轮,然后单击“重新启动内核”,或通过键盘快捷键(在Mac Cmd +上))
Michael

我不知道为什么,但是更改为“自动”,然后重新启动Spyder,然后再更改为“内联”,则每当我在循环中发出输入命令时,便会开始显示内联图。这非常有帮助!
Josiah Yoder

50

您可以通过在Spyder的IPython控制台中键入内置的魔术命令来快速控制此命令,我发现它比从首选项菜单中选择这些命令要快。更改立即生效,而无需重新启动Spyder或内核。

要切换到“自动”(即交互式)图,请键入:

%matplotlib auto

然后,如果要切换回“内联”,请键入以下内容:

%matplotlib inline

(注意:这些命令在非IPython控制台中不起作用)

查看有关此主题的更多背景:“%matplotlib内联”的目的


在Python 3.6中,我获得matplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo

2
@Karlo,该错误是常规的“ python”解释器所预期的。此语法仅对ipython或Spyder有效。
Mike T

好的,我在Spyder中但在Python控制台中使用了它。实际上,它可以在IPython控制台中工作。
卡洛

3
有没有办法使用脚本进行设置?即选择脚本中图形的输出在哪里?谢谢。
罗伊

1
尽管这是在常规IPython窗口中执行此操作的方法,但在Spyder中似乎不起作用。使用菜单首选项对我有用;不知道为什么不这样。
乌龟很可爱

10

应用后:工具>首选项>图形>后端>自动 只需重新启动内核 在此处输入图片说明

而且您一定会获得“互动情节”。编码愉快!


5

如评论中所述,问题出在您的脚本中。实际上,有两个问题:

  • 有matplotlib错误,我想您是在None某个地方传递参数。也许由于defaultdict?
  • show()在每个子图之后调用。show()应该在脚本结尾处调用一次。另一种选择是使用交互模式,ion在matplotlib的文档中查找。

2

这实际上很容易解决,并且不需要任何编码:

1.单击控制台上方的“绘图”选项卡。2.然后在绘图屏幕的右上角单击选项按钮。3.最后取消选中“静音内联绘图”按钮

现在,重新运行脚本,图形就会显示在控制台中。

干杯。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.