6

これは、約2年前の日食スレッドを介したこのインタラクティブなmatplolibのフォローアップですが、その間に何か進歩があったのではないかと思いました。

Eclipse PyDevのコンソールウィンドウでIPythonコンソールを実行していますが、Eclipse PyDevの外部の(Windows)コマンドプロンプトでIPythonを実行する場合と同じように、matplotlibでインタラクティブなプロット機能を取得できません。2つの比較方法は次のとおりです。

A)EclipsePyDevの外部のシェルでIPythonを実行する

  1. 「ipython--pylab」を使用してWindowsコマンドプロンプトでIPythonを実行します
  2. IPythonコンソール内で「plot([1,2,3])」と入力します。これにより、図のプロットウィンドウが開き、IPythonコンソールで次のコマンドを実行できるようになります(図のプロットウィンドウを閉じる必要はありません)。
  3. たとえば、「xlabel('years')」と入力すると、フィギュアプロットウィンドウが更新されます。

B)EclipsePyDev内のインタラクティブコンソールでのIPythonの実行EclipsePyDev内 のIPythonインタラクティブコンソールに次のように入力します。

  1. 「pylabインポートから*」
  2. "plot([1,2,3])"->図のプロットウィンドウが表示されません。
  3. フィギュアプロットウィンドウを開くには、「show()」と入力する必要があります。しかし、問題は、Figureのプロットウィンドウを開いたままにしている限り、IPythonコンソールが新しいコマンドを受け入れないことです。
  4. そこで、図のプロットウィンドウを閉じ、「xlabel('years')」と入力してから、もう一度「show()」と入力します。これにより、軸ラベルとして「年」を使用して図のプロットウィンドウが再度開きますが、プロット自体は空であり、[1,2,3]データは表示されなくなります。

この動作では、A)は明らかにB)よりも優れていますが、IPythonフォームを実行するときのようにすべての変数を表示するコマンドを実行する必要がなく、常に画面に変数リストを表示するのが好きなので、EclipsePyDevで作業を続けたいと思います。 Windowsシェル)。他のスレッドで提案されているように、Wicked Shellの使用は機能しません(IPythonはWicked Shellでは正しく機能しません)。

Eclipse PyDevでIPythonを構成して、Windowsコマンドプロンプトで実行する場合と同じインタラクティブな動作を表示するにはどうすればよいですか?

4

4 に答える 4

4

不完全な回答になる可能性があることをお詫びしますが、問題を解決できることを願っています。

OPが説明しているのは正常な動作だと思います。実際、コマンド ライン ipython から始めて、pylab をインポートし、plot コマンドを発行すると、記述されているブロック動作が正確に生成されるため、これは pydev や eclipse とは関係ありません。実際のところ、matplotlib での表示はインタラクティブ モードでブロックされています。「ipython --pylab」として開始された ipython セッションで matplotlib を使用すると、ipython 開発者が matplotlib に関して行ったいくつかの「ハック」を利用して、インタラクティブ モードと非ブロッキング呼び出しの両方を使用できるようになります。ただし、これらの「ハック」を適用するには、pylab をインポートするだけでは不十分です。PyDev はインタープリター呼び出しへのフラグを許可していないようです。そのため、「ipython --pylab」を直接呼び出すことはできません。

幸いなことに、ipython には、ハックを適用して pylab をインポートする特別なコマンド "pylab" があります。したがって、コンソール内で「pylab」と入力してみてください (実際には、pydev コンソールをカスタマイズして、自動的に実行されるようにすることもできます)、目的の動作が得られるはずです。ただし、これはコマンドラインから開始された ipython セッションからはうまく機能しますが、Eclipse 内から同じことをしようとすると何か問題が発生することを報告する必要があります。コマンドがブロックされず、python アイコンが表示されますが、matplotlib ウィンドウが表示されません。記録のために、私は Snow Leopard を実行している Mac を使用しています。OPが使用しているように見えるWindowsでも同じ問題が発生するかどうかはわかりません。

于 2013-01-25T22:04:04.223 に答える
0

%matplotlibmagic-commandを使用して、インタラクティブなプロットを有効にするだけです(まさにあなたが説明したとおりです)。

このpylabコマンドは と をインポートnumpy.*pylab.*、グローバル名前空間を深刻に汚染します。

于 2014-02-16T22:10:16.913 に答える
0

別のスレッドでプロット関数を実行することにより、Eclipse PyDev で同様の動作を実現します。

import threading
from pylab import *
import matplotlib.animation as animation
import time

x = array(range(0,1000))/100
y = sin(x)

def updateData(self):
    ax.set_data(x,y)

def MyThread():
    global ax
    fig, axarr = subplots(1)
    ax, = axarr.plot(x,y)
    simulation = animation.FuncAnimation(fig, updateData)
    show()


t = threading.Thread(target=MyThread)
t.start()

# console stay active, user can interactively control figure
time.sleep(1)
y = sin(2*x)
time.sleep(2)
ax.get_axes().grid()
ax.get_axes().set_xlabel("time")

ツールチェーン Eclipse 4.3、PyDev 2.7.1、Python 3.2、IPython 0.13 でテスト済み

于 2013-03-29T12:55:43.153 に答える