26

編集

残念ながら、現時点ではこれは不可能です。Spyderのバグであることがわかりました。開発者は、これにアプローチする方法をまだ考えています


ゴール

コードのデバッグ中にデータを視覚化します (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()
    

プロットは「凍結」状態のままです。デバッガーを終了すると、プロットが更新されます。プロットを閉じようとすると、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.
    

その後、スパイダーは完全にフリーズします。

助言がありますか?

注 #1 : 私の完全なコードには、多くのファイルと多くの関数があるため、関数を使用せずに 1 つのスクリプトにまとめることはできません。

注 #2 : matplotlib インタラクティブ コマンド (ion()、interactive(True) など) を使用しても効果はありませんでした。

注 #3 : Spyder バージョン 2.0.12、Python 2.6、matplotlib 1.0.1。

4

3 に答える 3

16

( Spyder メンテナーはこちら) 2020 年 11 月 8 日にリリースされた Spyder 4.2.0は、デバッグ中にインタラクティブな Matplotlib プロットを操作する機能をサポートしています。つまり、特別なオプションを設定する必要はありません。

以前のバージョンでは、プロットを に表示した後、pause(n)Matplotlib のコマンド (は秒数) を使用するのが最善の解決策です。次に例を示します。nipdb

from matplotlib.pyplot import imshow, pause
import numpy as np
x = np.random.rand(4,5)
imshow(x)
pause(1)
于 2013-11-05T13:58:06.417 に答える
5

Spyder を使用してデバッグ モードで実際にプロットできることがわかりました。驚くほど簡単です。

ipdb>pylab.plot(x,y)
ipdb>pylab.show()

……

于 2014-01-17T21:39:12.810 に答える