修改
不幸的是,目前这是不可能的。我发现它是bug in Spyder。开发人员是still figuring out how to approach this。
在调试代码时可视化数据(我也想使用Spyder!)。
使用以下代码创建名为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()
情节仍处于“冻结”状态。如果我退出调试器,则绘制更新。如果我试图关闭情节,IPython会崩溃。显然这两者都是不受欢迎的,也不会让我在调试时看到数据。
从命令行打开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。
写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.
有什么建议吗?
注意#1 :在我的完整代码中,我有许多文件和许多功能,因此在一个没有功能的脚本中将它们混合在一起是不可行的。
注意#2 :使用任何matplotlib交互式命令(例如ion(),交互式(True)等)都没有效果。
Note#3 :Spyder版本2.0.12,Python 2.6,matplotlib 1.0.1。
答案 0 :(得分:8)
( Spyder dev here )注意:很抱歉在这么长时间之后回答这个问题,但也许其他人会发现它有用。
现在(11月13日)的最佳解决方案是在{{1}上显示情节后,使用pause(n)
中的matplotlib
命令(其中n
为秒数) }}。这是一个例子:
pdb
从我们之前的开发者之一Jed Ludlow看看这个comment,在那里他描述了这个解决方案。
答案 1 :(得分:2)
导入ion()
时是否考虑了pylab
功能?这应该允许在pdb
中进行交互式绘图。
import pylab
import pdb
pylab.ion()
tst_xdata = [1,2,3,4,5,6]
tst_ydata = [1,1,1,1,1,1]
pylab.plot(tst_xdata,tst_ydata)
pylab.draw()
pdb.set_trace()
for idx in range(3):
tst_ydata = [elem+2 for elem in tst_ydata]
pylab.plot(tst_xdata,tst_ydata)
pylab.draw()
pylab.show()
以上工作在我的机器上运行(Ubuntu 11.04,Python 2.7,SciPy bersion 0.8.0),甚至可以在带有PyDev的Eclipse中运行。
答案 2 :(得分:1)
我发现你现在可以使用Spyder在调试模式下进行绘图。这非常简单。
ipdb>pylab.plot(x,y)
ipdb>pylab.show()
...