Spyder / IPython / matplotlibでインタラクティブプロットを再度取得するにはどうすればよいですか?


91

Windows 7でPython(x、y)2.7.2.3から2.7.6.0にアップグレードしました(そしてfunction_name?、オブジェクトインスペクタでdocstringを最後に入力して表示できることを嬉しく思いました)が、今はプロットが機能しない慣れている。

以前(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に切り替えるか、[サポートをアクティブにする]をオフにすると、最初のサブプロットまたはその一部のみがプロットされ、その後停止します。

ここに画像の説明を入力してください

相互作用できる1つの図で4つの並列サブプロットの古い動作を取得するにはどうすればよいですか?


これはpythonxyへのバグレポートとして送られるべきだと思います。私の素朴な推測は、そこにすべてのプロットを処理するためにpyplotを使用していて、それのために尻に噛まれていることです(彼らは独自のqtウィジェットを持っているため、これは間違っているようです)。
tacaswell 2014年

1
@tcaswell誰が「彼ら」であり、彼らはpyplotの代わりに何を使うでしょうか
内部石

1
この問題をpythonxy外で再現できますか(まっすぐなipython + qtconsoleを使用するだけ)?何が問題なのかを分類するのに十分な情報がここにありません。
tacaswell

1
Spyderのバグだと思います(SpyderはIDE、pythonxyはディストリビューションです)。
トーマスK

1
@tcaswell:ああ。私のスクリプトがmatplotlibエラーを生成しているようです。このエラーはIPythonコンソール以外の場所に送信されます。代わりにQtコンソールを使用すると表示されますが、探したところで、Spyderの通常の[コンソール]タブに表示されます。もっと簡単なスクリプトを作成すれば、ステートマシンでもオブジェクト指向でも機能します。新しいインラインプロットのために、一部のIPython設定を変更する必要があると思いました。
内部石

回答:


134

バックエンドを自動に変更します。

ツール>設定> IPythonコンソール>グラフィック>グラフィックバックエンド>バックエンド:自動

次にSpyderを閉じて開きます。


27
閉鎖と開放は確かに必要です。なぜこれがデフォルト値ではないのか疑問に思います。
Mathias711 2016

5
また、プロットがまだ表示されていない場合(私がそうでなかったように)、プロットウィンドウがコンソールウィンドウに表示されている可能性があります(少なくともWindows 10のSpyderで表示されているため)、ウィンドウを探し回る必要がある場合があります。
Joshua Glazer

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 inline」の目的


Python 3.6で、私は取得しますmatplotlib inline File "<stdin>", line 1 %matplotlib inline ^ SyntaxError: invalid syntax
Karlo

2
@Karloそのエラーは、従来の「python」インタープリターから予想されます。この構文はipythonまたはSpyderでのみ有効です。
Mike T

OK、それをSpyderで使用していましたが、Pythonコンソールで使用していました。実際、IPythonコンソールで動作します。
Karlo、2017年

3
スクリプトを使用して設定する方法はありますか?つまり、スクリプト内のグラフの出力がどこにあるかを選択するのですか。ありがとうございました。
Royi 2017

1
これはSpyderでは機能しないようですが、通常のIPythonウィンドウで機能する方法です。メニューの設定を使用するとうまくいきました。なぜそうなのかわからない。
カメはかわいい

10

適用後:ツール>設定>グラフィックス>バックエンド>自動 カーネルを再起動するだけ ここに画像の説明を入力してください

そして、あなたはきっとInteractive Plotを手に入れるでしょう。ハッピーコーディング!


5

コメントで述べたように、問題はスクリプトにあります。実際には、2つの問題があります。

  • matplotlibエラーがあります、あなたは引数を次のように渡していると思います Noneどこかで。たぶんdefaultdictが原因ですか?
  • show()各サブプロットの後に呼び出します。show()スクリプトの最後に一度呼び出す必要があります。代替方法は、対話モードを使用することですion。matplotlibのドキュメントを参照してください。

2

これは実際には修正が非常に簡単で、コーディングは必要ありません。

1.コンソール上部の「作図」タブをクリックします。2.次に、プロット画面の右上隅にあるオプションボタンをクリックします。3.最後に「インラインプロットをミュート」ボタンをオフにします

スクリプトを再実行すると、グラフがコンソールに表示されます。

乾杯。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.