编辑
不幸的是,目前这是不可能的。我发现它是一个bug in Spyder。开发人员是still figuring out how to approach this。
目标
在调试代码时可视化数据(我也想使用Spyder!)。
尝试#1:从Spyder的IPython运行 foo.bar
- 使用以下代码创建一个名为foo.py的文件:
from ipdb import set_trace as st
import matplotlib.pyplot as plt
def bar():
st()
字符串
- 在IPython中,键入以下内容:
In [4]: import foo
In [5]: foo.bar()
--Return--
None
> somewhere_over_the_rainbow\foo.py(5)bar()
3
4 def bar():
----> 5 st()
ipdb> plt.plot([1, 2], [3, 4])
[<matplotlib.lines.Line2D object at 0x05CA8E90>]
ipdb> plt.show()
型
Plot保持在“frozen”状态。如果我退出调试器,plot更新。如果我试图关闭plot,IPython崩溃。显然这两个都不受欢迎,并且都不允许我在调试时看到数据。
尝试#2:从IPython命令行运行foo.bar
- 使用与尝试#1中相同的foo.py:
- 从命令行打开IPython:
In [4]: import foo
In [5]: foo.bar()
--Return--
None
> somewhere_over_the_rainbow\foo.py(5)bar()
3
4 def bar():
----> 5 st()
ipdb> plt.plot([1, 2], [3, 4])
[<matplotlib.lines.Line2D object at 0x03904070>]
ipdb> plt.show()
型
程序显示情节,因为我期望.但我想使用Spyder.
尝试#3:从IPython命令行运行baz.bar
- 写baz.py:
from ipdb import set_trace as st
import matplotlib.pyplot as plt
st()
型
- 从命令行打开IPython:
In [4]: import baz
--Return--
None
> somewhere_over_the_rainbow\baz.py(4)<module>()
2 import matplotlib.pyplot as plt
3
----> 4 st()
ipdb> plt.
型
然后Spyder完全冻结。
有什么建议吗?
注#1:在我的完整代码中,我有许多文件和许多函数,因此将它们混合在一个没有函数的脚本中是不可行的。
注#2:使用任何matplotlib交互式命令(例如ion(),interactive(True)等)都没有效果。
注3:Spyder 2.0.12版,Python 2.6版,matplotlib 1.0.1版。
3条答案
按热度按时间efzxgjgh1#
(* 此处为Spyder维护者 *)Spyder4.2.0于2020年11月8日发布,支持在调试时使用交互式Matplotlib绘图的功能。这是开箱即用的,即不需要设置任何特殊选项。
对于以前的版本,最好的解决方案是在
ipdb
上显示绘图后使用Matplotlib中的pause(n)
命令(其中n
是秒数)。下面是一个例子:字符串
kxeu7u2r2#
我发现你现在可以使用Spyder在调试模式下绘图了。它出奇的简单。
字符串
......
bybem2ql3#
在导入
pylab
时,您是否考虑过ion()
功能?这应该允许在pdb
中进行交互式绘图。字符串
上面的工作在我的机器上(Ubuntu 11.04,Python 2.7,SciPy bersion 0.8.0),甚至在Eclipse中运行PyDev。